3A 模式和状态转换

本页介绍了 Android 设备的 3A 模式和状态机。相机 HAL 接口(在高层定义状态机)允许 HAL 实现和 Android 框架传达当前的 3A 状态并触发 3A 事件。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) 模式都有效地处于 OFF 状态,并且捕获控件都不会被 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 用户触发的扫描正在进行中。
AF_STATE_FOCUSED_LOCKED 自动对焦算法认为已对焦。镜头未移动。
AF_STATE_NOT_FOCUSED_LOCKED 自动对焦算法无法对焦。镜头未移动。
ANDROID_CONTROL_AF_TRIGGER 用于启动自动对焦扫描的控件,其含义取决于模式和状态。由框架在请求设置中设置。
AF_TRIGGER_IDLE 当前无触发。
AF_TRIGGER_START 触发启动自动对焦扫描。效果取决于模式和状态。
AF_TRIGGER_CANCEL 取消当前自动对焦扫描(如果有),并将算法重置为默认值。
其他元数据条目
ANDROID_CONTROL_AF_REGIONS 用于选择视场 (FOV) 中应用于确定良好对焦的区域的控件。这适用于所有扫描对焦的自动对焦模式。由框架在请求设置中设置。

自动曝光设置和结果条目

主要元数据条目
ANDROID_CONTROL_AE_MODE 用于选择当前自动曝光模式的控件。由框架在请求设置中设置。
AE_MODE_OFF 自动曝光已禁用;用户控制曝光、增益、帧持续时间和闪光灯。
AE_MODE_ON 标准自动曝光,闪光灯控制已禁用。用户可以设置闪光灯闪光或常亮模式。
AE_MODE_ON_AUTO_FLASH 标准自动曝光,闪光灯由 HAL 自行决定是否在预拍摄和静态照片拍摄时闪光。用户对闪光灯的控制已禁用。
AE_MODE_ON_ALWAYS_FLASH 标准自动曝光,闪光灯在拍摄时始终闪光,并在预拍摄时由 HAL 自行决定是否闪光。用户对闪光灯的控制已禁用。
AE_MODE_ON_AUTO_FLASH_REDEYE 标准自动曝光,闪光灯由 HAL 自行决定是否在预拍摄和静态照片拍摄时闪光。在预拍摄序列结束时使用闪光突发以减少最终照片中的红眼。用户对闪光灯的控制已禁用。
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY 弱光增强功能可在弱光条件下自动调整预览流的亮度。这可能会导致弱光条件下的运动模糊和噪点增加。设备制造商必须确保帧率不低于 10 fps。
ANDROID_CONTROL_AE_STATE 描述当前自动曝光算法状态的动态元数据,由 HAL 在结果元数据中报告。
AE_STATE_INACTIVE 模式切换后的初始自动曝光状态。设备打开时,必须以此状态启动。
AE_STATE_SEARCHING 自动曝光未收敛到良好值,并且正在调整曝光参数。
AE_STATE_CONVERGED 自动曝光已找到当前场景的良好曝光值,并且曝光参数未更改。HAL 可能会自发离开此状态以搜索更好的解决方案。
AE_STATE_LOCKED 自动曝光已通过 AE_LOCK 控件锁定。曝光值未更改。
AE_STATE_FLASH_REQUIRED HAL 已收敛曝光,但认为需要闪光灯才能获得足够明亮的照片。用于确定是否可以使用零快门延迟帧。
AE_STATE_PRECAPTURE HAL 正处于预拍摄序列的中间。根据自动曝光模式,此模式可能涉及闪光灯闪光以进行测光或闪光脉冲突发以减少红眼。
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER 用于在拍摄高质量图像之前启动测光序列的控件。由框架在请求设置中设置。
PRECAPTURE_TRIGGER_IDLE 当前无触发。
PRECAPTURE_TRIGGER_START 启动预拍摄序列。HAL 应使用后续请求来测量即将到来的高分辨率拍摄的良好曝光/白平衡。
其他元数据条目
ANDROID_CONTROL_AE_LOCK 用于将自动曝光控件锁定到其当前值的控件。
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION 用于调整自动曝光算法目标亮度点的控件。
ANDROID_CONTROL_AE_TARGET_FPS_RANGE 用于选择自动曝光算法的目标帧率范围的控件。自动曝光例程无法将帧率更改为超出这些边界。
ANDROID_CONTROL_AE_REGIONS 用于选择视场 (FOV) 中应用于确定良好曝光水平的区域的控件。这适用于除 OFF 之外的所有自动曝光模式。

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

主要元数据条目
ANDROID_CONTROL_AWB_MODE 用于选择当前白平衡模式的控件。
AWB_MODE_OFF 自动白平衡已禁用。用户控制色彩矩阵。
AWB_MODE_AUTO 自动白平衡已启用;3A 控制色彩变换,可能使用比简单矩阵更复杂的变换。
AWB_MODE_INCANDESCENT 适用于室内白炽灯(钨丝灯)照明的固定白平衡设置,约为 2700K。
AWB_MODE_FLUORESCENT 适用于荧光灯照明的固定白平衡设置,约为 5000K。
AWB_MODE_WARM_FLUORESCENT 适用于暖色荧光灯照明的固定白平衡设置,约为 3000K。
AWB_MODE_DAYLIGHT 适用于日光照明的固定白平衡设置,约为 5500K。
AWB_MODE_CLOUDY_DAYLIGHT 适用于阴天日光照明的固定白平衡设置,约为 6500K。
AWB_MODE_TWILIGHT 适用于日落/日出附近的固定白平衡设置,约为 15000K。
AWB_MODE_SHADE 适用于阳光间接照射区域的固定白平衡设置,约为 7500K。
ANDROID_CONTROL_AWB_STATE 描述当前自动白平衡算法状态的动态元数据,由 HAL 在结果元数据中报告。
AWB_STATE_INACTIVE 模式切换后的初始自动白平衡状态。设备打开时,必须以此状态启动。
AWB_STATE_SEARCHING 自动白平衡未收敛到良好值,并且正在更改色彩调整参数。
AWB_STATE_CONVERGED 自动白平衡已找到当前场景的良好色彩调整值,并且参数未更改。HAL 可能会自发离开此状态以搜索更好的解决方案。
AWB_STATE_LOCKED 自动白平衡已通过 AWB_LOCK 控件锁定。色彩调整值未更改。
其他元数据条目
ANDROID_CONTROL_AWB_LOCK 用于将自动白平衡色彩调整锁定到其当前值的控件。
ANDROID_CONTROL_AWB_REGIONS 用于选择视场 (FOV) 中应用于确定良好色彩平衡的区域的控件。这仅适用于自动白平衡模式。

通用状态机转换说明

在自动对焦、自动曝光或自动白平衡模式之间切换始终会将算法的状态重置为 INACTIVE。同样,如果 CONTROL_MODE == USE_SCENE_MODE,则在 CONTROL_MODE 或 CONTROL_SCENE_MODE 之间切换会重置所有算法状态为 INACTIVE。

下表是按模式划分的。

自动对焦状态机

模式 = AF_MODE_OFF 或 AF_MODE_EDOF
状态 转换原因 新状态 注释
INACTIVE 自动对焦已禁用
模式 = AF_MODE_AUTO 或 AF_MODE_MACRO
状态 转换原因 新状态 注释
INACTIVE AF_TRIGGER ACTIVE_SCAN

开始自动对焦扫描

镜头现在移动

ACTIVE_SCAN 自动对焦扫描完成 FOCUSED_LOCKED

如果自动对焦成功

镜头现在锁定

ACTIVE_SCAN 自动对焦扫描完成 NOT_FOCUSED_LOCKED

如果自动对焦成功

镜头现在锁定

ACTIVE_SCAN AF_CANCEL INACTIVE

取消/重置自动对焦

镜头现在锁定

FOCUSED_LOCKED AF_CANCEL INACTIVE 取消/重置自动对焦
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

开始新的扫描

镜头现在移动

NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE 取消/重置自动对焦
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

开始新的扫描

镜头现在移动

所有状态 模式更改 INACTIVE
模式 = AF_MODE_CONTINUOUS_VIDEO
状态 转换原因 新状态 注释
INACTIVE HAL 启动新的扫描 PASSIVE_SCAN

开始自动对焦扫描

镜头现在移动

INACTIVE AF_TRIGGER NOT_FOCUSED_LOCKED

自动对焦状态查询

镜头现在锁定

PASSIVE_SCAN HAL 完成当前扫描 PASSIVE_FOCUSED

结束自动对焦扫描

镜头现在锁定

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

如果对焦良好,则立即转换

镜头现在锁定

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

如果对焦不佳,则立即转换

镜头现在锁定

PASSIVE_SCAN AF_CANCEL INACTIVE

重置镜头位置

镜头现在锁定

PASSIVE_FOCUSED HAL 启动新的扫描 PASSIVE_SCAN

开始自动对焦扫描

镜头现在移动

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

如果对焦良好,则立即转换

镜头现在锁定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED 如果对焦不佳,则立即转换

镜头现在锁定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 无效果
FOCUSED_LOCKED AF_CANCEL INACTIVE 重新启动自动对焦扫描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 无效果
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE 重新启动自动对焦扫描
模式 = AF_MODE_CONTINUOUS_PICTURE
状态 转换原因 新状态 注释
INACTIVE HAL 启动新的扫描 PASSIVE_SCAN

开始自动对焦扫描

镜头现在移动

INACTIVE AF_TRIGGER NOT_FOCUSED_LOCKED

自动对焦状态查询

镜头现在锁定

PASSIVE_SCAN HAL 完成当前扫描 PASSIVE_FOCUSED 结束自动对焦扫描

镜头现在锁定

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

如果对焦良好,最终转换

镜头现在锁定

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

如果无法对焦,最终转换

镜头现在锁定

PASSIVE_SCAN AF_CANCEL INACTIVE

重置镜头位置

镜头现在锁定

PASSIVE_FOCUSED HAL 启动新的扫描 PASSIVE_SCAN

开始自动对焦扫描

镜头现在移动

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

如果对焦良好,则立即转换

镜头现在锁定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

如果对焦不佳,则立即转换

镜头现在锁定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 无效果
FOCUSED_LOCKED AF_CANCEL INACTIVE 重新启动自动对焦扫描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 无效果
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE 重新启动自动对焦扫描

自动曝光和自动白平衡状态机

自动曝光和自动白平衡状态机基本相同。自动曝光具有额外的 FLASH_REQUIRED 和 PRECAPTURE 状态。因此,对于自动白平衡状态机,应忽略下面引用这两个状态的行。

模式 = AE_MODE_OFF / 自动白平衡模式非 AUTO
状态 转换原因 新状态 注释
INACTIVE 自动曝光/自动白平衡已禁用
模式 = AE_MODE_ON_* / AWB_MODE_AUTO
状态 转换原因 新状态 注释
INACTIVE HAL 启动自动曝光/自动白平衡扫描 SEARCHING
INACTIVE AE/AWB_LOCK 开启 LOCKED 值已锁定
SEARCHING HAL 完成自动曝光/自动白平衡扫描 CONVERGED 良好值,未更改
SEARCHING HAL 完成自动曝光扫描 FLASH_REQUIRED 已收敛但没有闪光灯太暗
SEARCHING AE/AWB_LOCK 开启 LOCKED 值已锁定
CONVERGED HAL 启动自动曝光/自动白平衡扫描 SEARCHING 值已锁定
CONVERGED AE/AWB_LOCK 开启 LOCKED 值已锁定
FLASH_REQUIRED HAL 启动自动曝光/自动白平衡扫描 SEARCHING 值已锁定
FLASH_REQUIRED AE/AWB_LOCK 开启 LOCKED 值已锁定
LOCKED AE/AWB_LOCK 关闭 SEARCHING 解锁后值不佳
LOCKED AE/AWB_LOCK 关闭 CONVERGED 解锁后值良好
LOCKED AE_LOCK 关闭 FLASH_REQUIRED 曝光良好,但太暗
所有自动曝光状态 PRECAPTURE_START PRECAPTURE 开始预拍摄序列
PRECAPTURE 序列完成,AE_LOCK 关闭 CONVERGED 准备进行高质量拍摄
PRECAPTURE 序列完成,AE_LOCK 开启 LOCKED 准备进行高质量拍摄

启用手动控制

多个控件也参与配置设备 3A 模块以允许直接应用程序控制。

3A 控制的 HAL 模型是,对于每个请求,HAL 都会检查 3A 控制字段的状态。如果启用了任何 3A 例程,则该例程将覆盖与该例程相关的控制变量,并且这些覆盖值随后可在该捕获的结果元数据中获得。因此,例如,如果在请求中启用了自动曝光,则 HAL 应覆盖请求的曝光、增益和帧持续时间字段(以及可能的闪光灯字段,具体取决于自动曝光模式)。相关控件的列表是

控件名称 单位 注释
android.control.mode 枚举:OFF、AUTO、USE_SCENE_MODE 高级 3A 控制。设置为 OFF 时,HAL 的所有 3A 控制都将被禁用。应用程序必须自行设置捕获参数的字段。设置为 AUTO 时,android.control.* 中的各个算法控件生效,例如 android.control.afMode。设置为 USE_SCENE_MODE 时,android.control.* 中的各个控件大多被禁用,并且 HAL 会根据需要实现场景模式设置之一(例如 ACTION、SUNSET 或 PARTY)。
android.control.afMode 枚举 OFF 表示通过 android.lens.focusDistance 手动控制镜头对焦。
android.control.aeMode 枚举 OFF 表示通过 android.sensor.exposureTime / .sensitivity / .frameDuration 手动控制曝光/增益/帧持续时间
android.control.awbMode 枚举 OFF 表示手动控制白平衡。