2. 高通Camera HAL架构概览:mm-camera架构、CamX/CHI架构的核心组件与数据流

高通平台的Camera HAL架构经历了从传统的mm-camera到新一代CamX/CHI的演进。理解这两代架构的核心组件与数据流,是进行跨平台移植的基础。本章将深入剖析这两套架构的设计哲学、模块划分以及关键的Buffer与Metadata流转路径。

2.1 传统mm-camera架构

mm-camera(Multimedia Camera)是高通在Android早期到Android 8.x时代广泛使用的HAL架构。它采用 monolithic(单体)设计,所有核心逻辑集中在用户空间的mm-camera进程中。

2.1.1 核心组件

组件名称 进程/位置 核心职责
mm-camera 用户空间守护进程 统一管理所有Camera设备,处理ISP配置、Stream on/off、3A控制等核心逻辑。
camera_module HAL层 (libcamera_client) 实现camera_module_t接口,负责枚举Camera、打开/关闭设备。
qcamera HAL层 (libcamera_client) 实现camera_device_t接口,作为HAL与mm-camera进程的桥梁,通过Socket通信。
ISP (Image Signal Processor) 内核驱动 / 硬件 处理RAW数据,执行Bayer、Demosaic、降噪、色彩校正等硬件加速操作。
Sensor Driver 内核驱动 控制图像传感器(如IMX586、OV64B)的寄存器、帧率、曝光时间等。

2.1.2 数据流与架构图

在mm-camera架构中,数据流是典型的“HAL → mm-camera守护进程 → 内核驱动”模式。HAL层通过Socket向mm-camera发送命令,mm-camera解析后通过V4L2或私有IOCTL与内核交互。

关键特征:所有Camera逻辑(包括3A、统计、后处理)都在一个进程中完成,调试方便,但扩展性差,修改一个Sensor可能导致整个进程重启。
mm-camera 架构组件与数据流 mm-camera 架构核心组件与数据流 应用框架层 (APP/Framework) Camera2 API / Camera1 API HAL 层 (libcamera_client) camera_module qcamera (HAL) Socket Client mm-camera 守护进程 (用户空间) Socket Server 3A / ISP 控制逻辑 V4L2 / IOCTL 内核驱动层 (Kernel) Sensor Driver ISP 驱动 CSIPHY 驱动 Socket 命令/数据 V4L2 / IOCTL open() / process()

2.2 新一代CamX/CHI架构

从Android 9开始,高通力推CamX (Camera eXtension) 和 CHI (Camera Hardware Interface) 架构。这是一套模块化、可配置、跨平台的架构,旨在解决mm-camera的扩展性痛点。

2.2.1 核心组件

组件名称 类型 核心职责
CamX HAL 核心HAL库 实现Android Camera HAL3接口,管理Pipeline、Session、Request的生命周期。
CHI (Camera Hardware Interface) 配置/驱动框架 提供统一的硬件抽象接口,通过XML/JSON配置文件描述Sensor、ISP、TFE等硬件特性。
Usecase 逻辑模块 定义特定的拍照/录像场景(如Preview、HDR、Portrait),组合不同的Node。
Node 处理单元 最小的功能单元,如“Bayer处理Node”、“YUV转换Node”、“Face Detection Node”。
Pipeline 执行链路 由多个Node串联或并联组成,负责处理从Sensor到最终输出Buffer的完整链路。
CSL (Camera Services Layer) 底层服务 封装内核驱动接口,提供Buffer管理、Sync、IOCTL等基础服务。

2.2.2 数据流与架构图

CamX/CHI的数据流是“Request驱动”的。APP下发Capture Request,CamX解析后创建Pipeline,Pipeline中的Node依次处理,最终将结果Buffer返回给APP。Metadata(如3A结果)通过CHI定义的Pipeline Descriptor在Node间传递。

移植关键点:从mm-camera移植到CamX/CHI,本质上是将硬编码的Sensor/ISP配置,迁移到CHI的XML/JSON配置文件中。Node的算法逻辑可以复用,但接口必须适配CamX的Node API。
CamX/CHI 架构组件与数据流 CamX / CHI 架构核心组件与数据流 应用框架层 (APP/Framework) Camera2 API: CaptureRequest / CaptureResult CamX HAL 层 (libcamxhal) Usecase Manager Pipeline Manager Node Manager Session CHI 配置与硬件抽象层 XML/JSON 配置文件 Pipeline Descriptor Node 算法库 (lib) CSL 与内核驱动层 CSL (Camera Service) KMD (Kernel Driver) Sensor / ISP 硬件 Capture Request 加载配置 / 创建Pipeline Buffer / Sync Metadata / Buffer Node 回调

2.3 mm-camera 与 CamX/CHI 架构对比

下表总结了两种架构在关键维度上的差异,帮助理解移植工作的本质。

对比维度 mm-camera CamX / CHI
设计哲学 Monolithic(单体),所有逻辑集中 Modular(模块化),可插拔Node
配置方式 硬编码C代码 / 私有结构体 XML / JSON 配置文件驱动
进程模型 单一守护进程 (mm-camera) 多Pipeline、多Session,可并行
扩展性 差,新增Sensor需修改核心逻辑 好,新增Sensor只需添加配置文件
调试难度 相对简单,单进程单线程 复杂,涉及多Node、多Pipeline交互
性能开销 较低,但瓶颈在单进程 较高,但可通过Node并行优化
高通支持状态 已停止更新(Legacy) 当前主力架构(Active)
移植陷阱:在mm-camera中,Sensor的初始化序列(如PLL配置、曝光行设置)通常写在sensor_init()函数里。移植到CamX/CHI时,这些序列必须被拆解成CHI配置中的Register Settings,并关联到对应的Node。如果直接复制粘贴C代码到Node中,会导致架构混乱,无法利用CHI的配置化优势。

2.4 关键数据流:Buffer与Metadata

无论哪种架构,Camera HAL的核心数据流都围绕Buffer(图像数据)和Metadata(控制/状态数据)展开。在CamX/CHI中,这两者的管理更加精细。

2.4.1 Buffer流

  • Source: Sensor通过CSI接口输出RAW数据到ISP。
  • Processing: ISP处理后的数据进入Pipeline,经过Bayer、Scaler、Crop等Node。
  • Destination: 最终YUV/JPEG Buffer通过Gralloc或ION内存传递给HAL,再返回给APP。

2.4.2 Metadata流

  • Request Metadata: APP下发的控制参数(AE target、AWB mode、AF region)。
  • Result Metadata: 硬件/算法产生的状态信息(AE convergence、AWB gain、AF state)。
  • Pipeline Metadata: Node之间传递的中间结果(如统计信息、HDR融合权重)。
移植经验:在MTK平台,Metadata的管理通常使用P1/P2(Pass1/Pass2)机制,与高通的Pipeline Descriptor概念类似。理解高通Metadata的Tag ID与MTK的Feature ID之间的映射关系,是移植Metadata处理逻辑的核心工作。