3. MTK Camera HAL 架构概览:HAL 3.4/3.8 架构、P1/P2/P3 模块、ISP Pipeline 设计
MTK Camera HAL 架构与高通平台在抽象层次和模块划分上存在显著差异。理解 MTK 的 HAL 版本演进、核心处理模块(P1/P2/P3)以及 ISP Pipeline 的数据流,是从高通平台移植到 MTK 平台的关键第一步。本章将系统梳理 MTK Camera HAL 3.4 与 3.8 架构的异同,深入解析 P1/P2/P3 模块职责,并绘制 ISP Pipeline 的完整数据通路。
3.1 MTK Camera HAL 版本演进:HAL 3.4 vs HAL 3.8
MTK 平台主要维护两套 Camera HAL 架构:HAL 3.4(基于 Android N/O)和 HAL 3.8(基于 Android P/Q/R/S)。两者在模块组织、Pipeline 管理、以及 Vendor 扩展接口上有较大差异。
| 对比维度 | HAL 3.4(传统架构) | HAL 3.8(统一架构) |
|---|---|---|
| Android 基线 | Android 7.x ~ 8.x | Android 9.x ~ 13.x |
| Pipeline 模型 | 静态 Pipeline,每个 Stream 独立配置 | 动态 Pipeline,支持 Reconfiguration |
| 模块划分 | P1(Capture)/ P2(Process)/ P3(Display) | P1(Capture)/ P2(Process)/ P3(Display),但 P2 内部增加 Feature 插件化 |
| Vendor Tag | 较少,通过 Metadata 扩展 | 丰富,支持 Vendor Customization |
| Buffer 管理 | 基于 ION/DMABUF,Stream 间 Buffer 独立 | 基于 DMA-BUF Heaps,支持 Buffer Sharing |
| 多摄支持 | 物理 Camera 独立,逻辑 Camera 由上层组合 | 原生支持 Multi-Camera Session,内置 Sync |
| 调试接口 | 依赖 Log + dump | 内置 Trace + Dump Tool |
移植提示: 从高通平台移植到 MTK 时,如果目标 Android 版本 >= 9,建议直接基于 HAL 3.8 架构进行适配。HAL 3.4 的静态 Pipeline 模型在高通平台中对应的是 Legacy Camera HAL,两者在 Buffer 管理和 Stream 配置上差异较大,需要重点关注。
3.2 P1/P2/P3 模块职责与数据流
MTK Camera HAL 的核心处理流水线由三个主要模块构成:P1(Capture)、P2(Process)、P3(Display/Encode)。每个模块负责 ISP Pipeline 中的一个特定阶段。
- P1 模块(Capture):负责 Sensor 驱动、RAW 数据采集、Binning、HDR 合成、以及 3A(AE/AWB/AF)统计信息生成。P1 输出 RAW 图或 YUV 图给 P2。
- P2 模块(Process):负责图像处理管线,包括 Demosaic、降噪、锐化、色彩校正、几何校正(EIS/DIS)、以及多帧融合(MFSR)。P2 输出处理后的 YUV 图。
- P3 模块(Display/Encode):负责将 YUV 图转换为 Preview/Video/Snapshot 所需的格式,包括 Scaling、Rotation、Format Conversion,并分发到 Display 或 Video Encoder。
关键差异: 高通平台的 ISP Pipeline 通常将 Capture 和 Process 合并到 ISP 硬件中,而 MTK 平台通过 P1/P2 的软件模块划分,使得算法集成更加灵活。P2 模块是 MTK 平台算法定制的主要入口。
3.3 ISP Pipeline 设计详解
MTK 的 ISP Pipeline 是一个高度模块化的硬件+软件协同处理链路。从 Sensor 输出 RAW 数据到最终输出 YUV 数据,中间经过多个 ISP 硬件模块,每个模块由 P1/P2 驱动和算法库控制。
3.3.1 ISP Pipeline 主要阶段
- RAW Domain:Sensor 输出 RAW10/RAW12 数据,经过 OB(Optical Black)、LSC(Lens Shading Correction)、BPC(Bad Pixel Correction)等预处理。
- Bayer Domain:进行 Demosaic 插值,将 Bayer 格式转换为 RGB 格式。同时进行 AWB(Auto White Balance)增益调整。
- RGB Domain:进行 CCM(Color Correction Matrix)、Gamma 校正、以及色彩增强。
- YUV Domain:进行降噪(NR)、锐化(Edge Enhancement)、以及几何校正(如 EIS)。
- Post-Processing:由 P3 模块进行 Scaling、Rotation、以及 Format Conversion(如 NV12 -> JPEG)。
| Pipeline 阶段 | Domain | 主要硬件模块 | 控制模块 |
|---|---|---|---|
| Sensor 输出 | RAW | Sensor + MIPI CSI | P1 Driver |
| 预处理 | RAW | OB / LSC / BPC | P1 ISP Driver |
| Demosaic | Bayer -> RGB | ISP Demosaic Engine | P2 ISP Driver |
| 色彩处理 | RGB | CCM / Gamma | P2 Algorithm |
| 降噪与锐化 | YUV | NR / EE Engine | P2 Algorithm |
| 几何校正 | YUV | EIS / DIS Engine | P2 Algorithm |
| 输出处理 | YUV | Scaler / Rotator | P3 Driver |
移植注意: 高通平台的 ISP Pipeline 通常将 RAW Domain 和 Bayer Domain 的处理集成在 ISP 硬件内部,而 MTK 平台允许通过 P2 模块的算法插件对中间结果进行干预。这意味着在高通平台上通过硬件固定的处理,在 MTK 平台上可能需要通过软件算法重新实现,反之亦然。务必仔细核对每个 Pipeline 阶段的参数配置。
3.4 HAL 3.8 架构中的关键组件
在 HAL 3.8 架构中,除了 P1/P2/P3 核心模块外,还引入了几个关键组件来增强灵活性和可扩展性:
- CamAdapter:负责将 Android HAL 3.x 的接口请求转换为 MTK 内部的 Pipeline 配置。每个 Camera 设备对应一个 CamAdapter 实例。
- PipelineModel:管理 Stream 的创建、配置、以及 Reconfiguration。支持 Multi-Camera Session 的同步。
- FeaturePlugin:P2 模块的算法插件框架,允许第三方算法(如美颜、HDR、夜景)以插件形式集成到 Pipeline 中。
- BufferPool:统一的 Buffer 管理模块,支持跨模块的 Buffer 共享和复用,减少内存拷贝。
架构对比: 高通平台的 HAL 3.x 架构中,Pipeline 管理由 CameraDevice 和 Stream 直接控制,而 MTK 的 CamAdapter + PipelineModel 相当于在高通平台的 CameraDevice 和 ISP 之间增加了一层抽象,用于处理 MTK 特有的硬件配置。移植时需要将高通的 Stream 配置逻辑映射到 MTK 的 PipelineModel 配置中。
3.5 移植关注点总结
| 关注点 | 高通平台 | MTK 平台 | 移植策略 |
|---|---|---|---|
| Pipeline 配置 | Stream 直接配置 ISP | CamAdapter -> PipelineModel | 重写 Stream 到 Pipeline 的映射逻辑 |
| 3A 集成 | AE/AWB/AF 通过 Stats 回调 | P1 模块直接输出 3A 统计 | 适配 3A 统计数据的格式和回调接口 |
| 算法集成 | 通过 Vendor Tag 扩展 | 通过 FeaturePlugin 插件 | 将算法封装为 FeaturePlugin |
| Buffer 管理 | ION/DMABUF | DMA-BUF Heaps | 适配 Buffer Allocator 接口 |
| 多摄同步 | 依赖上层 Sync | 原生 Multi-Camera Session | 利用 MTK 的同步机制简化上层逻辑 |