3. 高通Camera HAL层架构详解:CHI架构简介、Usecase/Pipeline/Session/Node概念

高通Camera HAL层架构从传统的mm-camera演进到CHI (Camera Hardware Interface)架构,是Qualcomm为了应对Android Treble架构要求、多摄像头并发、以及计算摄影复杂化而进行的重大重构。CHI架构的核心思想是去耦合与可配置化,将原本硬编码的ISP管线控制逻辑,抽象为Usecase、Pipeline、Session、Node等可组合的软件单元。

架构演进关键点: CHI架构将Camera HAL层从“黑盒驱动”转变为“白盒框架”,OEM厂商可以通过XML配置文件(如Usecase XML、Pipeline XML)来定制拍照/录像流程,无需修改HAL层核心代码。

3.1 CHI架构整体分层

CHI架构位于Android Camera HAL3接口与底层Kernel ISP驱动之间,主要分为三层:

层级 组件 职责
HAL3 Interface camera3_device_t, camera3_stream_t 实现Android HAL3标准接口,处理Framework下发的Capture Request/Result
CHI Core chi_ops, chi_metadata, chi_pipeline 核心调度层:解析Usecase、创建Pipeline/Session、管理Node拓扑、分发Buffer
CSL (Camera Subsystem Layer) CSL Driver, FD, ICP, IFE, IPE, BPS 硬件抽象层:封装Kernel ISP驱动,提供硬件Node的打开/关闭/StreamOn/Off接口
Buffer管理视角: CHI Core层是Buffer流转的“交通枢纽”。所有从Sensor来的Raw Buffer、ISP处理后的YUV/JPEG Buffer,以及送往Display/Encoder的Output Buffer,都在CHI Core的Session和Node之间进行分配与同步。
CHI架构分层与Buffer流转关系 Android HAL3 Interface (camera3_device_t) CHI Core (chi_ops, chi_metadata) Usecase解析 → Pipeline拓扑构建 → Session管理 → Node调度 Buffer分配/去分配 / 流控 / 同步 CSL Layer (Camera Subsystem Layer) IFE | IPE | BPS | ICP | FD | JPEG Encoder 硬件Node驱动:open/close/streamOn/streamOff/bufDone Buffer流:Sensor Raw → IFE (YUV) → IPE/BPS (处理) → ICP (计算) → Output Buffer (YUV/JPEG) 每个硬件模块对应一个Node,Node之间通过Pipeline连接,Buffer在Session内流转

3.2 Usecase:用户场景的抽象

Usecase是CHI架构中最上层的概念,它描述了一个完整的相机使用场景。例如“普通拍照”、“HDR拍照”、“4K录像”、“慢动作”等。每个Usecase定义了一组Pipeline拓扑、Sensor配置、Stream组合以及Metadata约束。

  • Usecase ID:全局唯一标识,如 USECASE_STILL_CAPTURE、USECASE_VIDEO_4K。
  • Pipeline列表:该Usecase包含哪些Pipeline(如预览Pipeline、拍照Pipeline)。
  • Sensor模式:指定Sensor输出分辨率、帧率、HDR模式等。
  • Stream配置:定义输出Stream的数量、格式、分辨率(如Preview: 1920x1080, YUV; Snapshot: 4000x3000, JPEG)。
Buffer管理关联: Usecase决定了Buffer的数量和生命周期。例如,在“HDR拍照”Usecase中,需要同时分配3帧不同曝光时间的Raw Buffer,并在IPE Node中合并为单帧HDR YUV Buffer。

3.3 Pipeline:硬件处理管线

Pipeline是CHI架构中描述硬件处理链路的逻辑单元。一个Pipeline由多个Node按照特定顺序连接而成,代表从Sensor输入到最终输出的一整条数据通路。

Pipeline类型 典型Node序列 输出Buffer
Preview Pipeline Sensor → IFE → IPE → Display YUV (Preview Stream)
Snapshot Pipeline Sensor → IFE → IPE → JPEG Encoder JPEG (Snapshot Stream)
Video Pipeline Sensor → IFE → IPE → Video Encoder NV12 (Video Stream)
Raw Pipeline Sensor → IFE (Raw bypass) Raw10/Raw16 (Raw Stream)

Pipeline在XML配置文件中定义,CHI Core在运行时解析并实例化。每个Pipeline内部维护一个Buffer队列,用于Node之间的数据传递。

Snapshot Pipeline 典型拓扑(Node连接关系) Sensor Node IFE Node IPE Node JPEG Node Output Raw Buffer YUV Buffer Processed YUV JPEG Buffer 每个Node通过 Port 连接:Input Port接收上游Buffer,Output Port发送处理后的Buffer Pipeline内部维护一个 Buffer Pool,Node之间通过 Buffer Handle 传递,避免内存拷贝

3.4 Session:运行时实例

Session是Usecase和Pipeline的运行时实例。当Framework下发一个Capture Request时,CHI Core会根据Request中的Stream配置,选择合适的Usecase,然后创建对应的Session。

  • Session创建:解析Usecase配置,实例化所有Pipeline,为每个Pipeline分配Node实例。
  • Buffer分配:Session创建时,根据Pipeline拓扑和Stream配置,预分配所有需要的Buffer(包括Internal Buffer和Output Buffer)。
  • Session生命周期:从第一个Request开始,到最后一个Request完成,Session保持活跃。当所有Stream关闭后,Session销毁并释放Buffer。
Buffer管理关键点: Session是Buffer的所有者。Buffer的分配/去分配、Buffer Handle的注册、Buffer状态的跟踪(Free/Queued/Processing/Done)都在Session级别管理。多Session并发时(如双摄虚化),需要跨Session的Buffer同步机制。

3.5 Node:最小处理单元

Node是CHI架构中最小的可执行单元,对应一个具体的硬件模块或软件算法。每个Node负责完成特定的图像处理任务。

Node类型 对应硬件/软件 主要功能
Sensor Node 物理Sensor驱动 输出Raw Buffer,控制曝光/增益/帧率
IFE Node Image Front-End Raw处理:Bayer去噪、黑电平校正、LSC、Demosaic → YUV
IPE Node Image Processing Engine YUV处理:降噪、锐化、色彩校正、缩放
BPS Node Bayer Processing Segment 高精度Raw处理:HDR融合、多帧降噪
ICP Node Image Compute Processor 计算摄影:人脸检测、场景识别、超分辨率
FD Node Face Detection 人脸检测与跟踪

Node通过Port(端口)进行连接。每个Node可以有多个Input Port和多个Output Port,支持1:N(一个输入多个输出)和N:1(多个输入一个输出)的拓扑结构。

Node内部结构:Port、Buffer Handle与回调 IFE Node Input Port: 0 Output Port: 0 Output Port: 1 回调: bufDone IPE Node Input Port: 0 Input Port: 1 Output Port: 0 回调: bufDone Buffer Handle (YUV) Buffer Handle (Metadata) Node通过 bufDone 回调通知CHI Core:当前Buffer处理完成,可以传递给下一个Node

3.6 Usecase / Pipeline / Session / Node 关系总结

这四个概念构成了CHI架构的四层抽象模型,从设计时到运行时的映射关系如下:

概念 层次 定义方式 生命周期 Buffer管理职责
Usecase 场景层 XML配置 设计时定义 定义Buffer数量与Stream组合
Pipeline 拓扑层 XML配置 设计时定义 定义Buffer流转路径与Node连接
Session 运行时层 CHI Core创建 Request开始到结束 Buffer分配/去分配/状态跟踪
Node 执行层 CSL驱动 + 固件 Session内持续运行 Buffer处理/转发/回调
实战理解: 当用户点击“拍照”按钮时,Framework下发一个包含Snapshot Stream的Request。CHI Core查找匹配的 Usecase(如USECASE_STILL_CAPTURE),创建 Session,实例化Preview Pipeline和Snapshot Pipeline两个 Pipeline,每个Pipeline内部包含Sensor、IFE、IPE、JPEG等 Node。Buffer从Sensor Node开始,依次经过IFE Node、IPE Node,最终到达JPEG Node,完成编码后通过Session回调返回给Framework。

3.7 CHI架构的Buffer管理核心机制

在CHI架构中,Buffer管理贯穿Usecase、Pipeline、Session、Node四个层次,其核心机制包括:

  1. Buffer Pool预分配:Session创建时,根据Pipeline拓扑计算Buffer需求,从ION/Allocator预分配Buffer Pool,避免运行时频繁分配。
  2. Buffer Handle传递:Node之间不直接传递Buffer数据,而是传递Buffer Handle(包含fd、size、format、timestamp等元数据),减少内存拷贝。
  3. Buffer状态机:每个Buffer在Session内维护状态:FREE → QUEUED → PROCESSING → DONE → FREE,确保Buffer不被重复使用。
  4. 跨Session Buffer共享:在多摄像头场景下,不同Session之间通过Buffer Sync机制共享Buffer Handle,实现多路数据同步。
性能关键指标: Buffer分配延迟(< 5ms)、Buffer流转吞吐(> 30fps @ 4K)、Buffer内存占用(< 200MB for 3 streams)是衡量CHI架构Buffer管理效率的核心指标。