Android [Camera 源码] 3A 模式和状态转换(3A Modes and State) Google官方文档(五)

Google源码网地址链接:https://source.android.com/devices/camera

该Google Camera的文档为系列文章,文章列表:

overview

Camera3

HAL Subsystem

Metadata and Controls

3A Modes and State

Output and Cropping

Errors and Streams

Request Creation

External USB Cameras

扫描二维码关注公众号,回复: 4408621 查看本文章

Multi-Camera Support

Motion Tracking

Session Parameters

Single Producer,Multiple Consumer

Version Support

 

3A 模式和状态转换


虽然实际的 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 例程必须偏向测光,并对焦到场景中任何已检测到的人脸上。

自动对焦设置与结果条目


 

自动曝光设置与结果条目


自动白平衡设置和结果条目


一般状态机转换说明


在 AF、AE 和 AWB 模式之间进行切换一律会将算法状态重置为 INACTIVE 状态。同样,如果 CONTROL_MODE == USE_SCENE_MODE,在 CONTROL_MODE 和 CONTROL_SCENE_MODE 之间进行切换也会将所有算法状态重置为 INACTIVE 状态。

下表列出了各模式的情况。

AF 状态机


AE 和 AWB 状态机


AE 和 AWB 状态机大致上相同,但 AE 具有额外的 FLASH_REQUIRED 和 PRECAPTURE 状态。因此,对于 AWB 状态机,应忽略下表中这两个状态对应的行。

 

启用手动控制


配置设备 3A 块以实现直接应用控制的过程还涉及到多个控件。

用于 3A 控制的 HAL 模式的运作方式为:对于每个请求,HAL 都会检查 3A 控制字段的状态。如果启用了任何 3A 例程,则该例程会覆盖与该例程相关的控制变量,然后这些覆盖值会在该拍摄的结果元数据中提供。例如,如果在请求中启用自动曝光,则 HAL 应覆盖请求的曝光、增益和帧时长字段(还可能包括闪光灯字段,具体取决于 AE 模式)。相关控件如下:

猜你喜欢

转载自blog.csdn.net/kiazhu/article/details/84788366
3A