元数据和控件

元数据支持

要支持通过 Android 框架保存原始图片文件,需要具有大量有关传感器特性的元数据,包括色彩空间和镜头遮蔽功能等信息。

其中大多数信息是相机子系统的静态属性,因此可以在配置任何输出流水线或提交任何请求之前进行查询。新的相机 API 极大地扩展了 getCameraInfo() 方法提供的信息,以便将此类信息提供给应用。

此外,手动控制相机子系统需要各种设备提供的有关其当前状态的反馈,以及在捕获指定帧时使用的实际参数。必须在输出元数据中包含硬件实际使用的控件(曝光时间、帧时长和感光度)的实际值。这一点至关重要,这样应用就知道限制或舍入何时发生,并且可以补偿用于图片拍摄的实际设置。

例如,如果应用在请求中将帧时长设置为 0,HAL 必须将帧时长限制到该请求的实际最小帧时长,并在输出结果元数据中报告这一受限制的最小时长。

因此,如果应用需要实现一个自定义 3A 例程(例如,为了适当地测量 HDR 连拍),则需要知道用于捕获其收到的最新一组结果的设置,以便更新下一个请求的设置。因此,新的相机 API 会向每个捕获的帧添加大量动态元数据。这包括用于捕获的已请求参数和实际参数,以及时间戳和统计信息生成器输出等其他每帧元数据。

每个设置的控件

对于大多数设置而言,它们应该能够随着每一帧发生变化,而不会给输出帧流带来明显的卡顿或延迟。理想情况下,输出帧速率应该仅由捕获请求的帧时长字段控制,且不受处理块配置发生的任何变化影响。实际上,我们已经知道一些特定控件发生变化的速度非常缓慢;这些控件包括相机流水线的输出分辨率和输出格式,以及影响实体设备的控件(例如镜头焦距)。稍后会详细说明每个控制集的确切要求。

原始传感器数据支持

除了旧 API 支持的像素格式之外,新 API 还添加了对原始传感器数据 (Bayer RAW) 的支持要求,既适用于高级相机应用,又支持原始图片文件。