对接安卓的平台时,需要注册对应的camera设备,供安卓标准api进行操作,rk的平台需要在HAL层配置camera3_profiles.xml文件,适配驱动的信息,进行注册camera设备。该xml对应的内容很多,很多CTS测试问题都是该文件配置导致。对应不同的sensor,建议根据功能更新xml配置。以下对xml部分配置做一下简要的说明:
目录
[2.1 设备注册名称与ID](#2.1 设备注册名称与ID)
[2.2 Android_metadata](#2.2 Android_metadata)
[2.2.1 control.aeAvailableAntibandingModes](#2.2.1 control.aeAvailableAntibandingModes)
[2.2.2 control.aeAvailableModes](#2.2.2 control.aeAvailableModes)
[2.2.3 control.aeAvailableTargetFpsRanges](#2.2.3 control.aeAvailableTargetFpsRanges)
[2.2.4 control.afAvailableModes](#2.2.4 control.afAvailableModes)
[2.2.5 control.awbAvailableModes](#2.2.5 control.awbAvailableModes)
[2.2.6 jpeg.maxSize](#2.2.6 jpeg.maxSize)
[2.2.7 lens.info.availableApertures](#2.2.7 lens.info.availableApertures)
[2.2.8 lens.info.availableFocalLengths](#2.2.8 lens.info.availableFocalLengths)
[2.2.9 lens.info.minimumFocusDistance](#2.2.9 lens.info.minimumFocusDistance)
[2.2.10 lens.facing](#2.2.10 lens.facing)
[2.2.11 scaler.availableMaxDigitalZoom](#2.2.11 scaler.availableMaxDigitalZoom)
[2.2.12 scaler.availableStreamConfigurations](#2.2.12 scaler.availableStreamConfigurations)
[2.2.13 scaler.availableMinFrameDurations](#2.2.13 scaler.availableMinFrameDurations)
[2.2.14 scaler.availableStallDurations](#2.2.14 scaler.availableStallDurations)
[2.2.15 sensor.info.activeArraySize](#2.2.15 sensor.info.activeArraySize)
[2.2.16 sensor.info.physicalSize](#2.2.16 sensor.info.physicalSize)
[2.2.17 sensor.info.pixelArraySize](#2.2.17 sensor.info.pixelArraySize)
[2.2.18 sensor.orientation](#2.2.18 sensor.orientation)
[2.2.19 flash.info.available](#2.2.19 flash.info.available)
[2.2.20 supportTuningSize](#2.2.20 supportTuningSize)
[2.2.21 sensorType](#2.2.21 sensorType)
[2.2.22 statistics.initialSkip](#2.2.22 statistics.initialSkip)
[2.2.23 aiq.workingMode](#2.2.23 aiq.workingMode)
[2.2.24 aiq.multicamera](#2.2.24 aiq.multicamera)
[3. 注意点](#3. 注意点)
1.xml文件说明
camera3_profiles.xml文件对应SDK目录下具体芯片平台的文件:
bash
hardware/rockchip/camera/etc/camera/camera3_profiles_rk3xxx.xml
在设备上的路径为:
bash
/vendor/etc/camera/camera3_profiles.xml
若是临时调试,可以采用adb替换文件的形式,但需要注意文件路径与文件名的正确性。
camera3_profiles.xml包含多个Profiles节点,Profiles节点包含一个完整的camera属性列表,机器有几个camera,就需要配置几个Profiles节点。
Profiles 节点下又包含了如下四个子节点。
XML
<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
该设置项有多个限制需要注意:
-
录像必需要有一组恒定帧率, 假如帧率为 x, 那就要包含(x,x)
-
录像帧率必需至少要一组大于 24 帧
-
第一组必需 Min <= 15. 所以第一组一般为 (15,x)
-
各组帧率需要按升序排列
升序具体意义为,假设有定义有两组帧率:(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。
参考:
XML
<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 输出分辨率相同。
XML
<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 拍照相关测试项的稳定性。
XML
<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的注意,需注意。