高通Camera软件架构介绍

一、整体架构总览(四层)
从上到下:App → Android Framework → CamX‑CHI(HAL3)→ 内核驱动 / 硬件。
1. 应用与 Framework 层
- 相机 App
Android Camera2 API,下发 CaptureRequest、接收CaptureResult。 - CameraService
系统服务,负责多设备管理、请求分发、进程间通信(Binder)。
2. CamX‑CHI(HAL3,核心)
- CamX(通用层)
标准化硬件抽象、流管理、调度、内存管理、中断处理,位于 vendor/qcom/proprietary/camx。 - CHI(定制层)
OEM 可定制,提供 Usecase/Feature/Node 扩展,位于 vendor/qcom/proprietary/chi-cdk。
3. 内核驱动层(KMD/V4L2)
- KMD(Kernel Media Driver)
高通自研,基于 V4L2/Media Controller,管理 Sensor/ISP/IPE/BPS 等硬件节点。 - CSID/ISP/BPS/IPE
硬件接收、RAW 处理、 Bayer 并行、图像增强。
4. 硬件层
- Sensor
MIPI‑CSI2,RAW 输出。 - ISP
硬流水线(IFE/IPE/BPS)。 - 内存 / 编码
DMA、JPEG/H.26x 硬编。
二、CamX 核心组件详解
2.1 核心模块(Core)
- HAL3 入口(camxhal3entry.cpp)
实现 camera3_device_ops,对接 Framework。 - Session Manager
管理 CameraSession,生命周期、请求队列、并发流调度。 - Pipeline Manager
管理 Pipeline,XML 拓扑配置、链路创建 / 销毁、流绑定。 - Buffer Manager
ION/DMA 零拷贝、缓冲队列、同步( fences)、内存复用。 - Metadata Manager
3A 参数、标定数据、Vendor Tag 管理。
2.2 组件模型(Usecase→Feature→Pipeline→Node→Port)
- Usecase
场景(预览 / 拍照 / 录像 / 夜景 / 人像),XML 定义拓扑。 - Feature
能力(HDR、EIS、美颜、AI),跨 Pipeline 组合。 - Pipeline
数据流链路(Sensor→ISP→编码 / 预览)。 - Node
最小执行单元(硬件 Node:Sensor/ISP;软件 Node:3A / 美颜)。 - Port/Link
节点端口与连接,XML 定义数据流向。
2.3 硬件抽象层(CSL/HWL/SWL)
- CSL(Camera Service Layer)
统一驱动接口,封装 V4L2/ioctl,控制 KMD 硬件节点。 - HWL(Hardware Layer)
硬件 Node(Sensor/ISP/BPS/IPE),直接操作硬件。 - SWL(Software Layer)
软件 Node(3A、降噪、美颜),CPU/GPU/NPU 执行。
三、CHI 定制扩展机制(核心差异化)
3.1 解耦设计:双向动态库加载
-
CamX 加载 CHI: dlopen(com.qti.chi.override.so),获取回调表。 -
CHI 加载 CamX:反向 dlopen(camera.qcom.so),获取服务接口。 -
效果:无源码依赖、独立编译、热插拔,OEM 专注 CHI 开发。
3.2 三级扩展(Usecase/Feature/Node)
- Usecase 定制
新增场景(如 “电影模式”),XML 定义 Pipeline 拓扑。 - Feature 定制
新增能力(如 “AI 美颜”),组合多个 Node 实现。 - Node 定制
新增算法节点(如 “超分”),接入 ISP/NPU,注册到 Pipeline。
3.3 配置驱动(XML)
-
路径: vendor/qcom/proprietary/chi-cdk/bin/topology/。 -
内容:Usecase 拓扑、Node 连接、Port 格式、调度优先级、依赖关系。 -
优势:无代码修改、动态配置、快速迭代。
夜雨聆风