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

高通Camx功能feature分析之十四:Camx-Chi核心模块介绍

【关注我后续持续新增专题博文谢谢】上一篇我们讲了这一篇我们开始讲高通Camx功能feature分析之十四Camx-Chi核心模块介绍目录一、Camx-Chi问题背景二、Camx子模块三、Chi子模块四、Request五、Usecase六、Feature七、Session八、Pipeline九、Node十Port十一Link一、Camx-Chi问题背景Camx-Chi意义该部分是高通对谷歌Camera HAL3接口的实现以so库的形式被加载至Camera Provider中, CamX-CHI架构由CamX和CHI两个部分组成CamxCamX负责一些基础服务代码的实现不经常改动, 主要包括实现HAL3入口的hal模块实现硬件node的hwl和实现软件node的swl, 实现与V4L2驱动交互的csl模块ChiCHI负责实现一些可扩展性和定制化的需求方便OEM/ODM添加自己的扩展功能, 通过抽象出Usecase、Feature、Session、Pipeline、Node的概念使厂商可以通过实现Node接口来接入自己的算法并通过XML文件灵活配置Usecase、Pipeline、Node的结构关系二、Camx子模块Core用于存放camx的核心实现模块其中还包含了主要用于实现hal3接口的hal/目录以及负责与CHI进行交互的chi/目录hwl用于存放自身具有独立运算能力的硬件node该部分node受csl管理swl用于存放自身并不具有独立运算能力必须依靠CPU才能实现的nodecsl用于存放主要负责camx与camera driver的通讯模块为camx提供了统一的Camera driver控制接口三、Chi子模块chioverride用于存放CHI实现的核心模块负责与camx进行交互并且实现了CHI的总体框架以及具体的业务处理bin用于存放平台相关的配置项topology用于存放用户自定的Usecase xml配置文件node用于存放用户自定义功能的nodemodule用于存放不同sensor的配置文件该部分在初始化sensor的时候需要用到tuning用于存放不同场景下的效果参数的配置文件sensor用于存放不同sensor的私有信息以及寄存器配置参数actuator用于存放不同对焦模块的配置信息ois用于存放防抖模块的配置信息flash存放着闪光灯模块的配置信息eeprom存放着eeprom外部存储模块的配置信息fd存放了人脸识别模块的配置信息四、Request意义触发camera pipeline处理数据的操作, 可以是处理从图像传感器中提取的数据帧的request, 也可以是处理来自内存中提取的数据帧的请求, result必须从驱动程序返回到APP一个Request对应三个Result: Partial Metadata, Metadata, Image DataResultPartial Metadata部分元数据是在相机拍摄过程中未完全获得的元数据一般是在连续拍照或者高速拍摄模式下需要以更快的速度捕获和处理图像。为了追求处理速度Partial meta data 可能舍弃了某些次要信息只包含了部分关键参数。Partial meta data 可以用来优化相机的实时性能例如实时对焦或者曝光调整等Metadata在相机捕获图像或视频的过程中由相机硬件和驱动程序生成的附加信息。这些元数据提供了关于捕获内容的各种详细信息例如光线条件、白平衡、曝光补偿等拍摄环境参数的信息。元数据通常与图像数据一起捕获并在后期处理和分析过程中用于优化和调整图像质量Image Data图像数据是指捕获的实际像素数据通常以 RAW 格式或者JPEG 格式存储, RAW 格式的图像数据包含了传感器捕获的原始像素值没有经过任何处理。这些数据可以在后期处理过程中进行更多的调整和优化。JPEG 格式的图像数据则是对RAW数据进行了压缩和处理的结果通常体积较小便于传输和存储五、Usecase意义Usecase是CamX-CHI中最大的抽象概念其中包含了多条实现特定功能的Pipeline具体实现是在CHI中通过Usecase类完成的, 例如2K上的预览显示就是一个用例继承关系Usecase类作为现有的所有Usecase的基类CameraUsecaseBase公有继承自Usecase, AdvancedCameraUsecase公有继承自CameraUsecaseBase通用接口相机中绝大部分场景会通过实例化AdvancedCameraUsecase来完成它包括了几个主要接口Create该方法是静态方法用于创建一个AdvancedCameraUsecase实例在其构造方法中会去获取XML中的相应的Usecase配置信息ExecuteCaptureRequest该方法用于下发一次Request请求ProcessResultCb该方法会在创建Session的过程中作为回调方法注册到其中一旦Session数据处理完成的时候便会调用该方法将结果发送到AdvancedCameraUsecase中ProcessDriverPartialCaptureResult该方法会在创建Session的过程中作为回调方法注册到其中一旦Session中产生了partial meta data的时候便会调用该方法将其发送至AdvancedCameraUsecase中ProcessMessageCb该方法会在创建Session的过程中作为回调方法注册到其中一旦Session产生任何事件便会调用该方法通知到AdvancedCameraUsecase中ExecuteFlush该方法用于刷新AdvancedCameraUsecaseDestroy该方法用于安全销毁AdvancedCameraUsecase标签定义UsecaseName代表了该Usecase的名字后期根据这个名字找到这个Usecase的定义Targets用于表示用于输出的数据流的集合其中包括了数据流的格式输出Size的范围等Pipeline用于定义该Usecase可以是使用的所有Pipeline这里必须至少定义一条Pipeline六、Feature意义Feature代表了一个特定的功能该功能需要多条Pipeline组合起来实现受Usecase统一管理在CHI中通过Feature类进行实现Feature在XML文件中没有对应的定义具体的Feature选取工作是在Usecase中完成的通过在创建Feature时传入Usecase实例的方式来和Usecase相互访问各自的资源。常见FeatureHDR用于实现HDR功能它负责管理内部的一条或者几条pipeline的资源以及它们的流转最终输出具有HDR效果的图像MFNR用于实现MFNR功能内部分为几个大的流程分别包括Prefiltering、Blending、Postfilter以及最终的OfflineNoiseReproces(这一个是可选择使能的)每一个小功能中包含了各自的pipeline七、Session意义用于管理pipeline的抽象控制单元一个Session中至少拥有一个pipeine并且控制着所有的硬件资源管控着每一个内部pipeline的request的流转以及数据的输入输出它没有可定制化的部分所以在CHI中的XML文件中并没有将Session作为一个独立的单元进行定义通用接口Session的实现主要通过CamX中的Session类主要有以下接口Initialize根据传入的参数SessionCreateData进行Session的初始化工作NotifyResult内部的Pipeline通过该接口将结果发送到Session中ProcessCaptureRequest该方法用于用户决定发送一个Request到Session中的时候调用StreamOn通过传入的Pipeline句柄开始硬件的数据传输StreamOff通过传入的Pipeline句柄停止硬件的数据传输八、Pipeline意义作为提供单一特定功能的所有资源的集合维护着所有硬件资源以及数据的流转每一个Pipeline包括了其中的Node/Link在CamX中通过Pipeline类进行实现负责整条Pipeline的软硬件资源的维护以及业务逻辑的处理通用接口Create该方法是一个静态方法根据传入的PipelineCreateInputData信息来实例化一个Pipeline对象StreamOn通知Pipeline开始硬件的数据传输StreamOff通知Pipeline停止硬件的数据传输FinalizePipeline用于完成Pipeline的设置工作OpenRequestopen一个CSL用于流转的RequestProcessRequest开始下发RequestNotifyNodeMetadataDone该方法是Pipeline提供给Node当Node内部生成了metadata,便会调用该方法来通知metadata已经完成最后当所有Node都通知Pipeline metadata已经完成Pipeline 便会调用ProcessMetadataRequestIdDone通知Session。NotifyNodePartialMetadataDone该方法是Pipeline提供给Node当Node内部生成了partial metadata,便会调用该方法来通知metadata已经完成最后当所有Node都通知Pipeline metadata已经完成Pipeline 便会调用ProcessPartialMetadataRequestIdDone通知SessionSinkPortFenceSignaled用来通知Session 某个sink port的fence处于被触发的状态NonSinkPortFenceSignaled用来通知Session 某个non sink port的fence处于被触发的状态。标签定义Pipeline中的Node以及连接方式都在XML中被定义其主要包含了以下几个标签定义PipelineName该条Pipeline的名称NodeList该条Pipeline的所有的NodePortLinkagesNode上不同端口之间的连接关系九、Node意义作为单个具有独立处理功能的抽象模块可以是硬件单元也可以是软件单元关于Node的具体实现是CamX中的Node类来完成的其中CamX-CHI中主要分为两个大类一个是高通自己实现的Node包括硬件Node一个是CHI中提供给用户进行实现的Node通用接口Create该方法是静态方法用于实例化一个Node对象ExecuteProcessRequest该方法用于针对hwl node下发request的操作ProcessRequestIdDone一旦该Node当前request已经处理完成便会通过调用该方法通知PipelineProcessMetadataDone一旦该Node的当前request的metadata已经生成便会通过调用该方法通知到PipelineProcessPartialMetadataDone一旦该Node的当前request的partial metadata已经生成便会通过调用该方法通知到PipelineCreateImageBufferManager创建ImageBufferManager标签定义NodeName该Node的名称NodeId用来指定该Node的ID其中IPE NodeId为65538IFE NodeId为65536用户自定义的NodeId为255NodeInstance定义该Node的当前实例的名称NodeInstanceId指定该Node实例的Id十Port意义作为Node的输入输出的端口在XML文件中标签用来定义一个输入端口标签用来定义输出端口每一个Node都可以根据需要使用一个或者多个输入输出端口使用OutputPort以及InputPort结构体来进行在代码中定义标签定义PortName该端口的名称PortId该端口的IdNodeName该端口从属的Node名称NodeId该端口从属的Node的IdNodeInstance该端口从属的Node的实例名称NodeInstanceId该端口从属的Node的实例的Id十一Link意义用于定义不同Port的连接一个Port可以根据需要建立多条与其它从属于不同Node的Port的连接,它通过标签来进行定义其中包括了作为输入端口作为输出端口标签定义SrcPort输入端口DstPort输出端口【关注我后续持续新增专题博文谢谢】下一篇讲解

相关文章:

高通Camx功能feature分析之十四:Camx-Chi核心模块介绍

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 高通Camx功能feature分析之十四:Camx-Chi核心模块介绍 目录 一、Camx-Chi问题背景 二、Camx子模块…...

Webcamoid终极指南:跨平台摄像头套件的完整解决方案

Webcamoid终极指南:跨平台摄像头套件的完整解决方案 【免费下载链接】webcamoid Webcamoid is a full featured and multiplatform camera suite. 项目地址: https://gitcode.com/gh_mirrors/we/webcamoid 你是否厌倦了单调的摄像头软件?想要在视…...

如何通过Universal x86 Tuning Utility免费提升电脑性能30%以上

如何通过Universal x86 Tuning Utility免费提升电脑性能30%以上 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是否经常遇到…...

FanControl终极指南:5步轻松掌控Windows风扇,打造静音高效电脑散热方案

FanControl终极指南:5步轻松掌控Windows风扇,打造静音高效电脑散热方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://git…...

A 股上市公司气候变化减缓专利数据(1994-2024)

WIPO 国际标准绿色低碳专利库!基于IPC Green Inventory精准识别气候变化减缓技术,31 年面板 原始专利明细,双碳、绿色创新、高质量发展顶刊标配数据! 📊 数据核心速览 数据编号:2093时间跨度:…...

GitHub汉化插件:3分钟告别英文界面,让中文开发者更高效

GitHub汉化插件:3分钟告别英文界面,让中文开发者更高效 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为…...

前端已死?2026年,转型AI Agent工程师才是你的“续命”良方!

随着大模型技术成熟,AI Agent成为超级风口,传统前端开发面临萎缩与裁员。本文分析前端转型AI Agent的必要性与可行性,对比技术栈,提供完整转型路径。前端工程师可利用TypeScript、流式数据处理、产品意识等优势,通过学…...

大模型输入的“灵魂”步骤:Embedding如何让0、1、2变得有“意义”?

什么是大模型什么是token什么是词表 到这里,整个输入流程已经走到这一步了: 文本 → 按词表切分 → token → token ID比如一句话: 我 是 学生经过词表后,可能变成: 我 → 0 是 → 1 学生 → 2但是问题来了&#xff1a…...

从“看图识字“到“全能感知“!多模态大模型5年爆变史,Qwen系成“基础设施“!

多模态大模型历经5年范式跃迁,从ViT革新视觉AI,到CLIP架起图文桥梁,再到Qwen-VL等多模态理解,乃至GPT-4o与Qwen-Omni的全模态统一。Qwen系模型作为核心基础设施,推动技术从单模态处理走向多模态深度融合,未…...

从0到1掌握DeerFlow:字节跳动开源AI Agent框架,轻松构建企业级智能体平台!

Harness 平台实战: 用 DeerFlow 构建 一个企业自己的 Manus 平台( 企业长任务智能体平台) 一、DeerFlow 是什么?DeerFlow 这个热点项目,是 字节跳动开源的超级super Agent 框架,上线一个月就横扫 GitHub&a…...

基于 Simulink 的电机轴承故障特征提取与诊断实战教程

目录 🎯 一、 核心目标与理论基础 故障的物理本质 🛠️ 二、 详细建模步骤 第一步:搭建故障信号发生器(模拟真实场景) 第二步:信号预处理——共振解调技术 第三步:特征提取与降维 第四步:智能诊断分类器(Stateflow + SVM) 📊 四、 仿真结果分析指南 💡…...

PHP扩展被攻陷的5种隐秘路径:从CVE复现到零日防护的完整闭环

更多请点击: https://intelliparadigm.com 第一章:PHP扩展被攻陷的5种隐秘路径:从CVE复现到零日防护的完整闭环 PHP 扩展作为底层能力增强模块,常因内存管理疏漏、类型混淆或符号解析缺陷成为攻击者绕过 Web 层防护的“暗门”。以…...

车载以太网之要火系列 - 第34篇:郭大侠学UDS(14/19服务)- 疾病潜藏祸患多 杏林郎中手段多

写在开篇黄蓉最近迷上了22服务,天天拿它当读心术使——查VIN、查序列号、查软件版本。郭靖忍不住问:“蓉儿,你天天读这些,读出啥了?”“查岗呗。”黄蓉咬了一口糖葫芦,“看看你有没有偷偷改94 01。”“我哪…...

3步搞定CSDN博客下载:打造你的个人技术知识库

3步搞定CSDN博客下载:打造你的个人技术知识库 【免费下载链接】CSDNBlogDownloader 项目地址: https://gitcode.com/gh_mirrors/cs/CSDNBlogDownloader 你是否曾为CSDN上的优质技术文章担心过?担心作者删除、平台改版或网络故障导致这些宝贵的学…...

从MLCC内部结构到S参数:手把手教你用HFSS搭建一个靠谱的AC耦合电容仿真模型

从MLCC内部结构到S参数:手把手教你用HFSS搭建一个靠谱的AC耦合电容仿真模型 在56Gbps及以上速率的信号完整性设计中,AC耦合电容的仿真精度直接决定系统性能预测的可靠性。许多工程师发现,当使用HFSS默认的RLC边界条件模型时,仿真结…...

数电1 | 数制&逻辑关系&常用逻辑公式及定理

一、进制1.x进制,逢x进12.进制转换(看权重)①二-十$$\left ( 11001.011 \right )_{2}\left ( 25.375 \right )_{10}$$$$1 \times 2^{4} 1 \times 2^{3} 0 \times 2^{2} 1 \times 2^{1} 1 \times 2^{0} 0 \times 2^{-1} 1 \times 2^{-2}…...

Window使用CMakeLists编译Opencv

为了方便跨平台移植,在Window上写的代码可以无缝移植到Ubuntu上。 一、首先需要先安装VisualStudio,安装C环境,建议安装2019或者2022的版本,下载安装链接https://mp.weixin.qq.com/s/5TBz8bHEAY_pMlxKXcOQuA 二、安装Opencv&…...

VideoDownloadHelper终极指南:一键下载全网视频的免费神器

VideoDownloadHelper终极指南:一键下载全网视频的免费神器 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无法下载在线视频…...

区块链是怎么实现的-通俗版,不讲难懂术语

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​​​​​https://www.captainai.net/troubleshooter 按底层实现逻辑,分 5 步讲完,你能彻底…...

终极指南:5分钟学会用Reset Windows Update Tool修复Windows更新问题

终极指南:5分钟学会用Reset Windows Update Tool修复Windows更新问题 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...

避坑指南:解决ORB-SLAM2+octomap建图时点云倾斜和rviz警告问题

避坑指南:解决ORB-SLAM2octomap建图时点云倾斜和rviz警告问题 当你在Ubuntu 20.04环境下将ORB-SLAM2与octomap_server集成,试图生成八叉树地图时,可能会遇到两个典型问题:点云在rviz中显示倾斜,以及频繁出现的"oc…...

AI Agent完成率低至40%?老王揭秘10步规划,让你的Agent稳定率飙升至80%!

文章指出,AI Agent产品在内部演示和真实用户使用中的完成率差异巨大,主要问题在于多步骤复杂任务的规划不当。文章详细介绍了从需求解析、可行性判断、任务拆解到结果输出的11步规划流程,强调提前制定执行手册、状态追踪、结果验收和容错重规…...

豆包将推付费版:三档订阅价曝光,专注复杂任务与生产力场景

豆包付费版本服务计划曝光近日,豆包App Store页面出现付费版本服务声明。为更好服务专业用户,豆包将在免费版基础上,推出含更多增值服务的付费版本。页面还披露了三档订阅价格,标准版连续包月每月68元(连续包年688元&a…...

从LeetCode真题“反转链表”出发,彻底搞懂头插法的实战应用与边界情况

从LeetCode真题“反转链表”出发,彻底搞懂头插法的实战应用与边界情况 链表操作是算法面试中的高频考点,而反转链表(LeetCode 206)更是经典中的经典。很多人在第一次遇到这道题时,会被各种指针操作绕得晕头转向。今天我…...

什么是运维工程师

什么是运维工程师 一、什么是运维工程师? 在技术人员(写代码的)之间,一致对运维有一个开玩笑的认知:运维就是修电脑的、装网线的、背锅的岗位。 其实不然,运维是一个非常广泛的定义,在不同的公司…...

告别手动测试:深入解读Vector CANoe LIN一致性测试模块(ISO17987/J2602标准覆盖哪些内容?)

深度解析Vector CANoe LIN一致性测试模块:从标准到实践 在汽车电子系统开发中,LIN总线作为CAN总线的补充,广泛应用于车门模块、座椅控制、空调系统等对实时性要求不高的场景。随着汽车电子架构日益复杂,LIN网络节点数量不断增加&a…...

Cortex-M55 CTI架构与调试技术详解

1. Cortex-M55交叉触发接口(CTI)架构解析 交叉触发接口(Cross Trigger Interface)是Arm CoreSight调试架构中的关键组件,在Cortex-M55处理器中扮演着调试事件路由中心的角色。这个32位宽度的硬件模块通过标准APB总线与处理器内核连接,其核心功能是建立触…...

QuantVLA:无需训练的视觉-语言-动作模型量化技术

1. 项目背景与核心价值在人工智能领域,视觉-语言-动作多模态模型(VLA)正成为机器人控制、自动驾驶等场景的关键技术。这类模型通常需要处理高维视觉输入、自然语言指令和连续动作输出,导致参数量庞大、计算开销高昂。QuantVLA的创…...

Nemotron-Flash:低延迟LLM推理的混合架构设计

1. 项目背景与核心价值在自然语言处理领域,大型语言模型(LLM)虽然表现出色,但其高昂的计算成本和响应延迟始终是落地应用的瓶颈。Nemotron-Flash正是针对这一痛点提出的创新解决方案——通过混合架构设计,在保持模型性…...

Nemotron-Flash:低延迟LLM推理的混合小型语言模型架构

1. 项目背景与核心价值 在自然语言处理领域,大型语言模型(LLM)的推理延迟一直是制约实际应用的关键瓶颈。Nemotron-Flash项目的出现,正是为了解决这一行业痛点——如何在保持模型性能的前提下,显著降低推理延迟&#x…...