攝影機和系統設定管理和用法也已在 Extended View System (EVS) 1.1 中更新。由於 EVS 1.0 並未提供查詢相機裝置資訊和系統設定的方法,因此應用程式開發人員必須自行取得這些資訊。舉例來說,如果用戶端實作某些電腦視覺應用程式,就必須具備相機校正資料。
為避免這種情況發生,EVS 1.1 會使用攝影機中繼資料擴充攝影機裝置描述元資料,並提供多種方法,讓用戶端取得攝影機裝置和系統設定資訊。
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
已擴充至包含相機裝置中繼資料,而這類型則是從 android.frameworks.cameraservice.device@2.0
匯入。這個設計選擇可讓供應商在實作中使用 camera_metadata_t
,並充分利用 ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS
中定義的 API。EVS 驅動程式可使用這類型來識別每個攝影機模組支援的串流設定。此外,供應商也無法使用自己的中繼資料類型,提供 ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS
中說明的「未在 Android 中定義」的其他資訊。EVS 驅動程式可使用這類型來識別每個攝影機模組支援的串流設定。
開啟相機裝置,並設定所需的串流
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);
Android 定義的其中一個中繼資料欄位是 ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS
。EVS 驅動程式可使用這類型來判斷各攝影機模組支援哪些串流設定。例如,以下提供的參考實作會列出每個支援的串流設定資訊:
- 串流 ID
- 寬度
- 高度
- 方向 (輸入或輸出)
- 畫面更新率
單一攝影機硬體執行個體上的多個用戶端
如果用戶端要求開啟已啟用的攝影機裝置,EVS 管理員會將要求的串流設定與有效設定進行比較。如果兩者不同,則 EVS 管理員會傳回空值 IEvsCamera 物件。用戶端必須妥善處理此可能的失敗情形。
參考設定檔
EVS 1.1 中附帶的參考設定檔是以 XML 編寫,供應商可以使用附帶的 DTD 檔案 (如下所示) 驗證 (修改過的) 範例設定檔,或使用自己的檔案 (如果他們想使用相同格式)。DTD 檔案也會為每個元素和屬性提供詳細說明。
<?xml version='1.0' encoding='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 : changyeon@google.com Version: 1.0 --> <!ELEMENT configuration (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 (dimension,num_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/sensors/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 the device element. --> <!ELEMENT num_cameras EMPTY> <!ATTLIST num_cameras value CDATA #REQUIRED > <!-- List of predefined use cases --> <!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 attribute. --> <!ELEMENT use_case EMPTY> <!ATTLIST use_case id CDATA #REQUIRED camera CDATA #REQUIRED stream_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 is a single camera in the group 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 be supported by each camera device in the group. --> <!-- Camera device descriptor @attr id : Unique camera identifier. @attr position : Must be one of front, rear, left, or right. --> <!ELEMENT device (caps,characteristics*)> <!ATTLIST device id CDATA #REQUIRED 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 android.hardware.automotive.evs@1.1::CameraParam. --> <!ELEMENT supported_controls EMPTY> <!ATTLIST supported_controls value CDATA #REQUIRED > <!-- A list of supported output sizes. --> <!ELEMENT stream EMPTY> <!ATTLIST stream id CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED format CDATA #REQUIRED > <!-- Camera module characteristics including its optics and imaging sensor. --> <!ELEMENT characteristics (parameter)*> <!ELEMENT parameter EMPTY> <!-- A name of camera characteristic. This must be a subset of android.hardware.automotive.evs@1.1::CameraCharacteristics. --> <!ATTLIST parameter name CDATA #REQUIRED type CDATA #REQUIRED size CDATA #REQUIRED value CDATA #REQUIRED > <!-- Available display devices --> <!ELEMENT display (display_device)*> <!-- Display device descriptor @attr id : Unique display identifier. @attr position: Display mount location. --> <!ELEMENT display_device (supported_formats)*> <!ATTLIST display_device id CDATA #REQUIRED position CDATA #REQUIRED > <!-- A list of supported input data formats. @attr value: A comma separated list of input data formats --> <!ELEMENT supported_formats EMPTY> <!ATTLIST supported_formats value CDATA #REQUIRED >
下方為設定檔案範例 (範例包含虛擬數值資料)。
<?xml version='1.0' encoding='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, to validate XML configuration file --> <configuration> <!-- system configuration --> <system> <!-- reference dimension of the vehicle in the unit of centimeters --> <dimension x='200' y='400' z='100' /> <!-- number of cameras available to EVS --> <num_cameras value='2'/> <!-- list of supported use cases --> <supported_use_case> <!-- use case configuration --> <use_case id='rear_view' camera='/dev/video1' stream_id='1' /> <!-- use case configuration --> <use_case id='surround_view' camera='group1' stream_id='0' /> </supported_use_case> </system> <!-- camera device information --> <camera> <!-- camera group 0 --> <group group_id='group0' device_id='/dev/video1,/dev/video2' synchronized='false' > <caps> <stream id='0' width='640' height='360' format='V4L2_PIX_UYUV'/> </caps> </group> <!-- 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, SHARPNESS, AUTO_EXPOSURE, ABSOLUTE_EXPOSURE, AUTO_FOCUS, ABSOLUTE_ZOOM' /> <!-- list of supported stream configurations --> <stream id='0' width='1280' height='1080' format='V4L2_PIX_NV21'/> <stream id='1' width='1280' height='1080' format='V4L2_PIX_YUYV'/> <stream id='2' width='1280' height='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 id='5' width='640' height='360' format='V4L2_PIX_UYUV'/> <stream id='6' width='320' height='240' format='V4L2_PIX_NV21'/> <stream id='7' width='320' height='240' format='V4L2_PIX_YUYV'/> <stream id='8' width='320' height='240' format='V4L2_PIX_UYUV'/> </caps> <!-- list of parameters --> <characteristics> <!-- Lens distortion information. See https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#LENS_DISTORTION --> <parameter name='LENS_DISTORTION' type='float' size='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='LENS_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_TRANSLATION https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#LENS_POSE_ROTATION --> <parameter name='LENS_POSE_TRANSLATION' type='float' size='3' value='0.0,0.0,0.0' /> <parameter name='LENS_POSE_ROTATION' type='float' size='4' value='0.0,0.0,0.0,0.0' /> </characteristics> </device> <device id='/dev/video2' position='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>