当前位置: 首页 > news >正文

camera调试:安卓添加xml注册

对接安卓的平台时,需要注册对应的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的注意,需注意。

http://www.lryc.cn/news/577176.html

相关文章:

  • 二刷 苍穹外卖day09
  • 【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
  • 借助 Wisdom SSH,实现 Linux 用户组与权限的精细化智能管控
  • DataGrip测试连接时出现报错解决方案
  • 谷歌高调宣布,Gemini 2.5 Pro正式版,绘制常见图表(折线图、柱状图、PPT等),国内直接使用
  • 将 h264+g711a存为 mp4文件,记录
  • uniapp+vue2 ba-tree-picker下拉项多选 树形层级选择器(支持单选、多选、父级选择、映射)
  • SAP月结问题9-FAGLL03H与损益表中研发费用金额不一致(FAGLL03H Bug)
  • 【数据结构中的位运算】
  • 堆排序实现及复杂度分析
  • AWS WebRTC:通过shell分析并发启动master后产生的日志文件
  • 腾讯云空间,高性能显卡云,安装xinference报错,pip install 空间不够用了
  • 大语言模型(LLM)笔记
  • JavaEE-MyBatis-Plus
  • datax-web报错:连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境)
  • Flutter插件ios_pod
  • 跨时间潜运动迁移以实现操作中的多帧预测
  • 云效DevOps vs Gitee vs 自建GitLab的技术选型
  • 临床试验审计问题分类与整改策略
  • 高效数据采集:Python与Rust完美结合
  • 将本地仓库推送到GitHub
  • 【Pandas】pandas DataFrame attrs
  • 2025年光学工程、精密仪器与光电子技术国际会议(OEPIOT 2025)
  • 【MCP服务】蓝耘元生代 | 蓝耘MCP平台来袭!DeepSeek MCP服务器玩转大模型集成
  • Python-Word文档、PPT、PDF以及Pillow处理图像详解
  • 车载ECU刷写文件格式汇总详解
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • .net实现内容推荐算法代码
  • C++ --- list
  • ES6笔记1