本页介绍了 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 表示手动控制白平衡。 |