Android 10 Camera -- 3A Modes and State Transition

说明:转载自 Android Camera,不定期添加自己的学习思考。


3A Modes and State Transition


While the actual 3A algorithms are up to the HAL implementation, a high-level state machine description is defined by the HAL interface to allow the HAL device and the framework to communicate about the current state of 3A and trigger 3A events.

When the device is opened, all the individual 3A states must be STATE_INACTIVE. Stream configuration does not reset 3A. For example, locked focus must be maintained across the configure() call.

Triggering a 3A action involves simply setting the relevant trigger entry in the settings for the next request to indicate start of trigger. For example, the trigger for starting an autofocus scan is setting the entry ANDROID_CONTROL_AF_TRIGGER to ANDROID_CONTROL_AF_TRIGGER_START for one request; and cancelling an autofocus scan is triggered by setting ANDROID_CONTROL_AF_TRIGGER to ANDROID_CONTRL_AF_TRIGGER_CANCEL. Otherwise, the entry will not exist or be set to ANDROID_CONTROL_AF_TRIGGER_IDLE. Each request with a trigger entry set to a non-IDLE value will be treated as an independent triggering event.

At the top level, 3A is controlled by the ANDROID_CONTROL_MODE setting. It selects between no 3A (ANDROID_CONTROL_MODE_OFF), normal AUTO mode (ANDROID_CONTROL_MODE_AUTO), and using the scene mode setting (ANDROID_CONTROL_USE_SCENE_MODE):

  • In OFF mode, each of the individual auto-focus (AF), auto-exposure (AE), and auto-whitebalance (AWB) modes are effectively OFF, and none of the capture controls may be overridden by the 3A routines.
  • In AUTO mode, AF, AE, and AWB modes all run their own independent algorithms, and have their own mode, state, and trigger metadata entries, as listed in the next section.
  • In USE_SCENE_MODE, the value of the ANDROID_CONTROL_SCENE_MODE entry must be used to determine the behavior of 3A routines. In SCENE_MODEs other than FACE_PRIORITY, the HAL must override the values of ANDROID_CONTROL_AE/AWB/AF_MODE to be the mode it prefers for the selected SCENE_MODE. For example, the HAL may prefer SCENE_MODE_NIGHT to use CONTINUOUS_FOCUS AF mode. Any user selection of AE/AWB/AF_MODE when scene must be ignored for these scene modes.
  • For SCENE_MODE_FACE_PRIORITY, the AE/AWB/AFMODE controls work as in ANDROID_CONTROL_MODE_AUTO, but the 3A routines must bias toward metering and focusing on any detected faces in the scene.

Auto-focus settings and result entries


Main metadata entries
ANDROID_CONTROL_AF_MODEControl for selecting the current autofocus mode. Set by the framework in the request settings.
AF_MODE_OFFAF is disabled; the framework/app directly controls lens position.
AF_MODE_AUTOSingle-sweep autofocus. No lens movement unless AF is triggered.
AF_MODE_MACROSingle-sweep up-close autofocus. No lens movement unless AF is triggered
AF_MODE_CONTINUOUS_VIDEOSmooth continuous focusing, for recording video. Triggering immediately locks focus in current position. Canceling resumes continuous focusing.
AF_MODE_CONTINUOUS_PICTUREFast continuous focusing, for zero-shutter-lag still capture. Triggering locks focus once currently active sweep concludes. Canceling resumes continuous focusing.
AF_MODE_EDOFAdvanced extended depth of field focusing. There is no autofocus scan, so triggering one or canceling one has no effect. Images are focused automatically by the HAL.
ANDROID_CONTROL_AF_STATEDynamic metadata describing the current AF algorithm state, reported by the HAL in the result metadata.
AF_STATE_INACTIVENo focusing has been done, or algorithm was reset. Lens is not moving. Always the state for MODE_OFF or MODE_EDOF. When the device is opened, it must start in this state.
AF_STATE_PASSIVE_SCANA continuous focus algorithm is currently scanning for good focus. The lens is moving.
AF_STATE_PASSIVE_FOCUSEDA continuous focus algorithm believes it is well focused. The lens is not moving. The HAL may spontaneously leave this state.
AF_STATE_PASSIVE_UNFOCUSEDA continuous focus algorithm believes it is not well focused. The lens is not moving. The HAL may spontaneously leave this state.
AF_STATE_ACTIVE_SCANA scan triggered by the user is underway.
AF_STATE_FOCUSED_LOCKEDThe AF algorithm believes it is focused. The lens is not moving.
AF_STATE_NOT_FOCUSED_LOCKEDThe AF algorithm has been unable to focus. The lens is not moving.
ANDROID_CONTROL_AFTRIGGERControl for starting an autofocus scan, the meaning of which depends on mode and state. Set by the framework in the request settings.
AF_TRIGGER_IDLENo current trigger.
AF_TRIGGER_STARTTrigger start of AF scan. Effect depends on mode and state.
AF_TRIGGER_CANCELCancel current AF scan if any, and reset algorithm to default.
Additional metadata entries
ANDROID_CONTROL_AF_REGIONSControl for selecting the regions of the field of view (FOV) that should be used to determine good focus. This applies to all AF modes that scan for focus. Set by the framework in the request settings.

Auto-exposure settings and result entries


Main metadata entries
ANDROID_CONTROL_AE_MODEControl for selecting the current auto-exposure mode. Set by the framework in the request settings.
AE_MODE_OFFAutoexposure is disabled; the user controls exposure, gain, frame duration, and flash.
AE_MODE_ONStandard autoexposure, with flash control disabled. User may set flash to fire or to torch mode.
AE_MODE_ON_AUTO_FLASHStandard autoexposure, with flash on at HAL’s discretion for precapture and still capture. User control of flash disabled.
AE_MODE_ON_ALWAYS_FLASHStandard autoexposure, with flash always fired for capture, and at HAL’s discretion for precapture. User control of flash disabled.
AE_MODE_ON_AUTO_FLASH_REDEYEStandard autoexposure, with flash on at HAL’s discretion for precapture and still capture. Use a flash burst at end of precapture sequence to reduce redeye in the final picture. User control of flash disabled.
ANDROID_CONTROL_AE_STATEDynamic metadata describing the current AE algorithm state, reported by the HAL in the result metadata.
AE_STATE_INACTIVEInitial AE state after mode switch. When the device is opened, it must start in this state.
AE_STATE_SEARCHINGAE is not converged to a good value and is adjusting exposure parameters.
AE_STATE_CONVERGEDAE has found good exposure values for the current scene, and the exposure parameters are not changing. HAL may spontaneously leave this state to search for a better solution.
AE_STATE_LOCKEDAE has been locked with the AE_LOCK control. Exposure values are not changing.
AE_STATE_FLASH_REQUIREDThe HAL has converged exposure but believes flash is required for a sufficiently bright picture. Used for determining if a zero-shutter-lag frame can be used.
AE_STATE_PRECAPTUREThe HAL is in the middle of a precapture sequence. Depending on AE mode, this mode may involve firing the flash for metering or a burst of flash pulses for redeye reduction.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGERControl for starting a metering sequence before capturing a high-quality image. Set by the framework in the request settings.
PRECAPTURE_TRIGGER_IDLENo current trigger.
PRECAPTURE_TRIGGER_STARTStart a precapture sequence. The HAL should use the subsequent requests to measure good exposure/white balance for an upcoming high-resolution capture.
Additional metadata entries
ANDROID_CONTROL_AE_LOCKControl for locking AE controls to their current values.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATIONControl for adjusting AE algorithm target brightness point.
ANDROID_CONTROL_AE_TARGET_FPS_RANGEControl for selecting the target frame rate range for the AE algorithm. The AE routine cannot change the frame rate to be outside these bounds.
ANDROID_CONTROL_AE_REGIONSControl for selecting the regions of the FOV that should be used to determine good exposure levels. This applies to all AE modes besides OFF.

Auto-whitebalance settings and result entries


Main metadata entries
ANDROID_CONTROL_AWB_MODEControl for selecting the current white-balance mode.
AWB_MODE_OFFAutomatic white balance is enabled; 3A controls color transform, possibly using more complex transforms than a simple matrix.
AWB_MODE_INCANDESCENTFixed white balance settings good for indoor incandescent (tungsten) lighting, roughly 2700K.
AWB_MODE_FLUORESCENTFixed white balance settings good for fluorescent lighting, roughly 5000K.
AWB_MODE_WARM_FLUORESCENTFixed white balance settings good for fluorescent lighting, roughly 3000K.
AWB_MODE_DAYLIGHTFixed white balance settings good for daylight, roughly 5500K.
AWB_MODE_CLOUDY_DAYLIGHTFixed white balance settings good for clouded daylight, roughly 6500K.
AWB_MODE_TWILIGHTFixed white balance settings good for near-sunset/sunrise, roughly 15000K.
AWB_MODE_SHADEFixed white balance settings good for areas indirectly lit by the sun, roughly 7500K.
ANDROID_CONTROL_AWB_STATEDynamic metadata describing the current AWB algorithm state, reported by the HAL in the result metadata.
AWB_STATE_INACTIVEInitial AWB state after mode switch. When the device is opened, it must start in this state.
AWB_STATE_SEARCHINGAWB is not converged to a good value and is changing color adjustment parameters.
AWB_STATE_CONVERGEDAWB has found good color adjustment values for the current scene, and the parameters are not changing. HAL may spontaneously leave this state to search for a better solution.
AWB_STATE_LOCKEDAWB has been locked with the AWB_LOCK control. Color adjustment values are not changing.
Additional metadata entries
ANDROID_CONTROL_AWB_LOCKControl for locking AWB color adjustments to their current values.
ANDROID_CONTROL_AWB_REGIONSControl for selecting the regions of the FOV that should be used to determine good color balance. This applies only to auto-whitebalance mode.

General state machine transition notes


Switching between AF, AE, or AWB modes always resets the algorithm’s state to INACTIVE. Similarly, switching between CONTROL_MODE or CONTROL_SCENE_MODE if CONTROL_MODE == USE_SCENE_MODE resets all the algorithm states to INACTIVE.

The tables below are per-mode.

AF state machines


mode = AF_MODE_OFF or AF_MODE_EDOF
StateTransformation cause
INACTIVE
mode = AF_MODE_AUTO or AF_MODE_MACRO
StateTransformation causeNew stateNotes
INACTIVEAF_TRIGGERACTIVE_SCANStart AF sweep

Lens now moving
ACTIVE_SCANAF sweep doneFOCUSED_LOCKEDIf AF successful

Lens now locked
ACTIVE_SCANAF sweep doneNOT_FOCUSED_LOCKEDIf AF successful

Lens now locked
ACTIVE_SCANAF_CANCELINACTIVECancel/reset AF

Lens now locked
FOCUSED_LOCKEDAF_CANCELINACTIVECancel/reset AF
FOCUSED_LOCKEDAF_TRIGGERACTIVE_SCANStart new sweep

Lens now moving
NOT_FOCUSED_LOCKEDAF_CANCELINACTIVECancel/reset AF
NOT_FOCUSED_LOCKEDAF_TRIGGERACTIVE_SCANStart new sweep

Lens now moving
All statesMode changeINACTIVE
mode = AF_MODE_CONTINUOUS_VIDEO
StateTransformation causeNew stateNotes
INACTIVEHAL initiates new scanPASSIVE_SCANStart AF sweep

Lens now moving
INACTIVEAF_TRIGGERNOT_FOCUSED_LOCKEDAF state query

Lens now locked
PASSIVE_SCANHAL completes current scanPASSIVE_FOCUSEDEnd AF scan

Lens now locked
PASSIVE_SCANAF_TRIGGERFOCUSED_LOCKEDImmediate transformation if focus is good

Lens now locked
PASSIVE_SCANAF_TRIGGERNOT_FOCUSED_LOCKEDImmediate transformation if focus is bad

Lens now locked
PASSIVE_SCANAF_CANCELINACTIVEReset lens position

Lens now locked
PASSIVE_FOCUSEDHAL initiates new scanPASSIVE_SCANStart AF scan

Lens now moving
PASSIVE_FOCUSEDAF_TRIGGERFOCUSED_LOCKEDImmediate transformation if focus is good

Lens now locked
PASSIVE_FOCUSEDAF_TRIGGERNOT_FOCUSED_LOCKEDImmediate transformation if focus is bad

Lens now locked
FOCUSED_LOCKEDAF_TRIGGERFOCUSED_LOCKEDNo effect
FOCUSED_LOCKEDAF_CANCELINACTIVERestart AF scan
NOT_FOCUSED_LOCKEDAF_TRIGGERNOT_FOCUSED_LOCKEDNo effect
NOT_FOCUSED_LOCKEDAF_CANCELINACTIVERestart AF scan
mode = AF_MODE_CONTINUOUS_PICTURE
StateTransformation causeNew stateNotes
INACTIVEHAL initiates new scanPASSIVE_SCANStart AF scan

Lens now moving
INACTIVEAF_TRIGGERNOT_FOCUSED_LOCKEDAF state query

Lens now locked
PASSIVE_SCANHAL completes current scanPASSIVE_FOCUSEDEnd AF scan

Lens now locked
PASSIVE_SCANAF_TRIGGERFOCUSED_LOCKEDEventual transformation once focus good

Lens now locked
PASSIVE_SCANAF_TRIGGERNOT_FOCUSED_LOCKEDEventual transformation if cannot focus

Lens now locked
PASSIVE_SCANAF_CANCELINACTIVEReset lens position

Lens now locked
PASSIVE_FOCUSEDHAL initiates new scanPASSIVE_SCANStart AF scan

Lens now moving
PASSIVE_FOCUSEDAF_TRIGGERFOCUSED_LOCKEDImmediate transformation if focus is good

Lens now locked
PASSIVE_FOCUSEDAF_TRIGGERNOT_FOCUSED_LOCKEDImmediate transformation if focus is bad

Lens now locked
FOCUSED_LOCKEDAF_TRIGGERFOCUSED_LOCKEDNo effect
FOCUSED_LOCKEDAF_CANCELINACTIVERestart AF scan
NOT_FOCUSED_LOCKEDAF_TRIGGERNOT_FOCUSED_LOCKEDNo effect
NOT_FOCUSED_LOCKEDAF_CANCELINACTIVERestart AF scan

AE and AWB state machines


The AE and AWB state machines are mostly identical. AE has additional FLASH_REQUIRED and PRECAPTURE states. So rows below that refer to those two states should be ignored for the AWB state machine.

mode = AE_MODE_OFF / AWB mode not AUTO
StateTransformation causeNew stateNotes
INACTIVEAE/AWB disabled
mode = AE_MODE_ON_* / AWB_MODE_AUTO
StateTransformation causeNew stateNotes
INACTIVEHAL initiates AE/AWB scanSEARCHING
INACTIVEAE/AWB_LOCK onLOCKEDValues locked
SEARCHINGHAL finishes AE/AWB scanCONVERGEDGood values, not changing
SEARCHINGHAL finishes AE scanFLASH_REQUIREDConverged but too dark without flash
SEARCHINGAE/AWB_LOCK onLOCKEDValues locked
CONVERGEDHAL initiates AE/AWB scanSEARCHINGValues locked
CONVERGEDAE/AWB_LOCK onLOCKEDValues locked
FLASH_REQUIREDHAL initiates AE/AWB scanSEARCHINGValues locked
FLASH_REQUIREDAE/AWB_LOCK onLOCKEDValues locked
LOCKEDAE/AWB_LOCK offSEARCHINGValues not good after unlock
LOCKEDAE/AWB_LOCK offCONVERGEDValues good after unlock
LOCKEDAE_LOCK offFLASH_REQUIREDExposure good, but too dark
All AE statesPRECAPTURE_STARTPRECAPTUREStart precapture sequence
PRECAPTURESequence done, AE_LOCK offCONVERGEDReady for high-quality capture
PRECAPTURESequence done, AE_LOCK onLOCKEDReady for high-quality capture

Enabling manual control


Several controls are also involved in configuring the device 3A blocks to allow for direct application control.

The HAL model for 3A control is that for each request, the HAL inspects the state of the 3A control fields. If any 3A routine is enabled, then that routine overrides the control variables that relate to that routine, and these override values are then available in the result metadata for that capture. So for example, if auto-exposure is enabled in a request, the HAL should overwrite the exposure, gain, and frame duration fields (and potentially the flash fields, depending on AE mode) of the request. The list of relevant controls is:

Control nameUnitNotes
android.control.modeenum: OFF, AUTO, USE_SCENE_MODEHigh-level 3A control. When set to OFF, all 3A control by the HAL is disabled. The application must set the fields for capture parameters itself. When set to AUTO, the individual algorithm controls in android.control.* are in effect, such as android.control.afMode. When set to USE_SCENE_MODE, the individual controls in android.control.* are mostly disabled, and the HAL implements one of the scene mode settings (such as ACTION, SUNSET, or PARTY) as it wishes.
android.control.afModeenum OFFmeans manual control of lens focusing through android.lens.focusDistance.
android.control.aeModeenum OFFmeans manual control of exposure/gain/frame duration through android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbModeenum OFFmeans manual control of white balance.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值