blob: 35fa90d719cbd72d93a0d62cd5680f602c73247d [file] [log] [blame]
page.title=3A Modes and State Transition
@jd:body
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol id="auto-toc">
</ol>
</div>
</div>
<p>
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.</p>
<p>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.</p>
<p>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.</p>
<p>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):</p>
<ul>
<li>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.</li>
<li>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.</li>
<li>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.</li>
<li>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.</li>
</ul>
<h2 id="auto-focus">Auto-focus settings and result entries</h2>
<p>Main metadata entries:<br/>
ANDROID_CONTROL_AF_MODE: Control for selecting the current autofocus mode. Set
by the framework in the request settings.<br/>
AF_MODE_OFF: AF is disabled; the framework/app directly controls lens position.<br/>
AF_MODE_AUTO: Single-sweep autofocus. No lens movement unless AF is triggered.<br/>
AF_MODE_MACRO: Single-sweep up-close autofocus. No lens movement unless AF is
triggered.<br/>
AF_MODE_CONTINUOUS_VIDEO: Smooth continuous focusing, for recording video.
Triggering immediately locks focus in current position. Canceling resumes
continuous focusing.<br/>
AF_MODE_CONTINUOUS_PICTURE: Fast continuous focusing, for zero-shutter-lag still
capture. Triggering locks focus once currently active sweep concludes. Canceling
resumes continuous focusing.<br/>
AF_MODE_EDOF: Advanced 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.<br/>
ANDROID_CONTROL_AF_STATE: Dynamic metadata describing the current AF algorithm
state, reported by the HAL in the result metadata.<br/>
AF_STATE_INACTIVE: No 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.<br/>
AF_STATE_PASSIVE_SCAN: A continuous focus algorithm is currently scanning for
good focus. The lens is moving.<br/>
AF_STATE_PASSIVE_FOCUSED: A continuous focus algorithm believes it is well
focused. The lens is not moving. The HAL may spontaneously leave this state.<br/>
AF_STATE_PASSIVE_UNFOCUSED: A continuous focus algorithm believes it is not well
focused. The lens is not moving. The HAL may spontaneously leave this state.<br/>
AF_STATE_ACTIVE_SCAN: A scan triggered by the user is underway.<br/>
AF_STATE_FOCUSED_LOCKED: The AF algorithm believes it is focused. The lens is
not moving.<br/>
AF_STATE_NOT_FOCUSED_LOCKED: The AF algorithm has been unable to focus. The lens
is not moving.<br/>
ANDROID_CONTROL_AFTRIGGER: Control for starting an autofocus scan, the meaning
of which depends on mode and state. Set by the framework in the request
settings.<br/>
AF_TRIGGER_IDLE: No current trigger.<br/>
AF_TRIGGER_START: Trigger start of AF scan. Effect depends on mode and state.<br/>
AF_TRIGGER_CANCEL: Cancel current AF scan if any, and reset algorithm to
default.<br/>
Additional metadata entries:<br/>
ANDROID_CONTROL_AF_REGIONS: Control 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.</p>
<h2 id="auto-exposure">Auto-exposure settings and result entries</h2>
<p>Main metadata entries:<br/>
ANDROID_CONTROL_AE_MODE: Control for selecting the current auto-exposure mode.
Set by the framework in the request settings.<br/>
AE_MODE_OFF: Autoexposure is disabled; the user controls exposure, gain, frame
duration, and flash.<br/>
AE_MODE_ON: Standard autoexposure, with flash control disabled. User may set
flash to fire or to torch mode.<br/>
AE_MODE_ON_AUTO_FLASH: Standard autoexposure, with flash on at HAL's discretion
for precapture and still capture. User control of flash disabled.<br/>
AE_MODE_ON_ALWAYS_FLASH: Standard autoexposure, with flash always fired for
capture, and at HAL's discretion for precapture. User control of flash disabled.<br/>
AE_MODE_ON_AUTO_FLASH_REDEYE: Standard 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.<br/>
ANDROID_CONTROL_AE_STATE: Dynamic metadata describing the current AE algorithm
state, reported by the HAL in the result metadata.<br/>
AE_STATE_INACTIVE: Initial AE state after mode switch. When the device is
opened, it must start in this state.<br/>
AE_STATE_SEARCHING: AE is not converged to a good value and is adjusting
exposure parameters.<br/>
AE_STATE_CONVERGED: AE 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.<br/>
AE_STATE_LOCKED: AE has been locked with the AE_LOCK control. Exposure values
are not changing.<br/>
AE_STATE_FLASH_REQUIRED: The 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.<br/>
AE_STATE_PRECAPTURE: The 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.<br/>
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER: Control for starting a metering sequence
before capturing a high-quality image. Set by the framework in the request
settings.<br/>
PRECAPTURE_TRIGGER_IDLE: No current trigger.<br/>
PRECAPTURE_TRIGGER_START: Start a precapture sequence. The HAL should use the
subsequent requests to measure good exposure/white balance for an upcoming
high-resolution capture.<br/>
Additional metadata entries:<br/>
ANDROID_CONTROL_AE_LOCK: Control for locking AE controls to their current
values.<br/>
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION: Control for adjusting AE algorithm
target brightness point.<br/>
ANDROID_CONTROL_AE_TARGET_FPS_RANGE: Control for selecting the target frame rate
range for the AE algorithm. The AE routine cannot change the frame rate to be
outside these bounds.<br/>
ANDROID_CONTROL_AE_REGIONS: Control for selecting the regions of the FOV that
should be used to determine good exposure levels. This applies to all AE modes
besides OFF.</p>
<h2 id="auto-wb">Auto-whitebalance settings and result entries</h2>
<p>Main metadata entries:<br/>
ANDROID_CONTROL_AWB_MODE: Control for selecting the current white-balance mode.<br/>
AWB_MODE_OFF: Auto-whitebalance is disabled. User controls color matrix.<br/>
AWB_MODE_AUTO: Automatic white balance is enabled; 3A controls color transform,
possibly using more complex transforms than a simple matrix.<br/>
AWB_MODE_INCANDESCENT: Fixed white balance settings good for indoor incandescent
(tungsten) lighting, roughly 2700K.<br/>
AWB_MODE_FLUORESCENT: Fixed white balance settings good for fluorescent
lighting, roughly 5000K.<br/>
AWB_MODE_WARM_FLUORESCENT: Fixed white balance settings good for fluorescent
lighting, roughly 3000K.<br/>
AWB_MODE_DAYLIGHT: Fixed white balance settings good for daylight, roughly
5500K.<br/>
AWB_MODE_CLOUDY_DAYLIGHT: Fixed white balance settings good for clouded
daylight, roughly 6500K.<br/>
AWB_MODE_TWILIGHT: Fixed white balance settings good for near-sunset/sunrise,
roughly 15000K.<br/>
AWB_MODE_SHADE: Fixed white balance settings good for areas indirectly lit by
the sun, roughly 7500K.<br/>
ANDROID_CONTROL_AWB_STATE: Dynamic metadata describing the current AWB algorithm
state, reported by the HAL in the result metadata.<br/>
AWB_STATE_INACTIVE: Initial AWB state after mode switch. When the device is
opened, it must start in this state.<br/>
AWB_STATE_SEARCHING: AWB is not converged to a good value and is changing color
adjustment parameters.<br/>
AWB_STATE_CONVERGED: AWB 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.<br/>
AWB_STATE_LOCKED: AWB has been locked with the AWB_LOCK control. Color
adjustment values are not changing.<br/>
Additional metadata entries:<br/>
ANDROID_CONTROL_AWB_LOCK: Control for locking AWB color adjustments to their
current values.<br/>
ANDROID_CONTROL_AWB_REGIONS: Control for selecting the regions of the FOV that
should be used to determine good color balance. This applies only to
auto-whitebalance mode.</p>
<h2 id="state-transition">General state machine transition notes</h2>
<p>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.<br/>
The tables below are per-mode.</p>
<h2 id="af-state">AF state machines</h2>
<table>
<tr>
<td><strong>mode = AF_MODE_OFF or AF_MODE_EDOF</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td></td>
<td></td>
<td>AF is disabled</td>
</tr>
<tr>
<td><strong>mode = AF_MODE_AUTO or AF_MODE_MACRO</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td>AF_TRIGGER</td>
<td>ACTIVE_SCAN</td>
<td>Start AF sweep
Lens now moving</td>
</tr>
<tr>
<td>ACTIVE_SCAN</td>
<td>AF sweep done</td>
<td>FOCUSED_LOCKED</td>
<td>If AF successful
Lens now locked</td>
</tr>
<tr>
<td>ACTIVE_SCAN</td>
<td>AF sweep done</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>If AF successful
Lens now locked</td>
</tr>
<tr>
<td>ACTIVE_SCAN</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Cancel/reset AF
Lens now locked</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Cancel/reset AF</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>ACTIVE_SCAN</td>
<td>Start new sweep
Lens now moving</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Cancel/reset AF</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>ACTIVE_SCAN</td>
<td>Start new sweep
Lens now moving</td>
</tr>
<tr>
<td>All states</td>
<td>mode change</td>
<td>INACTIVE</td>
<td></td>
</tr>
<tr>
<td><strong>mode = AF_MODE_CONTINUOUS_VIDEO</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td>HAL initiates new scan</td>
<td>PASSIVE_SCAN</td>
<td>Start AF sweep
Lens now moving</td>
</tr>
<tr>
<td>INACTIVE</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF state query
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>HAL completes current scan</td>
<td>PASSIVE_FOCUSED</td>
<td>End AF scan
Lens now locked </td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>Immediate transformation
if focus is good
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>Immediate transformation
if focus is bad
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Reset lens position
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>HAL initiates new scan</td>
<td>PASSIVE_SCAN</td>
<td>Start AF scan
Lens now moving</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>Immediate transformation
if focus is good
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>Immediate transformation
if focus is bad
Lens now locked</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>No effect</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Restart AF scan</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>No effect</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Restart AF scan</td>
</tr>
<tr>
<td><strong>mode = AF_MODE_CONTINUOUS_PICTURE</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td>HAL initiates new scan</td>
<td>PASSIVE_SCAN</td>
<td>Start AF scan
Lens now moving</td>
</tr>
<tr>
<td>INACTIVE</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF state query
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>HAL completes current scan</td>
<td>PASSIVE_FOCUSED</td>
<td>End AF scan
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>Eventual transformation once focus good
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>Eventual transformation if cannot focus
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_SCAN</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Reset lens position
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>HAL initiates new scan</td>
<td>PASSIVE_SCAN</td>
<td>Start AF scan
Lens now moving</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>Immediate transformation if focus is good
Lens now locked</td>
</tr>
<tr>
<td>PASSIVE_FOCUSED</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>Immediate transformation if focus is bad
Lens now locked</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>FOCUSED_LOCKED</td>
<td>No effect</td>
</tr>
<tr>
<td>FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Restart AF scan</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_TRIGGER</td>
<td>NOT_FOCUSED_LOCKED</td>
<td>No effect</td>
</tr>
<tr>
<td>NOT_FOCUSED_LOCKED</td>
<td>AF_CANCEL</td>
<td>INACTIVE</td>
<td>Restart AF scan</td>
</tr>
</table>
<h2 id="ae-wb">AE and AWB state machines</h2>
<p>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.</p>
<table>
<tr>
<td><strong>mode = AE_MODE_OFF / AWB mode not AUTO</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td></td>
<td></td>
<td>AE/AWB disabled</td>
</tr>
<tr>
<td><strong>mode = AE_MODE_ON_* / AWB_MODE_AUTO</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<th>State</th>
<th>Transformation cause</th>
<th>New state</th>
<th>Notes</th>
</tr>
<tr>
<td>INACTIVE</td>
<td>HAL initiates AE/AWB scan</td>
<td>SEARCHING</td>
<td></td>
</tr>
<tr>
<td>INACTIVE</td>
<td>AE/AWB_LOCK on</td>
<td>LOCKED</td>
<td>Values locked</td>
</tr>
<tr>
<td>SEARCHING</td>
<td>HAL finishes AE/AWB scan</td>
<td>CONVERGED</td>
<td>Good values, not changing</td>
</tr>
<tr>
<td>SEARCHING</td>
<td>HAL finishes AE scan</td>
<td>FLASH_REQUIRED</td>
<td>Converged but too dark without flash</td>
</tr>
<tr>
<td>SEARCHING</td>
<td>AE/AWB_LOCK on</td>
<td>LOCKED</td>
<td>Values locked</td>
</tr>
<tr>
<td>CONVERGED</td>
<td>HAL initiates AE/AWB scan</td>
<td>SEARCHING</td>
<td>Values locked</td>
</tr>
<tr>
<td>CONVERGED</td>
<td>AE/AWB_LOCK on</td>
<td>LOCKED</td>
<td>Values locked</td>
</tr>
<tr>
<td>FLASH_REQUIRED</td>
<td>HAL initiates AE/AWB scan</td>
<td>SEARCHING</td>
<td>Values locked</td>
</tr>
<tr>
<td>FLASH_REQUIRED</td>
<td>AE/AWB_LOCK on</td>
<td>LOCKED</td>
<td>Values locked</td>
</tr>
<tr>
<td>LOCKED</td>
<td>AE/AWB_LOCK off</td>
<td>SEARCHING</td>
<td>Values not good after unlock</td>
</tr>
<tr>
<td>LOCKED</td>
<td>AE/AWB_LOCK off</td>
<td>CONVERGED</td>
<td>Values good after unlock</td>
</tr>
<tr>
<td>LOCKED</td>
<td>AE_LOCK off</td>
<td>FLASH_REQUIRED</td>
<td>Exposure good, but too dark</td>
</tr>
<tr>
<td>All AE states</td>
<td>PRECAPTURE_START</td>
<td>PRECAPTURE</td>
<td>Start precapture sequence</td>
</tr>
<tr>
<td>PRECAPTURE</td>
<td>Sequence done, AE_LOCK off</td>
<td>CONVERGED</td>
<td>Ready for high-quality capture</td>
</tr>
<tr>
<td>PRECAPTURE</td>
<td>Sequence done, AE_LOCK on</td>
<td>LOCKED</td>
<td>Ready for high-quality capture</td>
</tr>
</table>
<h2 id="manual-control">Enabling manual control</h2>
<p>Several controls are also involved in configuring the device 3A blocks to allow
for direct application control.</p>
<p>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:</p>
<table>
<tr>
<th>Control name</th>
<th>Unit</th>
<th>Notes</th>
</tr>
<tr>
<td>android.control.mode</td>
<td>enum: OFF, AUTO, USE_SCENE_MODE</td>
<td>High-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.</td>
</tr>
<tr>
<td>android.control.afMode</td>
<td>enum</td>
<td>OFF means manual control of lens focusing through android.lens.focusDistance.</td>
</tr>
<tr>
<td>android.control.aeMode</td>
<td>enum</td>
<td>OFF means manual control of exposure/gain/frame duration through android.sensor.exposureTime / .sensitivity / .frameDuration</td>
</tr>
<tr>
<td>android.control.awbMode</td>
<td>enum</td>
<td>OFF means manual control of white balance. </td>
</tr>
</table>