3. MTK Camera HAL 架构分析:模块划分与关键数据结构

本章深入剖析 MediaTek(MTK)平台的 Camera HAL 架构。与 Qualcomm(QCOM)平台高度模块化、依赖 CHI(Camera Hardware Interface)架构不同,MTK 的 Camera HAL 更强调硬件抽象与 ISP(Image Signal Processor)流水线的紧耦合,其核心设计围绕 HAL、ISP、AAA(Auto Focus/Auto Exposure/Auto White Balance) 三大模块展开。理解这一架构是进行平台适配与性能调优的基础。

架构核心差异: QCOM 的 HAL 通过 CHI 架构将算法与硬件解耦,而 MTK 的 HAL 则通过 P1(Pre-ISP)/ P2(Post-ISP) 流水线以及 AAA 算法库 实现高度集成的硬件控制。适配工作的重点在于理解 MTK 特有的 Streaming 管理 与 3A 同步机制。

3.1 MTK Camera HAL 模块划分

MTK Camera HAL 从逻辑上可划分为三个核心层次,它们共同协作完成从应用层请求到底层硬件驱动的完整链路。

模块 主要职责 关键组件/文件 与 QCOM 对应关系
HAL 层 实现 Android Camera HAL3 接口,管理 Camera 设备生命周期、Session、Stream 和 Request。 CameraDevice.cpp, CameraHALManager.cpp 类似 QCOM 的 QCamera2Hal
ISP 层 负责图像信号处理流水线,包括 RAW 域处理(P1)和 YUV 域处理(P2),以及 3A 统计数据的生成。 isp_drv.cpp, p1_proc.cpp, p2_proc.cpp 类似 QCOM 的 IFace 和 IPE
AAA 层 实现自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB)算法,以及闪光灯控制、HDR 策略等。 aaa_hal.cpp, af_algo.cpp, ae_algo.cpp 类似 QCOM 的 mm-camera 中的 3A 模块
适配要点: 在从 QCOM 向 MTK 迁移时,HAL 层的接口适配相对直接,真正的难点在于 ISP 流水线的配置(如 P1 的 RAW 输出格式、P2 的缩放与裁剪参数)以及 AAA 算法的参数调优。MTK 的 ISP 通常通过 私有 metadata 与 HAL 层通信,这是适配中需要重点关注的隐藏接口。
MTK Camera HAL 三层架构与数据流 MTK Camera HAL 三层架构与数据流 Android Camera Framework (HAL3) Camera HAL 层 (HAL Manager / Device) ISP 层 (P1 / P2) AAA 层 (AF/AE/AWB) Sensor / Flash 驱动 Camera 硬件 (Sensor / ISP HW / Flash) 数据流说明: Request → HAL 层解析 → ISP 层配置流水线 & AAA 层计算参数 → 硬件捕获 → RAW 数据经 ISP 处理 → 返回 Result。 AAA 层通过统计信息(Stats)闭环控制 Sensor 曝光、对焦位置和 ISP 增益。

3.2 关键数据结构与流程

MTK Camera HAL 的核心数据流围绕 Request 和 Result 展开,但其内部使用了大量私有数据结构来管理 ISP 流水线和 3A 状态。以下是几个关键的数据结构及其在流程中的作用。

3.2.1 核心数据结构

数据结构 所属模块 关键字段 作用描述
NSCameraParameter HAL feature, data, type MTK 自定义的通用参数结构,用于在 HAL 内部模块间传递私有配置(如 ISP 模式、3A 策略)。
isp_param_t ISP p1_param, p2_param, sensor_param 封装 P1(RAW 处理)和 P2(YUV 处理)阶段的配置参数,包括分辨率、帧率、裁剪窗口等。
aaa_stat_t AAA ae_stat, af_stat, awb_stat 存储从 ISP 硬件获取的 3A 统计数据,是 AAA 算法进行闭环控制的输入。
hal_3a_result_t AAA exposure, gain, lens_pos, wb_gain AAA 算法计算后的输出结果,用于更新 Sensor 和 ISP 的寄存器。

3.2.2 关键流程:从 Request 到 Frame

一个典型的 Capture Request 在 MTK HAL 中的处理流程如下:

  1. Request 分发: HAL 层收到 Framework 的 processCaptureRequest(),将其转换为内部 NSCameraParameter 列表,并分发到 ISP 和 AAA 模块。
  2. ISP 流水线配置: ISP 模块根据 Request 中的输出 Stream 配置(如 YUV_420_888、JPEG),设置 P1 和 P2 的处理参数。P1 负责从 Sensor 接收 RAW 数据并进行预处理(如坏点校正、黑电平补偿),P2 负责进行缩放、裁剪、格式转换等。
  3. AAA 参数计算: AAA 模块根据上一帧的统计信息(aaa_stat_t)和当前 Request 的 3A 控制参数,运行算法,生成新的 hal_3a_result_t。
  4. 硬件同步与捕获: ISP 和 AAA 的参数通过 私有 metadata 同步到 Kernel 驱动。Sensor 按照新的曝光和增益设置进行捕获,ISP 硬件按照配置的流水线处理 RAW 数据。
  5. Result 返回: 处理完成的 Buffer(YUV/JPEG)和包含 3A 结果、时间戳的 metadata 被封装成 CaptureResult,返回给 Framework。
MTK Camera HAL Request 处理流程 MTK Camera HAL Request 处理流程 1. Request 分发 2. ISP 流水线配置 3. AAA 参数计算 4. 硬件同步与捕获 5. Result 返回 反馈回路:AAA 统计信息用于下一帧计算 关键同步点: 步骤 2 和 3 是并行执行的,但必须在步骤 4 之前完成参数同步。MTK 使用 Pipeline Wait 机制确保 ISP 和 AAA 的参数在同一 V-Sync 周期内生效。 私有 metadata 通道(如 MTK_ISP_CONTROL)是连接 HAL 与底层驱动的关键桥梁。

3.3 模块间通信机制

MTK Camera HAL 的模块间通信主要依赖以下两种机制:

  • 私有 Metadata 通道: 通过 NSCameraParameter 和 camera_metadata_t 的扩展 Tag(如 MTK_SENSOR_EXPOSURE_TIME),实现 HAL 层与 ISP/AAA 模块之间的参数传递。这是最核心的通信方式,适配时需要仔细核对 Tag 定义。
  • 回调与事件机制: AAA 模块通过注册回调函数,将计算出的 3A 结果(如新的曝光时间)主动推送给 ISP 模块或 HAL 层。ISP 模块在完成一帧处理后,也会通过回调通知 HAL 层取走 Result。
适配陷阱: 在 QCOM 平台上,很多 3A 参数是通过标准的 Android Metadata(如 ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION)传递的。但在 MTK 平台上,部分高级功能(如特定的 HDR 模式、多帧降噪)的配置必须通过 MTK 私有 Tag 进行。如果直接复用 QCOM 的代码,忽略这些私有 Tag,会导致功能异常或性能下降。务必查阅 MTK 的 mtk_metadata_tags.h 文件。

3.4 小结

MTK Camera HAL 的架构核心在于 HAL-ISP-AAA 三层紧密协作,通过私有 metadata 和回调机制实现高效的数据同步。与 QCOM 的 CHI 架构相比,MTK 的架构更偏向于硬件直控,ISP 流水线和 3A 算法的耦合度更高。在进行平台适配时,深入理解 NSCameraParameter、isp_param_t 等私有数据结构,以及 Request 到 Frame 的完整流程,是确保 Camera 功能正确性和性能达标的关键。