元数据支持
为了支持 Android 框架保存原始图像文件,需要关于传感器特性的实质性元数据。这包括颜色空间和镜头阴影函数等信息。
此信息的大部分是相机子系统的静态属性,因此可以在配置任何输出管道或提交任何请求之前进行查询。新的 Camera API 大大扩展了 getCameraInfo()
方法提供的信息,以便向应用提供此信息。
此外,手动控制相机子系统需要来自各种设备关于其当前状态以及用于捕获给定帧的实际参数的反馈。硬件实际使用的控件(曝光时间、帧时长和感光度)的实际值必须包含在输出元数据中。这对于应用了解何时发生钳位或舍入,以及应用可以补偿用于图像捕获的实际设置至关重要。
例如,如果应用在请求中将帧时长设置为 0,则 HAL 必须将帧时长钳位到该请求的实际最小帧时长,并在输出结果元数据中报告该钳位的最小时长。
因此,如果应用需要实现自定义 3A 例程(例如,为了正确测量 HDR 突发),则需要知道用于捕获其已收到的最新结果集的设置,以便更新下一个请求的设置。因此,新的 Camera API 为每个捕获的帧添加了大量的动态元数据。这包括用于捕获的请求参数和实际参数,以及其他逐帧元数据,例如时间戳和统计信息生成器输出。
按设置控制
对于大多数设置,期望是可以每帧更改它们,而不会给输出帧流带来明显的卡顿或延迟。理想情况下,输出帧率应仅由捕获请求的帧时长字段控制,并且独立于处理块配置的任何更改。实际上,已知某些特定控件更改缓慢;这些控件包括相机管道的输出分辨率和输出格式,以及影响物理设备的控件,例如镜头对焦距离。每个控件集的具体要求将在后面详细说明。
原始传感器数据支持
除了旧版 API 支持的像素格式之外,新版 API 还增加了一项要求,即支持原始传感器数据 (Bayer RAW),这既适用于高级相机应用,也适用于支持原始图像文件。