3. Camera HAL 参数体系:静态元数据、动态元数据、请求参数详解

在 Camera HAL 性能优化中,参数体系是连接应用层、框架层与硬件层的核心数据契约。理解三类元数据——静态元数据 (Static Metadata)、动态元数据 (Dynamic Metadata) 与 请求参数 (Request Parameters)——是进行帧率调优、延迟分析与资源分配的前提。本章将逐一拆解其定义、生命周期、典型字段及性能影响。

核心观点: 静态元数据定义硬件能力上限,动态元数据反映当前状态,请求参数控制每一次捕获行为。三者协同决定了 Camera 系统的吞吐量与响应速度。

3.1 静态元数据 (Static Metadata)

静态元数据在 Camera HAL 初始化时生成,并在整个设备生命周期内保持不变。它描述了传感器、ISP、镜头、闪光灯等硬件模块的固定能力。应用层通过 CameraCharacteristics 接口读取。

3.1.1 关键字段与性能影响

字段 (Android Key) 含义 性能影响
ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE 传感器有效像素阵列尺寸 决定最大分辨率,直接影响带宽与处理时间
ANDROID_SENSOR_INFO_MAX_FRAME_DURATION 最大帧时长(纳秒) 限制最低帧率,过小值会导致帧率上限被压低
ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 支持的 AE 目标帧率范围列表 应用层帧率选择的硬约束
ANDROID_STATISTICS_INFO_MAX_FACE_COUNT 最大人脸检测数量 影响 ISP 人脸检测模块的负载
ANDROID_SENSOR_INFO_SENSITIVITY_RANGE ISO 感光度范围 影响低光场景下的曝光策略与噪声水平
优化提示: 在 HAL 实现中,静态元数据应预计算并缓存,避免每次查询时重新计算。对于 AVAILABLE_TARGET_FPS_RANGES,应精确上报硬件实际能稳定运行的帧率范围,虚报会导致上层请求无法被满足,引发丢帧或降帧。

3.1.2 静态元数据生成流程

静态元数据生成与上报流程 HAL 初始化 读取传感器寄存器 填充静态元数据 缓存至 HAL 内部 上报至 CameraService 说明:静态元数据在 HAL 启动时一次性生成,之后不再变化。 性能关键:避免在每次 camera_open 时重复读取硬件寄存器,应使用持久化缓存。

3.2 动态元数据 (Dynamic Metadata)

动态元数据在每一帧捕获完成后由 HAL 生成,描述该帧的实际硬件状态,包括实际曝光时间、实际帧时长、传感器温度、AE/AWB 收敛状态等。应用层通过 CaptureResult 获取。

3.2.1 典型动态元数据字段

  • ANDROID_SENSOR_TIMESTAMP:帧曝光开始时间戳,用于同步与延迟测量。
  • ANDROID_SENSOR_EXPOSURE_TIME:实际曝光时间,反映 AE 算法收敛结果。
  • ANDROID_SENSOR_FRAME_DURATION:实际帧时长,直接决定帧率。
  • ANDROID_CONTROL_AE_STATE:AE 状态机当前状态(CONVERGED / SEARCHING 等)。
  • ANDROID_STATISTICS_LENS_SHADING_MAP:镜头阴影校正映射表,影响 ISP 处理时间。
性能陷阱: 动态元数据生成不应引入额外延迟。HAL 应直接从硬件寄存器或 ISP 管道中读取,避免在 HAL 层进行复杂计算。例如,LENS_SHADING_MAP 如果由 HAL 软件计算,会显著增加帧处理时间。

3.2.2 动态元数据传递路径

动态元数据传递路径 Sensor 曝光结束 ISP 处理完成 HAL 填充动态元数据 CameraService 回调 应用层 CaptureResult

3.3 请求参数 (Request Parameters)

请求参数由应用层在每次 capture 或 setRepeatingRequest 时下发,控制当前帧的捕获行为。HAL 必须根据这些参数配置传感器、ISP 和后处理模块。

3.3.1 请求参数分类

类别 示例字段 性能影响
传感器控制 ANDROID_SENSOR_EXPOSURE_TIME, ANDROID_SENSOR_FRAME_DURATION 直接决定帧率与曝光时间
3A 控制 ANDROID_CONTROL_AE_MODE, ANDROID_CONTROL_AF_MODE AE/AF 算法选择影响收敛速度与功耗
ISP 处理 ANDROID_TONEMAP_MODE, ANDROID_EDGE_MODE 高复杂度模式增加 ISP 处理延迟
输出配置 ANDROID_SCALER_CROP_REGION, ANDROID_NOISE_REDUCTION_MODE 裁剪与降噪影响带宽与处理时间

3.3.2 请求参数处理性能关键点

  1. 参数校验速度:HAL 应在 processCaptureRequest 中快速校验参数合法性,避免在帧处理路径中做复杂校验。
  2. 参数转换开销:将 Android 标准参数转换为硬件寄存器值的过程应预计算或使用查找表。
  3. 参数一致性:多个请求参数之间可能存在冲突(如帧时长小于曝光时间),HAL 需在早期检测并返回错误,避免硬件挂死。
实战建议: 在 HAL 中实现请求参数预处理管道,将参数校验、转换、冲突检测放在一个独立阶段,与帧处理主路径解耦。这样可以减少每帧的处理抖动,提升帧率稳定性。

3.4 三类元数据的关系与交互

静态元数据定义了请求参数的有效范围,动态元数据反馈了请求参数的实际执行结果。三者形成闭环:应用层根据静态元数据下发请求参数,HAL 执行后生成动态元数据,应用层再根据动态元数据调整后续请求参数。

三类元数据交互闭环 静态元数据 硬件能力上限定义 请求参数 每帧捕获控制指令 动态元数据 实际执行结果反馈 应用层决策 约束范围 执行结果 反馈 调整

3.5 性能优化总结

元数据类别 优化方向 具体措施
静态元数据 减少初始化延迟 预计算、缓存、避免重复读取硬件
动态元数据 降低生成开销 直接读取硬件寄存器,避免软件计算
请求参数 加速处理路径 预校验、查找表转换、解耦预处理
核心原则: 静态元数据要“准”,动态元数据要“快”,请求参数要“稳”。三者配合得当,Camera HAL 才能在复杂场景下保持高帧率与低延迟。