對接安卓的平臺時,需要注冊對應的camera設備,供安卓標準api進行操作,rk的平臺需要在HAL層配置camera3_profiles.xml文件,適配驅動的信息,進行注冊camera設備。該xml對應的內容很多,很多CTS測試問題都是該文件配置導致。對應不同的sensor,建議根據功能更新xml配置。以下對xml部分配置做一下簡要的說明:
目錄
1.xml文件說明
2.xml屬性
2.1?設備注冊名稱與ID
2.2 Android_metadata
2.2.1 control.aeAvailableAntibandingModes?
2.2.2 control.aeAvailableModes
2.2.3?control.aeAvailableTargetFpsRanges
2.2.4?control.afAvailableModes
2.2.5?control.awbAvailableModes
2.2.6?jpeg.maxSize
2.2.7?lens.info.availableApertures
2.2.8?lens.info.availableFocalLengths
2.2.9?lens.info.minimumFocusDistance
2.2.10?lens.facing
2.2.11?scaler.availableMaxDigitalZoom
2.2.12?scaler.availableStreamConfigurations
2.2.13?scaler.availableMinFrameDurations
2.2.14?scaler.availableStallDurations
2.2.15?sensor.info.activeArraySize
2.2.16?sensor.info.physicalSize
2.2.17?sensor.info.pixelArraySize
2.2.18?sensor.orientation
2.2.19?flash.info.available
2.2.20?supportTuningSize
2.2.21?sensorType
2.2.22?statistics.initialSkip
2.2.23?aiq.workingMode
2.2.24?aiq.multicamera
3. 注意點
1.xml文件說明
camera3_profiles.xml文件對應SDK目錄下具體芯片平臺的文件:
hardware/rockchip/camera/etc/camera/camera3_profiles_rk3xxx.xml
在設備上的路徑為:
/vendor/etc/camera/camera3_profiles.xml
若是臨時調試,可以采用adb替換文件的形式,但需要注意文件路徑與文件名的正確性。
camera3_profiles.xml包含多個Profiles節點,Profiles節點包含一個完整的camera屬性列表,機器有幾個camera,就需要配置幾個Profiles節點。
Profiles 節點下又包含了如下四個子節點。
<Profiles cameraId="0" name="ov50c40" moduleId="m00"><Supported_hardware></Supported_hardware><Android_metadata> <!-- Android static metadata only --></Android_metadata>
<!-- ******************PSL specific section start **************************************************************--><Hal_tuning_RKISP1> </Hal_tuning_RKISP1><Sensor_info_RKISP1> </Sensor_info_RKISP1><!-- ******************PSL specific section end **************************************************************-->
<Android_metadata> 節點包含的信息主要是 camera 的能力支持,該字段的信息上層將通過 camera_module?的 API:get_camera_info() 獲取到。Camera 運行時也可以通過如下命令獲取到相關的信息。
2.xml屬性
簡要介紹一下xml中需要配置的一些相關屬性。
2.1?設備注冊名稱與ID
xml中name參數與moduleid參數取決定著能否成功注冊安卓camera設備,若該兩項屬性配置異常,則會導致
-
name:需要與驅動名稱一致,有大小寫區別;
-
moduleId:需要與驅動dts中配置的index一致,關鍵配置項,值格式為 “mxx”,其中 “m”為“module”縮寫,“xx”為十進制數字,標示camera 唯一編號,moduleId 需要與驅動 DTS 中配置相一致,否則將探測錯誤。另外,配置多個camera 時,多個 camera 的<profiles>項需要按照 moduleId 升序排列。
通過如下命令: adb shell cat /sys/class/video4linux/*/name 可以獲取所有 v4l2 設備點節的名字,其中形如 m00_b_ov5695 2-0036 為 sensor 節點名稱。 該命令規則中, m00 代表 moduleId ,主要為匹配 len,flash之用, ‘b’ 代表 camera 方向為后置,如果是前置則為‘f’,‘ov5695’代表 sensor name , ‘2-0036’代表 I2c 地址。
2.2 Android_metadata
以 下 Android_metadata 設 置 項 主 要 為 Android 相 關 配 置 項 , 各 字 段 具 體 可 參 考
<SDK>/system/media/camera/docs/docs.html 說明。
2.2.1 control.aeAvailableAntibandingModes?
SOC: AUTO
RAW: 50HZ,60Hz // 以排在首位的作為初始化配置
2.2.2 control.aeAvailableModes
ON // 不支持 flash 時
ON,ON_AUTO_FLASH,ON_ALWAYS_FLASH // 支持 flash 時
2.2.3?control.aeAvailableTargetFpsRanges
該設置項有多個限制需要注意:
1) 錄像必需要有一組恒定幀率, 假如幀率為 x, 那就要包含(x,x)
2) 錄像幀率必需至少要一組大于 24 幀
3) 第一組必需 Min <= 15. 所以第一組一般為 (15,x)
4) 各組幀率需要按升序排列
升序具體意義為,假設有定義有兩組幀率:(min1,max1),(min2,max2),則 max2 >=max1,max2 ==?max1 時,還需要滿足 min1 <= min2。
一般情況下 sensor 驅動只會輸出兩組分辨率,全分辨率及 binning 分辨率,其他分辨率即使有調試也一般不使用(可由 ISP 裁剪及縮放得到)。
假設:
max2 = max_fps_bining
max1 = max_fps_full
且 max2 >= max1
那么
1)如果 max1 > 15,可按如下配置
(min1,max1),(max1,max1),(min2,max2),(max2,max2)
其中 min1 <=15, min2 > 0,max2 >= 24。如果需要增加錄像的固定幀率,則按上述升序列規則添加即可。
示例如下:
假如: max1 = 20, max2 = 30, 且需要有 15 fps 的固定錄像幀率,那么可按如下配置:
(15,15),(10,20),(20,20),(10,30),(30,30)?
2)如果 max1 <= 15,可按如下配置
(max1,max1),(min2,max2),(max2,max2)
其中 min2 > 0,max2 >= 24。如果需要增加錄像的固定幀率,則按上述升序列規則添加即可。示例如下:
假如: max1 = 7, max2 = 30, 且需要有 15 fps 的固定錄像幀率,那么可按如下配置:
(7,7),(15,15),(10,30),(30,30)
注:min fps 可用于控制拍照預覽時的最小幀率,也即控制了最大曝光時間,可以根據需要進行調整,但設置過小會影響拍照速度,但在較暗情況下能獲得更好的預覽效果。
2.2.4?control.afAvailableModes
SOC:OFF //soc camera 不支持 af?
RAW:OFF // 如果 camera 沒有 af 功能
RAW: AUTO,CONTINUOUS_VIDEO,CONTINUOUS_PICTURE,OFF // camera 具有 af 功能
2.2.5?control.awbAvailableModes
SOC:AUTO
RAW:AUTO,INCANDESCENT,FLUORESCENT,DAYLIGHT,CLOUDY_DAYLIGHT
2.2.6?jpeg.maxSize
計算公式如下:
?最大分辨率為:scaler.availableStreamConfigurations 中 BLOB 項最大分辨率項
?jpeg.maxSize >= max_blob_w * max_blob_h * 3 / 2
2.2.7?lens.info.availableApertures
可選光圈,目前只支持一個,可從模組規格書中獲取。
2.2.8?lens.info.availableFocalLengths
可選焦長,目前只支持一個,可從模組規格書中獲取,與 FOV 計算相關。
2.2.9?lens.info.minimumFocusDistance
0.0 // 不支持 af 時
非 0 // 支持 af 時,務必配置配置成非 0,具體需要根據模組規格書來設置
2.2.10?lens.facing
BACK:后攝
FRONT:前攝
2.2.11?scaler.availableMaxDigitalZoom
默認值為 4.0,根據芯片平臺及需要可增大或減小放大倍數;注意增大放大倍數時,在放大預覽情況下,在不同平臺上可能會影響預覽幀率,主要是由平臺的 2D 加速器引起的,如果發現存在該種情況,請減小放大倍數。
2.2.12?scaler.availableStreamConfigurations
HAL 層支持的分辨率列表, 有如下限制:
1)需要按照分辨率依次降序排列
2)為了滿足 CTS 要求,需要包含 352x288,320x240,176x144 配置項
3)如果在 media_profiles_V1_0.xml 中有指定錄像分辨率,那么該列表中需要包含該分辨率
4)列表中需要支持 BLOB,YCbCr_420_888,IMPLEMENTATION_DEFINED 三種格式輸出配置,三種格式中支持 的分辨率都要相同
5)為了不影響拍照速度,如果 sensor 最大輸出尺寸寬度大于 4096 時,需將最大分辨率寬度限制在?4096。
<scaler.availableStreamConfigurations value="BLOB,2688x1520,OUTPUT,BLOB,1920x1080,OUTPUT,BLOB,1280x960,OUTPUT,BLOB,1280x720,OUTPUT,BLOB,640x480,OUTPUT,BLOB,320x240,OUTPUT,BLOB,176x144,OUTPUT,YCbCr_420_888,2688x1520,OUTPUT,YCbCr_420_888,1920x1080,OUTPUT,YCbCr_420_888,1280x960,OUTPUT,YCbCr_420_888,1280x720,OUTPUT,YCbCr_420_888,640x480,OUTPUT,YCbCr_420_888,320x240,OUTPUT,YCbCr_420_888,176x144,OUTPUT,IMPLEMENTATION_DEFINED,2688x1520,OUTPUT,IMPLEMENTATION_DEFINED,1920x1080,OUTPUT,IMPLEMENTATION_DEFINED,1280x960,OUTPUT,IMPLEMENTATION_DEFINED,1280x720,OUTPUT,IMPLEMENTATION_DEFINED,640x480,OUTPUT,IMPLEMENTATION_DEFINED,320x240,OUTPUT,IMPLEMENTATION_DEFINED,176x144,OUTPUT"/>
2.2.13?scaler.availableMinFrameDurations
配置 scaler.availableStreamConfigurations 中各分辨率下最小幀間隔(即最大幀率),需要滿
足以下條件:
1)需要包含 scaler.availableStreamConfigurations 中定義的所有格式,分辨率
2)各分辨率最大幀率可從 sensor 驅動獲取,一般 sensor 只輸出 full 及 binning 兩種分辨率,列表中上報的支持分辨率如果 sensor 驅動不能直接支持,那么會由 ISP 裁剪及縮放得到,因此非 sensor 直接輸出的分辨率幀率與比之更大的最接近的 sensor 輸出分辨率相同。
<scaler.availableMinFrameDurations value="BLOB,2688x1520,33333333,BLOB,1920x1080,33333333,BLOB,1280x960,33333333,BLOB,1280x720,33333333,BLOB,640x480,33333333,BLOB,320x240,33333333,BLOB,176x144,33333333,YCbCr_420_888,2688x1520,33333333,YCbCr_420_888,1920x1080,33333333,YCbCr_420_888,1280x960,33333333,YCbCr_420_888,1280x720,33333333,YCbCr_420_888,640x480,33333333,YCbCr_420_888,320x240,33333333,YCbCr_420_888,176x144,33333333,IMPLEMENTATION_DEFINED,2688x1520,33333333,IMPLEMENTATION_DEFINED,1920x1080,33333333,IMPLEMENTATION_DEFINED,1280x960,33333333,IMPLEMENTATION_DEFINED,1280x720,33333333,IMPLEMENTATION_DEFINED,640x480,33333333,IMPLEMENTATION_DEFINED,320x240,33333333,IMPLEMENTATION_DEFINED,176x144,33333333" />
2.2.14?scaler.availableStallDurations
配置 scaler.availableStreamConfigurations 中 BLOB 格式各分辨率的允許的最大間隔時長,可直接復制scaler.availableMinFrameDurations 中 BLOB 的配置項,也可設置大于 scaler.availableMinFrameDurations 中的值,只需滿足小于 sensor.info.maxFrameDuration 中配置的最大間隔即可。設置大點有利于 CTS 拍照相關測試項的穩定性。
<scaler.availableStallDurations value="BLOB,2688x1520,33333333,BLOB,1920x1080,33333333,BLOB,1280x960,33333333,BLOB,1280x720,33333333,BLOB,640x480,33333333,BLOB,320x240,33333333,BLOB,176x144,33333333" />
2.2.15?sensor.info.activeArraySize
設置成 sensor 驅動輸出的最大分辨率,可從 sensor 驅動得到。
2.2.16?sensor.info.physicalSize
sensor 物理尺寸,可從模組規格書中得到。與 FOV 計算相關.
2.2.17?sensor.info.pixelArraySize
設置成 sensor 驅動輸出的最大分辨率,可從 sensor 驅動得到。
2.2.18?sensor.orientation
模組的安裝方向,可設置 0,90,180,270。客戶需根據模組在機器上的安裝方向進行調整,需要能通過 CTS verifier 相關項的測試;如果方向有水平或者垂直等鏡像問題,則可能需要調整 sensor 驅動的輸出方向。
2.2.19?flash.info.available
FALSE // 不支持閃光燈
TRUE // 支持閃光燈
2.2.20?supportTuningSize
SOC:不需設置此項
RAW:需要從對應的 IQ 效果文件中獲支持的分辨率,一般來說包括 sensor 的全分辨率和 binning 分辨率。如不設置此項,那么預覽時也會使用 sensor 驅動輸出的最大分辨率。
2.2.21?sensorType
SOC:SENSOR_TYPE_SOC //YUVsensor配置此項,不需要跑3A
RAW:SENSOR_TYPE_RAW // 測試數據流時,可將 RAW 的設置成 SENSOR_TYPE_SOC,只是輸出圖 像無 3A 效果,注意 RAW 攝像頭設置成 SOC 僅僅只用于調試。
2.2.22?statistics.initialSkip
打開 Camera 應用時,預覽前幾幀 3A 未收斂,可能在不同場景下存在前幾幀偏色等情況,通過該選項可設置合適的過濾幀數來避免該現象。
2.2.23?aiq.workingMode
NORMAL:線性模式
HDR2:HDR x2模式
HDR3:HDR x3模式
2.2.24?aiq.multicamera
配置多攝模式
true: 多攝模式
false: 單攝模式
3. 注意點
只是注冊cameraID,主要跟設備名稱與ID相關,此兩項會影響camera的注意,需注意。