2. Metadata 基础概念

在 Camera HAL3 架构中,Metadata 是连接 Framework、HAL 与 ISP 之间的核心数据契约。它并非图像像素数据,而是描述“如何拍摄、当前状态、期望结果”的结构化信息集合。理解 Metadata 是掌握 HAL3 测试验证的前提。

2.1 什么是 Metadata

Metadata(元数据)是关于数据的数据。在 Camera 系统中,它携带了每一帧图像的配置参数、设备状态、算法结果以及控制指令。例如:

  • 传感器尺寸(静态信息)
  • 当前曝光时间(动态信息)
  • 期望的 AE 目标(控制信息)

Android Camera 使用 camera_metadata_t 结构体在进程间传递这些信息,其序列化格式紧凑、可扩展,支持快速查找。

关键认知: Metadata 是 HAL3 的“神经系统”——没有正确的 Metadata 传递,即使 ISP 硬件正常,也无法输出符合预期的图像。
Metadata 在 Camera 系统中的位置 Android Framework 下发控制 / 接收结果 Camera HAL3 解析 / 填充 / 转发 ISP / Sensor 执行 / 上报状态 Metadata 流: Framework → HAL3 (capture_request) → ISP → HAL3 (capture_result) → Framework 每一帧都伴随一个完整的 Metadata 包,包含控制参数与结果状态。

2.2 Tag / Value 结构

Android Camera Metadata 采用 Tag-Value 键值对模型。每个 Metadata 条目由一个唯一的 Tag(32 位整数)标识,对应一个 Value(可以是多种数据类型)。

组件 说明 示例
Tag 全局唯一标识符,由 section + 序号组成 ANDROID_SENSOR_EXPOSURE_TIME (0x00000001)
Type 数据类型枚举(BYTE, INT32, FLOAT, INT64, DOUBLE, RATIONAL 等) TYPE_INT64
Count 该 Tag 包含的元素个数(数组长度) 1(标量)或 4(如 4 元素区域)
Value 实际数据,按 Type 和 Count 解释 10000000(表示 10ms)
测试提示: 验证 Metadata 传递时,最常检查的是 Tag 是否缺失、Value 是否在合法范围内、Count 是否与预期一致。例如 ANDROID_SENSOR_EXPOSURE_TIME 的值不能为负数。
camera_metadata_t 内部结构(简化) camera_metadata_t Header version / entry_count Entries[] Tag + Type + Count + Offset Data[] 原始 Value 字节序列 查找流程:通过 Tag 在 Entries 中二分查找 → 读取 Offset → 从 Data 区取出 Value

2.3 静态 / 动态 / 控制 Metadata 的区别

根据生命周期与用途,Metadata 分为三大类。测试验证时需要针对不同类别采用不同的检查策略。

类别 生命周期 设置者 典型 Tag 示例 测试关注点
静态 (Static) Camera 打开后不变 HAL 在 getCameraCharacteristics() 中返回 ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE 值是否与硬件规格一致;是否在合法范围内
动态 (Dynamic) 每帧可能变化 HAL 在 capture_result 中填充 ANDROID_SENSOR_EXPOSURE_TIME 是否随场景变化;是否与预期算法输出一致
控制 (Control) 每帧由 Framework 下发 Framework 在 capture_request 中设置 ANDROID_CONTROL_AE_MODE HAL 是否正确解析;是否按控制值执行
常见测试陷阱: 动态 Metadata 中经常出现“残留值”问题——HAL 未更新某 Tag,导致 Framework 拿到上一帧的旧值。这是 HAL3 合规性测试的重点检查项。
三类 Metadata 在 HAL3 中的传递关系 Framework 下发 Control 接收 Dynamic Camera HAL3 解析 Control 填充 Dynamic ISP / Sensor 执行控制 上报状态 三类 Metadata 的传递路径: ① Static:HAL → Framework(仅一次,Camera 打开时) ② Control:Framework → HAL → ISP(每帧下发) ③ Dynamic:ISP → HAL → Framework(每帧上报)

2.4 三类 Metadata 的测试验证要点

  • 静态 Metadata 验证: 使用 CameraCharacteristics API 读取所有 Tag,与设备规格书逐项比对。重点检查分辨率范围、AE 补偿步长、可用 FPS 区间等。
  • 控制 Metadata 验证: 构造不同的 capture_request,检查 HAL 是否按预期将控制值传递给 ISP。例如设置 AE_MODE = OFF 后,检查曝光时间是否变为手动设定值。
  • 动态 Metadata 验证: 连续采集多帧 capture_result,检查动态 Tag 是否合理变化。例如 AE 收敛过程中 EXPOSURE_TIME 应逐渐稳定,而非跳变。
测试策略总结: 静态 Metadata 做“一致性检查”;控制 Metadata 做“闭环检查”(下发→执行→反馈);动态 Metadata 做“合理性检查”(时序、范围、趋势)。