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等可组合的软件单元。
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接口 |
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)。
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之间的数据传递。
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。
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(多个输入一个输出)的拓扑结构。
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处理/转发/回调 |
3.7 CHI架构的Buffer管理核心机制
在CHI架构中,Buffer管理贯穿Usecase、Pipeline、Session、Node四个层次,其核心机制包括:
- Buffer Pool预分配:Session创建时,根据Pipeline拓扑计算Buffer需求,从ION/Allocator预分配Buffer Pool,避免运行时频繁分配。
- Buffer Handle传递:Node之间不直接传递Buffer数据,而是传递Buffer Handle(包含fd、size、format、timestamp等元数据),减少内存拷贝。
- Buffer状态机:每个Buffer在Session内维护状态:
FREE → QUEUED → PROCESSING → DONE → FREE,确保Buffer不被重复使用。 - 跨Session Buffer共享:在多摄像头场景下,不同Session之间通过Buffer Sync机制共享Buffer Handle,实现多路数据同步。