对接安卓的平台时,需要注册对应的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.pswp.cn/web/87141.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87141.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87141.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Ansys Discovery 为初学者准备几何结构

介绍 设计几何体通常会包含一些特征&#xff0c;使其无法直接导入我们的仿真工具&#xff0c;例如 Ansys Mechanical、LS-DYNA、Fluent 等。有些干扰或错位虽然适合制造&#xff0c;但在我们的仿真工具中却会造成问题。有时&#xff0c;一些小特征&#xff08;例如孔或圆角&am…

推客系统全栈开发指南:从架构设计到商业化落地

一、推客系统概述 推客系统&#xff08;TuiKe System&#xff09;是一种结合社交网络与内容分发的创新型平台&#xff0c;旨在通过用户间的相互推荐机制实现内容的高效传播。这类系统通常包含用户关系管理、内容发布、智能推荐、数据分析等核心模块&#xff0c;广泛应用于电商…

大数据开发实战:如何做企业级的数据服务产品

1.背景 数据服务通常以解决方案的形式进行组织&#xff0c;面向一个应用场景的所有数据需求或数据内容可以通过一个解决方案进行封装&#xff0c;统一对外服务。一个数据需求或数据接口以一个数据服务实例的形式存在于解决方案之下。 下游消费方可以通过统一API进行数据消费&…

基于IndexTTS的零样本语音合成

IndexTTS 项目采用模块化设计&#xff0c;将 BPE 文本编码、GPT 单元预测、dVAE 语音特征抽取和 BigVGAN 音频生成串联为完整的语音合成流程。系统通过统一的配置文件和模型目录规范&#xff0c;实现高效的文本到语音转换&#xff0c;支持命令行与 Web 界面双模式操作&#xff…

基于go-zero的短链生成系统

go-zero框架 gozero&#xff08;又称go-zero&#xff09;是一款由知名开发者kevwan设计的Golang微服务框架&#xff0c;专注于高性能、低延迟和易用性。其核心目标是简化分布式系统的开发&#xff0c;提供开箱即用的工具链&#xff0c;涵盖API网关、RPC服务、缓存管理、数据库…

Linux-修改线上MariaDB服务端口号

准备工作&#xff08;很重要&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; 提前做好Linux服务器快照 提前做好数据库数据备份 1. 修改配置文件 首先&#xff0c;我们需要找到MariaDB的配置文件。通常情况下&#xff0c;这个文件位于以下位置&#xff1a;…

Spring Cloud 微服务(负载均衡策略深度解析)

&#x1f4cc; 摘要 在微服务架构中&#xff0c;负载均衡是实现高可用、高性能服务调用的关键机制之一。Spring Cloud 提供了基于客户端的负载均衡组件 Ribbon&#xff0c;结合 Feign 和 OpenFeign&#xff0c;实现了服务间的智能路由与流量分配。 本文将深入讲解 Spring Clo…

HTML/CSS基础

1.html:超文本标记语言。它是一种标识性的语言&#xff0c;非编程语言&#xff0c;不能使用逻辑运算。通过标签将网络上的文本格式进行统一&#xff0c;使用分散网络资源链接为一个逻辑整体&#xff0c;属于标记语言。 超文本&#xff1a;就是指页面内可以包含图片&#xff0…

C# 事件驱动编程的核心:深度解析发布者_订阅者模式

适用场景&#xff1a;GUI交互、消息队列、微服务通信等需要解耦事件生产与消费的系统 &#x1f9e9; 模式核心组件解析 发布者&#xff08;Publisher&#xff09; 作用&#xff1a;定义事件并管理订阅者列表关键行为&#xff1a; 提供和-运算符注册/注销订阅者通过Invoke()方…

华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程

华为云FlexusDeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台&#xff1a;华为云全流程单机部署实战教程 前言一、华为云Dify-LLM平台介绍1. Dify-LLM解决方案简介2. Dify-LLM解决方案地址3. Dify-LLM单机架构介绍4. 预估成本说明 二、华为云Maas平台介绍1. 华为云ModelArts …

oracle集合三嵌套表(Nested Table)学习

嵌套表 嵌套表(Nested Table)是Oracle中的一种集合数据类型&#xff0c;它允许在表中存储多值属性&#xff0c;类似于在表中嵌套另一个表。 嵌套表具有以下特点&#xff1a; 是Oracle对象关系特性的一部分 可以看作是一维数组&#xff0c;没有最大元素数量限制 存储在单独…

Python学习之——单例模式

Python学习之——单例模式 参考1 利用__metaclass__实现单例super的用法class Singleton(type)元类 2 重载__new__方法实现单例模式3 利用装饰器实现单例考虑一个类如果继承一个单例类的问题 参考 python之metaclasssingleton&#xff08;一&#xff09; python之metaclasssin…

【Linux】U-boot常用命令总结

U-Boot 是嵌入式系统中常用的引导加载程序&#xff08;bootloader&#xff09;&#xff0c;它提供了一套命令行接口&#xff0c;用于调试、加载操作系统镜像以及进行硬件测试等操作。 1、变量操作命令 这些命令用于管理 U-Boot 的环境变量。 命令功能说明setenv name value设…

【Linux】不小心又创建了一个root权限账户,怎么将它删除?!

一.前言 今天在学习linux提权的时候&#xff0c;把新建的一个普通账户权限提升成了root&#xff0c; 当我练习完提权&#xff0c;想要把这个账户删掉的时候。 发现… 好家伙&#xff0c;这个根本删不掉 随后试了各种各样的方法&#xff0c;都不行&#xff0c;后来突然想到是否…

数据结构:数组(Array)

目录 什么是数组&#xff08;Array&#xff09;&#xff1f; &#x1f50d;为什么数组的下标要从 0 开始&#xff1f; 一、内存地址与偏移量的关系&#xff1a;从 0 开始是最自然的映射 二、指针的起点就是第 0 个元素的地址 三、历史原因&#xff1a;BCPL → B → C → …

视频内存太大怎么压缩变小一点?视频压缩的常用方法

视频传生活或者工作中很常见&#xff0c;如发送视频邮件、在线视频播放、视频上传下载等。未压缩的大内存视频文件传输时&#xff0c;不仅会消耗大量的网络带宽资源&#xff0c;还会使传输时间大幅增加。在网速有限的情况下&#xff0c;发送一个几 GB 的未压缩视频可能需要数小…

性能测试包括哪些方面?要掌握哪些知识

性能测试是软件测试中的一个重要方面&#xff0c;它主要关注软件在不同条件下的稳定性、可靠性和性能表现。性能测试包括多个方面&#xff0c;需要掌握的知识也相对广泛。以下是对性能测试包括的方面以及需要掌握的知识分析&#xff1a; 一、性能测试包括的方面 响应时间&…

windows的vscode无法通过ssh连接ubuntu的解决办法

现象&#xff1a; 最近在windows本地通过vscode登录ssh时发现不得劲&#xff0c;总是报错无法与”192.168.1.129“建立连接&#xff0c;如下图&#xff1a; 但是这种报错以及在输出端的信息并没有提供具体错误原因&#xff0c;于是换poweshell来登录&#xff0c;报错如下图&am…

第2章,[标签 Win32] :Windows 的字符串函数

专栏导航 上一篇&#xff1a;第2章 &#xff1a;兼容 ASCII 字符与宽字符的 Windows 函数调用 回到目录 下一篇&#xff1a;无 本节前言 在下面的文章链接里面&#xff0c;我们谈到过&#xff0c;使用兼容版的字符串处理函数的知识。 第2章 &#xff1a;编写兼容多字节字…

Java的SpringAI+Deepseek大模型实战-会话记忆【三】

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、添加会话ID 异常处理1、InMemoryChatMemory 无法解析 背景 前两期搭建起大模型对话…