乐于分享
好东西不私藏

高通Camera软件架构介绍

高通Camera软件架构介绍

高通 Camera 软件架构采用通用框架(CamX)+ 定制扩展(CHI) 双层解耦设计,整体架构如下图

一、整体架构总览(四层)

从上到下: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 格式、调度优先级、依赖关系。
  • 优势:无代码修改、动态配置、快速迭代