虽然实际的 3A 算法取决于 HAL 实现,但高级状态机描述由 HAL 接口定义,以支持 HAL 设备和框架就 3A 的当前状态进行通信并触发 3A 事件。
当设备开启时,所有单独的 3A 状态都必须为 STATE_INACTIVE。流配置不会重置 3A。例如,在整个 configure() 调用期间必须保持焦点锁定。
若要触发 3A 操作,只需在下一个请求的设置中设置相关触发条目,以指示触发开始即可。例如,若要触发自动对焦扫描的启动操作,只需将相应请求的 ANDROID_CONTROL_AF_TRIGGER 条目设为 ANDROID_CONTROL_AF_TRIGGER_START 即可;若要触发自动对焦扫描的取消操作,只需将 ANDROID_CONTROL_AF_TRIGGER 设为 ANDROID_CONTRL_AF_TRIGGER_CANCEL 即可。否则,条目将会不存在或被设为 ANDROID_CONTROL_AF_TRIGGER_IDLE。凡是具有已设为非 IDLE 值的触发条目的请求,都会被视为独立的触发事件。
在顶层,3A 由 ANDROID_CONTROL_MODE 设置控制。该设置选项包括关闭 3A (ANDROID_CONTROL_MODE_OFF)、正常自动 (AUTO) 模式 (ANDROID_CONTROL_MODE_AUTO),以及使用取景模式设置 (ANDROID_CONTROL_USE_SCENE_MODE):
在 OFF 模式下,单个的自动对焦 (AF)、自动曝光 (AE) 和自动白平衡 (AWB) 模式都会有效地关闭,且任何拍摄控件都不会被 3A 例程覆盖。
在 AUTO 模式下,AF、AE 和 AWB 模式都会运行各自的独立算法,且具有自己的模式、状态和触发元数据条目,具体如下一节所示。
在 USE_SCENE_MODE 下,必须使用 ANDROID_CONTROL_SCENE_MODE 条目的值来确定 3A 例程的行为。在除 FACE_PRIORITY 以外的 SCENE_MODE 下,HAL 必须将 ANDROID_CONTROL_AE/AWB/AF_MODE 的值替换为它倾向于让所选的 SCENE_MODE 使用的模式。例如,HAL 可能倾向于在 SCENE_MODE_NIGHT 下使用 CONTINUOUS_FOCUS AF 模式。当必须忽略这些取景模式下的场景时,用户可随意选择 AE/AWB/AF_MODE。
对于 SCENE_MODE_FACE_PRIORITY,AE/AWB/AFMODE 控件的工作方式与在 ANDROID_CONTROL_MODE_AUTO 模式下相同,但 3A 例程必须偏向测光,并对焦到场景中任何已检测到的人脸上。
自动对焦设置与结果条目
主要元数据条目
ANDROID_CONTROL_AF_MODE
用于选择当前的自动对焦模式的控件。由请求设置中的框架进行设置。
AF_MODE_OFF
AF 已停用;框架/应用直接控制镜头位置。
AF_MODE_AUTO
单相扫描自动对焦。镜头在该模式下不会移动,除非 AF 被触发。
AF_MODE_MACRO
单相扫描近距离自动对焦。镜头在该模式下不会移动,除非 AF 被触发。
AF_MODE_CONTINUOUS_VIDEO
流畅连续对焦,用于录制视频。触发后会立刻将焦点锁定在当前位置。取消后即会恢复连续对焦。
AF_MODE_CONTINUOUS_PICTURE
快速连续对焦,用于快门零延迟静像拍摄。待当前处于活动状态的扫描结束后,触发即可锁定焦点。取消后即会恢复连续对焦。
AF_MODE_EDOF
高级扩展景深对焦。该模式下没有自动对焦扫描,因此触发或取消操作均无效。图像由 HAL 自动对焦。
ANDROID_CONTROL_AF_STATE
用于描述当前 AF 算法状态的动态元数据,由结果元数据中的 HAL 报告。
AF_STATE_INACTIVE
未进行对焦,或算法被重置。镜头未移动。始终处于 MODE_OFF 或 MODE_EDOF 状态。当设备开启时,必须以此状态启动。
AF_STATE_PASSIVE_SCAN
连续对焦算法目前正在扫描,以确定良好对焦。镜头正在移动。
AF_STATE_PASSIVE_FOCUSED
连续对焦算法认为已良好对焦。镜头未移动。HAL 可能会自发退出此状态。
AF_STATE_PASSIVE_UNFOCUSED
连续对焦算法认为未良好对焦。镜头未移动。HAL 可能会自发退出此状态。
AF_STATE_ACTIVE_SCAN
用户触发的扫描正在进行