news 2026/5/5 23:34:16

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高通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两个部分组成
  • Camx:CamX负责一些基础服务代码的实现,不经常改动, 主要包括实现HAL3入口的hal模块,实现硬件node的hwl和实现软件node的swl, 实现与V4L2驱动交互的csl模块
  • Chi:CHI负责实现一些可扩展性和定制化的需求,方便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才能实现的node
csl
用于存放主要负责camx与camera driver的通讯模块,为camx提供了统一的Camera driver控制接口

三、Chi子模块

chioverride
用于存放CHI实现的核心模块,负责与camx进行交互并且实现了CHI的总体框架以及具体的业务处理
bin
用于存放平台相关的配置项
topology
用于存放用户自定的Usecase xml配置文件
node
用于存放用户自定义功能的node
module
用于存放不同sensor的配置文件,该部分在初始化sensor的时候需要用到
tuning
用于存放不同场景下的效果参数的配置文件
sensor
用于存放不同sensor的私有信息以及寄存器配置参数
actuator
用于存放不同对焦模块的配置信息
ois
用于存放防抖模块的配置信息
flash
存放着闪光灯模块的配置信息
eeprom
存放着eeprom外部存储模块的配置信息
fd
存放了人脸识别模块的配置信息

四、Request

  • 意义

触发camera pipeline处理数据的操作, 可以是处理从图像传感器中提取的数据帧的request, 也可以是处理来自内存中提取的数据帧的请求, result必须从驱动程序返回到APP
一个Request对应三个Result: Partial Metadata, Metadata, Image Data


Result

  • Partial 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
该方法用于刷新AdvancedCameraUsecase
Destroy
该方法用于安全销毁AdvancedCameraUsecase

  • 标签定义

UsecaseName
代表了该Usecase的名字,后期根据这个名字找到这个Usecase的定义
Targets
用于表示用于输出的数据流的集合,其中包括了数据流的格式,输出Size的范围等
Pipeline
用于定义该Usecase可以是使用的所有Pipeline,这里必须至少定义一条Pipeline

六、Feature

  • 意义

Feature代表了一个特定的功能,该功能需要多条Pipeline组合起来实现,受Usecase统一管理,在CHI中通过Feature类进行实现,Feature在XML文件中没有对应的定义,具体的Feature选取工作是在Usecase中完成的,通过在创建Feature时传入Usecase实例的方式,来和Usecase相互访问各自的资源。

  • 常见Feature

HDR
用于实现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的设置工作
OpenRequest
open一个CSL用于流转的Request
ProcessRequest
开始下发Request
NotifyNodeMetadataDone
该方法是Pipeline提供给Node,当Node内部生成了metadata,便会调用该方法来通知metadata已经完成,最后当所有Node都通知Pipeline metadata已经完成,Pipeline 便会调用ProcessMetadataRequestIdDone通知Session。
NotifyNodePartialMetadataDone
该方法是Pipeline提供给Node,当Node内部生成了partial metadata,便会调用该方法来通知metadata已经完成,最后当所有Node都通知Pipeline metadata已经完成,Pipeline 便会调用ProcessPartialMetadataRequestIdDone通知Session
SinkPortFenceSignaled
用来通知Session 某个sink port的fence处于被触发的状态
NonSinkPortFenceSignaled
用来通知Session 某个non sink port的fence处于被触发的状态。

  • 标签定义

Pipeline中的Node以及连接方式都在XML中被定义,其主要包含了以下几个标签定义
PipelineName
该条Pipeline的名称
NodeList
该条Pipeline的所有的Node
PortLinkages
Node上不同端口之间的连接关系

九、Node

  • 意义

作为单个具有独立处理功能的抽象模块,可以是硬件单元也可以是软件单元,关于Node的具体实现是CamX中的Node类来完成的,其中CamX-CHI中主要分为两个大类,一个是高通自己实现的Node包括硬件Node,一个是CHI中提供给用户进行实现的Node

  • 通用接口

Create
该方法是静态方法,用于实例化一个Node对象
ExecuteProcessRequest
该方法用于针对hwl node下发request的操作
ProcessRequestIdDone
一旦该Node当前request已经处理完成,便会通过调用该方法通知Pipeline
ProcessMetadataDone
一旦该Node的当前request的metadata已经生成,便会通过调用该方法通知到Pipeline
ProcessPartialMetadataDone
一旦该Node的当前request的partial metadata已经生成,便会通过调用该方法通知到Pipeline
CreateImageBufferManager
创建ImageBufferManager

  • 标签定义

NodeName
该Node的名称
NodeId
用来指定该Node的ID,其中IPE NodeId为65538,IFE NodeId为65536,用户自定义的NodeId为255
NodeInstance
定义该Node的当前实例的名称
NodeInstanceId
指定该Node实例的Id

十:Port

  • 意义

作为Node的输入输出的端口,在XML文件中,标签用来定义一个输入端口,标签用来定义输出端口,每一个Node都可以根据需要使用一个或者多个输入输出端口,使用OutputPort以及InputPort结构体来进行在代码中定义

  • 标签定义

PortName
该端口的名称
PortId
该端口的Id
NodeName
该端口从属的Node名称
NodeId
该端口从属的Node的Id
NodeInstance
该端口从属的Node的实例名称
NodeInstanceId
该端口从属的Node的实例的Id

十一:Link

  • 意义

用于定义不同Port的连接,一个Port可以根据需要建立多条与其它从属于不同Node的Port的连接,它通过标签来进行定义,其中包括了作为输入端口,作为输出端口

  • 标签定义

SrcPort
输入端口
DstPort
输出端口

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 23:20:41

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

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

作者头像 李华
网站建设 2026/5/5 23:20:38

VIEWE 4英寸圆形HDMI触摸屏开发与应用指南

1. 产品概述:VIEWE 4英寸圆形HDMI触摸屏这款由VIEWE推出的4英寸圆形HDMI显示屏,采用720720分辨率的IPS面板,搭配5点电容式触摸功能,通过单一USB-C接口同时实现供电和触摸信号传输。其核心优势在于将专业级显示控制与即插即用特性相…

作者头像 李华
网站建设 2026/5/5 23:17:33

Claude Code 终于能在手机上跑了:10k Star 开源 UI,浏览器一进就有

👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事中…

作者头像 李华
网站建设 2026/5/5 23:12:27

联邦学习与多任务学习的融合:FMTL核心技术、应用与未来

联邦学习与多任务学习的融合:FMTL核心技术、应用与未来 引言 在数据孤岛林立、隐私保护法规日益严格的今天,如何在不共享原始数据的前提下,让多个参与方协作训练出更强大的AI模型?联邦学习(Federated Learning&#xf…

作者头像 李华
网站建设 2026/5/5 23:11:39

IDM无限试用终极指南:无需破解,永久使用IDM的完整方案

IDM无限试用终极指南:无需破解,永久使用IDM的完整方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 还在为Internet Download Manager(IDM&…

作者头像 李华
网站建设 2026/5/5 23:10:33

3分钟掌握FlexASIO:打破专业音频驱动门槛的终极解决方案

3分钟掌握FlexASIO:打破专业音频驱动门槛的终极解决方案 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitcod…

作者头像 李华