Cambios en la configuración de la cámara y del sistema

La administración y el uso de la configuración del sistema y la cámara también se actualizaron en Extended View System (EVS) 1.1. Como EVS 1.0 no proporciona métodos para consultar la información del dispositivo de la cámara y la configuración del sistema, el desarrollador de apps debe obtener esa información por su cuenta. Por ejemplo, el cliente debe tener datos de calibración de la cámara si implementa algunas apps de visión artificial.

Para aliviar esta circunstancia, EVS 1.1 extiende un descriptor de dispositivo de cámara con metadatos de la cámara y proporciona varios métodos que permiten a los clientes obtener información sobre la configuración del sistema y del dispositivo de la cámara.

import android.frameworks.cameraservice.device@2.0::CameraMetadata;
import android.frameworks.cameraservice.common@2.0::CameraMetadataType;

/**
 * Structure describing the basic properties of an EVS camera, extended
 * from its v1.0 declaration.
 *
 * The HAL is responsible for filling out this structure for each
 * EVS camera in the system.
 */
struct CameraDesc {
    @1.0::CameraDesc v1;
    /**
     * Store camera metadata such as lens characteristics.
     */
    CameraMetadata metadata;
};

CameraDesc se extiende para tener metadatos del dispositivo de la cámara, y este tipo se importa desde android.frameworks.cameraservice.device@2.0. Esta elección de diseño permite a los proveedores usar camera_metadata_t en sus implementaciones y aprovechar las APIs definidas en ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS. El controlador de EVS puede usar este tipo para identificar qué configuraciones de transmisión admite cada módulo de cámara. Además, los proveedores no pueden usar sus propios tipos de metadatos para entregar otra información que no esté definida en Android, como se explica en ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS. El controlador de EVS puede usar este tipo para identificar qué configuraciones de transmisión admite cada módulo de cámara.

Cómo abrir un dispositivo de cámara con la configuración de transmisión deseada

import android.hardware.camera.device@3.2::Stream;

/**
 * Get the IEvsCamera associated with a cameraId from a CameraDesc
 *
 * Given a camera's unique cameraId from CameraDesc, returns the
 * IEvsCamera interface associated with the specified camera. When
 * done using the camera, the caller may release it by calling closeCamera().
 *
 * @param  cameraId  A unique identifier of the camera.
 * @param  streamCfg A stream configuration the client wants to use.
 * @return evsCamera EvsCamera object associated with a given cameraId.
 */
openCamera_1_1(string cameraId, Stream streamCfg) generates (IEvsCamera evsCamera);

Uno de los campos de metadatos que define Android es ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS. El controlador de EVS puede usar este tipo para identificar qué configuraciones de transmisión admite cada módulo de cámara. Por ejemplo, la implementación de referencia que se proporciona a continuación muestra la información de cada configuración de transmisión admitida:

  • ID de flujo
  • Ancho
  • Altura
  • Dirección (entrada o salida)
  • Velocidad de fotogramas

Varios clientes en una sola instancia de HW de la cámara

Si un cliente solicita abrir un dispositivo de cámara ya activo, el administrador de EVS compara una configuración de transmisión solicitada con la configuración activa. Si difieren, el administrador de EVS muestra un objeto IEvsCamera nulo. El cliente DEBE controlar correctamente esta posible falla.

Archivo de configuración de referencia

El archivo de configuración de referencia incluido en EVS 1.1 está escrito en XML y los proveedores pueden usar el archivo DTD incluido (que se muestra a continuación) para validar un archivo de configuración de muestra (modificado) o usar su propio archivo si desean usar el mismo formato. El archivo DTD también proporciona descripciones detalladas para cada elemento y atributo.

<?xml version='1.0' encoding=>&<#39;utf-8'?
!-- Copyright (C) 2019 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
  > 
<
limitations under the License. -- !-- Author : chang>ye<on@google.com Version: 1.0 -- !ELEMENT c>on<figuration (system,camera,display) !-- System Configuration that contains below informations: - The dimension of the vehicle. - Number of cameras available to EVS. > < - List of predefined use cases. -- !ELEMENT system (dimens>ion,n<um_cameras,supported_use_case*) !-- The x, y, and z dimension of the vehicle in the unit of centimeters. Axes are defined at https://source.android.com/docs/core/interaction/s>ensor<s/sensor-types#auto_axes> <-- !ELEMENT dimension EMPTY !ATTLIST dimension x CDATA '0' > < y CDATA '0' z CDATA '0' !-- The number of cameras that are available to EVS on the vehicle. This must be equal to> the <number of camera elements >of th<e device element. -- !ELEMENT num_cameras EMPTY> !<ATTLIST num_cameras value C>DATA <#REQUIRED !-- List of predefi>ned use c<ases -- !ELEMENT supported_use_case (use_case)* !-- Predefined configurations for each of listed use cases. @attr id : Unique string identifier of this use case. @attr camera : ID of either a single camera device or a camera group. @attr stream_id: Preferred stream configuration of camera device/group > < that is set by >camera at<tribute. -- !ELEMENT use_case EMPTY !ATTLIST use_case id CDATA #REQUIRED camera CD>AT<A #REQUIRED st>r<eam_id CDATA #REQUIRED > !--< Device descriptions -- !ELEMENT camera (group|device)* !-- Camera group descriptor @attr group_id : Unique logical camera group identifier. Camera device use this to be a member of the group. @attr device_id : Comma-separated list of unique camera identifiers of member camera devices. @attr synchronized: Boolean field that tells whether or not this camera is synchronized with other cameras in the same group. This is ineffective if there i>s a s<ingle camera in the g>roup <or a group is invalid. -- !ELEMENT group (caps) !ATTLIST group group_id CDATA #REQUIRED device_id >CDATA< #REQUIRED synchronized CDATA #REQUIRED !-- Please note that a camera may have stream configurations. If it has, all stream configurations >must b<e supported by each camera device in the group. -- !-- Camera device descriptor @attr id : Unique camera identifier. @attr posi>tion < : Must be one of front, rear, left, >or ri<ght. -- !ELEMENT device (caps,characteristics*) !ATTLIST device id >CDATA #RE<QUIRED position CDATA #REQUIRED !-- Camera metadata that contains: - A list of supported controls. > - A <list of supported stream configurations. > -- < !ELEMENT caps (supported_controls|stream)* !-- A list of supported controls. This must be a subset of andr>oid.hardware.<automotive.evs@1.1::CameraParam. > -<- !ELEMENT supported_controls EMPTY !ATTLIST supported>_controls < value CDATA #REQUIRED > < !-- A list of >supported out<put sizes. -- !ELEMENT stream EMPTY !ATTLIST stream id CDATA #REQUIRED width CDATA #REQUIRED height CDATA #>REQUIRED < format CDATA #REQUIRED !-- Camera module> characte<ristics including its optics and imag>ing sensor. -- < !ELEMENT character>istics (parameter<)* !ELEMENT parameter EMPTY !-- A name of camera characteristic. This must be a subset of android.hardware.a>utomotive.evs@1.1<::CameraCharacteristics. -- !ATTLIST parameter name CDATA #REQUIRED type CDATA #REQUIRED size CDATA #REQUIRE>D < value CDATA >#<REQUIRED !-- Ava>ilabl<e display devices -- !ELEMENT display (display_device)* !-- Display device descriptor @attr id : Unique display ide>ntifi<er. @attr position: Display mount locat>ion. < -- !ELEMENT display_device (supported_formats)* !ATTLIST display_device id > CDA<TA #REQUIRED position CDATA #REQUIRED !-- A list of supported input data formats. @attr va>lue: A co<mma separated list of input data> formats < -- !ELEMENT supported_formats EMPTY !ATTLIST >supported_formats value CDATA #REQUIRED

A continuación, se muestra un archivo de configuración de muestra (la muestra contiene datos numéricos ficticios).

<?xml version='1.0' encoding=>&<#39;utf-8'?
!-- Copyright (C) 2019 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
  >  < limitations under the License.
--

!-- Extended View System Example Configuration

     Android Automotive axes are used to define coordinates.
     See https://source.android.com/docs/core/interaction/sensors/sensor-types#auto_axes

     Use evs_configuration.dtd with xmllint tool, t>o <validate XML >confi<guration file
--

configura>tion
<    !->- system <configuration --
    system
        !-- reference dimension of the v>ehicle in< the unit of centimeters --
       > dimension< x='200' y='400' z='1>00' /<

        !-- number o>f cameras <available to EVS --
        num_ca>meras val<ue='2'/

 >       !-- li<st of supported use cases --
>        suppo<rted_use_case
            !-- use case configuration --
            use_case
                id='rear_view'
    >            ca<mera='/dev/video1'
  >             < stream_id='1'
            /

            !-- use case configuration --
            use_case
                id>='sur<round_view'
   >     <       > camer<a='group1'
             >   st<ream_i>d='0&<#39;
            /
  >      /su<pported_use_case
    /system

    !-- camera device information --
    camera
        !-- camera group 0 --
        gro>up group_id=&<#39;>group0'
     <          device_id='/dev/video1,/dev/video2'
        >       synchr<onize>d='fa<lse>9;
       < 
            caps
        >        s<tream id='0' width='640'>; height='<;360>' format='<;V4L2_PIX_UYUV'/
            >/caps
        /gr<oup

        !-- camera device starts --
        device id='/dev/video1' position='rear'
            caps
                !-- list of supported controls --
                supported_controls
                    value='BRIGHTNESS,
                           CONTRAST,
                           AUTO_WHITE_BALANCE,
                           WHITE_BALANCE_TEMPERATURE,
                           SHARP>NESS,
            <               AUTO_EXPOSURE,
                >           ABSOLU<TE_EXPOSURE,
                           AUTO_FOCUS,
            >               AB<SOLUTE_ZOOM'
                /

                !-- list of >supported stream <configurations --
                stream id='0' width=&#>39;1280' heig<ht='1080' format='V4L2_PIX_NV21'/
              >  stream id='<1' width='1280' height='1080' format='V4>L2_PIX_YUYV'/<
                stream id='2' width='1280' heig>ht='1080'< format='V4L2_PIX_UYUV'/
                stream id='>3' width='<;640'  height='360'  format='V4L2_PIX_NV21'/>
                <stream id='4' width='640'  height='360' > format='<V4L2_>PIX_YUYV'/<
                stream i>d='5'< width='640>'  height=<9;360'  format='V4L2_PIX_UYUV'/
                stream id='6' width='320'  height='240'  format='V4L2_PIX_NV21'/
                stream id=&>#39;7' width=<'320'  height='240'  format='V4L2_PIX_YUYV'/
                stream id='8' width='320'  height='240'  format='V4L2_PIX_UYUV'>/
            /cap<s

            !-- list of parameters --
            characteristics
                !-- Lens distortion information. See
                     https://developer.android.com/reference/android/hardware/cam>era2/CameraCharac<teristics.html#LENS_DISTORTION
                --
                parameter
                    name='LENS_DISTORTION'
                    type='float'
                    siz>e='5'
    <                value='0.0,0.0,0.0,0.0,0.0'
                /

                !-- Camera intrinsic calibration matrix. See
                     https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#LENS_INTRINSIC_CALIBRATION
                --
                parameter
              >      name='L<ENS_INTRINSIC_CALIBRATION'
                    type='float'
                    size='5'
                    value='0.0,0.0,0.0,0.0,0.0'
             >   /

           <     !-- Camera pose translation and rotation. See
                     https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#LENS_POSE_TRANS>LATION
      <               h>ttps://de<veloper>.android.<com/reference/android/hardware/camera2/C>ameraCharacte<rist>ics.html#LENS_POS<E_ROTATION
                --
                >parameter
       <             name='LENS_POSE_TRANSLATION'
              >      type=&#<39;fl>oat'
<       >     <       > size=<'3'
                >    v<alue=&#>39;0.0,0.<0,0.0'
                /
                p>arameter
    <                name='LENS_POSE_ROTATION'
                    type='float'
                    size='>4'
      <              value='0.0,0.0,0.0,0.0'
                /
            /characteristics
        /device
        device> id='</dev/video2'>; pos<ition=&#>3<9;front'
 >           caps
                !-- list of supported stream configurations --
                stream id='0' width='1280' height='1080' format='V4L2_PIX_NV21'/
            /caps
        /device
    /camera

    !-- display device starts --
    display
        display_device id='display0' position='driver'
            !-- list of supported input formats
                 This must be a subset of android_pixel_format_t enum.
            --
            supported_formats
                value='RGBA_8888,
                       YUYV,
                       UYVY'
            /
        /display_device
    /display
/configuration