<li>
<span class="entry_type_enum_name">INACTIVE</span>
<span class="entry_type_enum_notes"><p>AE is off or recently reset.<wbr/> When a camera device is opened,<wbr/> it starts in
-this state.<wbr/></p></span>
+this state.<wbr/> This is a transient state,<wbr/> the camera device may skip reporting
+this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEARCHING</span>
<span class="entry_type_enum_notes"><p>AE doesn't yet have a good set of control values
-for the current scene.<wbr/></p></span>
+for the current scene.<wbr/> This is a transient state,<wbr/> the camera device may skip
+reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONVERGED</span>
(through the <a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> START),<wbr/>
and is currently executing it.<wbr/> Once PRECAPTURE
completes,<wbr/> AE will transition to CONVERGED or
-FLASH_<wbr/>REQUIRED as appropriate.<wbr/></p></span>
+FLASH_<wbr/>REQUIRED as appropriate.<wbr/> This is a transient state,<wbr/> the
+camera device may skip reporting this state in capture result.<wbr/></p></span>
</li>
</ul>
</tr>
</tbody>
</table>
+<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
+without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
+can be skipped in that manner is called a transient state.<wbr/></p>
+<p>For example,<wbr/> for above AE modes (AE_<wbr/>MODE_<wbr/>ON_<wbr/>*),<wbr/> in addition to the state transitions
+listed in above table,<wbr/> it is also legal for the camera device to skip one or more
+transient states between two results.<wbr/> See below table for examples:</p>
+<table>
+<thead>
+<tr>
+<th align="center">State</th>
+<th align="center">Transition Cause</th>
+<th align="center">New State</th>
+<th align="center">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">INACTIVE</td>
+<td align="center">Camera device finished AE scan</td>
+<td align="center">CONVERGED</td>
+<td align="center">Values are already good,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
+<tr>
+<td align="center">Any state</td>
+<td align="center"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is START,<wbr/> sequence done</td>
+<td align="center">FLASH_<wbr/>REQUIRED</td>
+<td align="center">Converged but too dark w/<wbr/>o flash after a precapture sequence,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
+<tr>
+<td align="center">Any state</td>
+<td align="center"><a href="#controls_android.control.aePrecaptureTrigger">android.<wbr/>control.<wbr/>ae<wbr/>Precapture<wbr/>Trigger</a> is START,<wbr/> sequence done</td>
+<td align="center">CONVERGED</td>
+<td align="center">Converged after a precapture sequence,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
+<tr>
+<td align="center">CONVERGED</td>
+<td align="center">Camera device finished AE scan</td>
+<td align="center">FLASH_<wbr/>REQUIRED</td>
+<td align="center">Converged but too dark w/<wbr/>o flash after a new scan,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
+<tr>
+<td align="center">FLASH_<wbr/>REQUIRED</td>
+<td align="center">Camera device finished AE scan</td>
+<td align="center">CONVERGED</td>
+<td align="center">Converged after a new scan,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
+</tbody>
+</table>
</td>
</tr>
<span class="entry_type_enum_name">INACTIVE</span>
<span class="entry_type_enum_notes"><p>AF off or has not yet tried to scan/<wbr/>been asked
to scan.<wbr/> When a camera device is opened,<wbr/> it starts in
-this state.<wbr/></p></span>
+this state.<wbr/> This is a transient state,<wbr/> the camera device may
+skip reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_SCAN</span>
<span class="entry_type_enum_notes"><p>if CONTINUOUS_<wbr/>* modes are supported.<wbr/> AF is
currently doing an AF scan initiated by a continuous
-autofocus mode</p></span>
+autofocus mode.<wbr/> This is a transient state,<wbr/> the camera device may
+skip reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_FOCUSED</span>
<span class="entry_type_enum_notes"><p>if CONTINUOUS_<wbr/>* modes are supported.<wbr/> AF currently
believes it is in focus,<wbr/> but may restart scanning at
-any time.<wbr/></p></span>
+any time.<wbr/> This is a transient state,<wbr/> the camera device may skip
+reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">ACTIVE_SCAN</span>
<span class="entry_type_enum_notes"><p>if AUTO or MACRO modes are supported.<wbr/> AF is doing
-an AF scan because it was triggered by AF
-trigger</p></span>
+an AF scan because it was triggered by AF trigger.<wbr/> This is a
+transient state,<wbr/> the camera device may skip reporting
+this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">FOCUSED_LOCKED</span>
<span class="entry_type_enum_notes"><p>if any AF mode besides OFF is supported.<wbr/> AF
believes it is focused correctly and is
-locked</p></span>
+locked.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">NOT_FOCUSED_LOCKED</span>
<span class="entry_type_enum_notes"><p>if any AF mode besides OFF is supported.<wbr/> AF has
failed to focus successfully and is
-locked</p></span>
+locked.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">PASSIVE_UNFOCUSED</span>
<span class="entry_type_enum_notes"><p>if CONTINUOUS_<wbr/>* modes are supported.<wbr/> AF finished a
passive scan without finding focus,<wbr/> and may restart
-scanning at any time.<wbr/></p></span>
+scanning at any time.<wbr/> This is a transient state,<wbr/> the camera
+device may skip reporting this state in capture result.<wbr/></p></span>
</li>
</ul>
</td> <!-- entry_type -->
<td class="entry_description">
- <p>Current state of AF algorithm</p>
+ <p>Current state of AF algorithm.<wbr/></p>
</td>
<td class="entry_units">
</tr>
</tbody>
</table>
+<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
+without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
+can be skipped in that manner is called a transient state.<wbr/></p>
+<p>For example,<wbr/> for these AF modes (AF_<wbr/>MODE_<wbr/>AUTO and AF_<wbr/>MODE_<wbr/>MACRO),<wbr/> in addition to the
+state transitions listed in above table,<wbr/> it is also legal for the camera device to skip
+one or more transient states between two results.<wbr/> See below table for examples:</p>
+<table>
+<thead>
+<tr>
+<th align="center">State</th>
+<th align="center">Transition Cause</th>
+<th align="center">New State</th>
+<th align="center">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">INACTIVE</td>
+<td align="center">AF_<wbr/>TRIGGER</td>
+<td align="center">FOCUSED_<wbr/>LOCKED</td>
+<td align="center">Focus is already good or good after a scan,<wbr/> lens is now locked.<wbr/></td>
+</tr>
+<tr>
+<td align="center">INACTIVE</td>
+<td align="center">AF_<wbr/>TRIGGER</td>
+<td align="center">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
+<td align="center">Focus failed after a scan,<wbr/> lens is now locked.<wbr/></td>
+</tr>
+<tr>
+<td align="center">FOCUSED_<wbr/>LOCKED</td>
+<td align="center">AF_<wbr/>TRIGGER</td>
+<td align="center">FOCUSED_<wbr/>LOCKED</td>
+<td align="center">Focus is already good or good after a scan,<wbr/> lens is now locked.<wbr/></td>
+</tr>
+<tr>
+<td align="center">NOT_<wbr/>FOCUSED_<wbr/>LOCKED</td>
+<td align="center">AF_<wbr/>TRIGGER</td>
+<td align="center">FOCUSED_<wbr/>LOCKED</td>
+<td align="center">Focus is good after a scan,<wbr/> lens is not locked.<wbr/></td>
+</tr>
+</tbody>
+</table>
<p>When <a href="#controls_android.control.afMode">android.<wbr/>control.<wbr/>af<wbr/>Mode</a> is AF_<wbr/>MODE_<wbr/>CONTINUOUS_<wbr/>VIDEO:</p>
<table>
<thead>
</tr>
</tbody>
</table>
+<p>When switch between AF_<wbr/>MODE_<wbr/>CONTINUOUS_<wbr/>* (CAF modes) and AF_<wbr/>MODE_<wbr/>AUTO/<wbr/>AF_<wbr/>MODE_<wbr/>MACRO
+(AUTO modes),<wbr/> the initial INACTIVE or PASSIVE_<wbr/>SCAN states may be skipped by the
+camera device.<wbr/> When a trigger is included in a mode switch request,<wbr/> the trigger
+will be evaluated in the context of the new mode in the request.<wbr/>
+See below table for examples:</p>
+<table>
+<thead>
+<tr>
+<th align="center">State</th>
+<th align="center">Transition Cause</th>
+<th align="center">New State</th>
+<th align="center">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">any state</td>
+<td align="center">CAF-->AUTO mode switch</td>
+<td align="center">INACTIVE</td>
+<td align="center">Mode switch without trigger,<wbr/> initial state must be INACTIVE</td>
+</tr>
+<tr>
+<td align="center">any state</td>
+<td align="center">CAF-->AUTO mode switch with AF_<wbr/>TRIGGER</td>
+<td align="center">trigger-reachable states from INACTIVE</td>
+<td align="center">Mode switch with trigger,<wbr/> INACTIVE is skipped</td>
+</tr>
+<tr>
+<td align="center">any state</td>
+<td align="center">AUTO-->CAF mode switch</td>
+<td align="center">passively reachable states from INACTIVE</td>
+<td align="center">Mode switch without trigger,<wbr/> passive transient state is skipped</td>
+</tr>
+</tbody>
+</table>
</td>
</tr>
<li>
<span class="entry_type_enum_name">INACTIVE</span>
<span class="entry_type_enum_notes"><p>AWB is not in auto mode.<wbr/> When a camera device is opened,<wbr/> it
-starts in this state.<wbr/></p></span>
+starts in this state.<wbr/> This is a transient state,<wbr/> the camera device may
+skip reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">SEARCHING</span>
<span class="entry_type_enum_notes"><p>AWB doesn't yet have a good set of control
-values for the current scene.<wbr/></p></span>
+values for the current scene.<wbr/> This is a transient state,<wbr/> the camera device
+may skip reporting this state in capture result.<wbr/></p></span>
</li>
<li>
<span class="entry_type_enum_name">CONVERGED</span>
<td align="center">SEARCHING</td>
<td align="center">Values not good after unlock</td>
</tr>
+</tbody>
+</table>
+<p>For the above table,<wbr/> the camera device may skip reporting any state changes that happen
+without application intervention (i.<wbr/>e.<wbr/> mode switch,<wbr/> trigger,<wbr/> locking).<wbr/> Any state that
+can be skipped in that manner is called a transient state.<wbr/></p>
+<p>For example,<wbr/> for this AWB mode (AWB_<wbr/>MODE_<wbr/>AUTO),<wbr/> in addition to the state transitions
+listed in above table,<wbr/> it is also legal for the camera device to skip one or more
+transient states between two results.<wbr/> See below table for examples:</p>
+<table>
+<thead>
+<tr>
+<th align="center">State</th>
+<th align="center">Transition Cause</th>
+<th align="center">New State</th>
+<th align="center">Notes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">INACTIVE</td>
+<td align="center">Camera device finished AWB scan</td>
+<td align="center">CONVERGED</td>
+<td align="center">Values are already good,<wbr/> transient states are skipped by camera device.<wbr/></td>
+</tr>
<tr>
<td align="center">LOCKED</td>
<td align="center"><a href="#controls_android.control.awbLock">android.<wbr/>control.<wbr/>awb<wbr/>Lock</a> is OFF</td>
<td align="center">CONVERGED</td>
-<td align="center">Values good after unlock</td>
+<td align="center">Values good after unlock,<wbr/> transient states are skipped by camera device.<wbr/></td>
</tr>
</tbody>
</table>
<enum>
<value>INACTIVE
<notes>AE is off or recently reset. When a camera device is opened, it starts in
- this state.</notes></value>
+ this state. This is a transient state, the camera device may skip reporting
+ this state in capture result.</notes></value>
<value>SEARCHING
<notes>AE doesn't yet have a good set of control values
- for the current scene.</notes></value>
+ for the current scene. This is a transient state, the camera device may skip
+ reporting this state in capture result.</notes></value>
<value>CONVERGED
<notes>AE has a good set of control values for the
current scene.</notes></value>
(through the android.control.aePrecaptureTrigger START),
and is currently executing it. Once PRECAPTURE
completes, AE will transition to CONVERGED or
- FLASH_REQUIRED as appropriate.</notes></value>
+ FLASH_REQUIRED as appropriate. This is a transient state, the
+ camera device may skip reporting this state in capture result.</notes></value>
</enum>
<description>Current state of AE algorithm</description>
<details>Switching between or enabling AE modes (android.control.aeMode) always
PRECAPTURE | Sequence done. android.control.aeLock is OFF | CONVERGED | Ready for high-quality capture
PRECAPTURE | Sequence done. android.control.aeLock is ON | LOCKED | Ready for high-quality capture
Any state | android.control.aePrecaptureTrigger is START | PRECAPTURE | Start AE precapture metering sequence
+
+ For the above table, the camera device may skip reporting any state changes that happen
+ without application intervention (i.e. mode switch, trigger, locking). Any state that
+ can be skipped in that manner is called a transient state.
+
+ For example, for above AE modes (AE_MODE_ON_*), in addition to the state transitions
+ listed in above table, it is also legal for the camera device to skip one or more
+ transient states between two results. See below table for examples:
+
+ State | Transition Cause | New State | Notes
+ :-------------:|:-----------------------------------------------------------:|:--------------:|:-----------------:
+ INACTIVE | Camera device finished AE scan | CONVERGED | Values are already good, transient states are skipped by camera device.
+ Any state | android.control.aePrecaptureTrigger is START, sequence done | FLASH_REQUIRED | Converged but too dark w/o flash after a precapture sequence, transient states are skipped by camera device.
+ Any state | android.control.aePrecaptureTrigger is START, sequence done | CONVERGED | Converged after a precapture sequence, transient states are skipped by camera device.
+ CONVERGED | Camera device finished AE scan | FLASH_REQUIRED | Converged but too dark w/o flash after a new scan, transient states are skipped by camera device.
+ FLASH_REQUIRED | Camera device finished AE scan | CONVERGED | Converged after a new scan, transient states are skipped by camera device.
</details>
</entry>
<clone entry="android.control.afMode" kind="controls">
<value>INACTIVE
<notes>AF off or has not yet tried to scan/been asked
to scan. When a camera device is opened, it starts in
- this state.</notes></value>
+ this state. This is a transient state, the camera device may
+ skip reporting this state in capture result.</notes></value>
<value>PASSIVE_SCAN
<notes>if CONTINUOUS_* modes are supported. AF is
currently doing an AF scan initiated by a continuous
- autofocus mode</notes></value>
+ autofocus mode. This is a transient state, the camera device may
+ skip reporting this state in capture result.</notes></value>
<value>PASSIVE_FOCUSED
<notes>if CONTINUOUS_* modes are supported. AF currently
believes it is in focus, but may restart scanning at
- any time.</notes></value>
+ any time. This is a transient state, the camera device may skip
+ reporting this state in capture result.</notes></value>
<value>ACTIVE_SCAN
<notes>if AUTO or MACRO modes are supported. AF is doing
- an AF scan because it was triggered by AF
- trigger</notes></value>
+ an AF scan because it was triggered by AF trigger. This is a
+ transient state, the camera device may skip reporting
+ this state in capture result.</notes></value>
<value>FOCUSED_LOCKED
<notes>if any AF mode besides OFF is supported. AF
believes it is focused correctly and is
- locked</notes></value>
+ locked.</notes></value>
<value>NOT_FOCUSED_LOCKED
<notes>if any AF mode besides OFF is supported. AF has
failed to focus successfully and is
- locked</notes></value>
+ locked.</notes></value>
<value>PASSIVE_UNFOCUSED
<notes>if CONTINUOUS_* modes are supported. AF finished a
passive scan without finding focus, and may restart
- scanning at any time.</notes></value>
+ scanning at any time. This is a transient state, the camera
+ device may skip reporting this state in capture result.</notes></value>
</enum>
- <description>Current state of AF algorithm</description>
+ <description>Current state of AF algorithm.</description>
<details>
Switching between or enabling AF modes (android.control.afMode) always
resets the AF state to INACTIVE. Similarly, switching between android.control.mode,
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Start new sweep, Lens now moving
Any state | Mode change | INACTIVE |
+ For the above table, the camera device may skip reporting any state changes that happen
+ without application intervention (i.e. mode switch, trigger, locking). Any state that
+ can be skipped in that manner is called a transient state.
+
+ For example, for these AF modes (AF_MODE_AUTO and AF_MODE_MACRO), in addition to the
+ state transitions listed in above table, it is also legal for the camera device to skip
+ one or more transient states between two results. See below table for examples:
+
+ State | Transition Cause | New State | Notes
+ :-----------------:|:----------------:|:------------------:|:--------------:
+ INACTIVE | AF_TRIGGER | FOCUSED_LOCKED | Focus is already good or good after a scan, lens is now locked.
+ INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | Focus failed after a scan, lens is now locked.
+ FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Focus is already good or good after a scan, lens is now locked.
+ NOT_FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Focus is good after a scan, lens is not locked.
+
+
When android.control.afMode is AF_MODE_CONTINUOUS_VIDEO:
State | Transition Cause | New State | Notes
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | No effect
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan
+
+ When switch between AF_MODE_CONTINUOUS_* (CAF modes) and AF_MODE_AUTO/AF_MODE_MACRO
+ (AUTO modes), the initial INACTIVE or PASSIVE_SCAN states may be skipped by the
+ camera device. When a trigger is included in a mode switch request, the trigger
+ will be evaluated in the context of the new mode in the request.
+ See below table for examples:
+
+ State | Transition Cause | New State | Notes
+ :-----------:|:--------------------------------------:|:----------------------------------------:|:--------------:
+ any state | CAF-->AUTO mode switch | INACTIVE | Mode switch without trigger, initial state must be INACTIVE
+ any state | CAF-->AUTO mode switch with AF_TRIGGER | trigger-reachable states from INACTIVE | Mode switch with trigger, INACTIVE is skipped
+ any state | AUTO-->CAF mode switch | passively reachable states from INACTIVE | Mode switch without trigger, passive transient state is skipped
</details>
</entry>
<entry name="afTriggerId" type="int32" visibility="hidden">
<enum>
<value>INACTIVE
<notes>AWB is not in auto mode. When a camera device is opened, it
- starts in this state.</notes></value>
+ starts in this state. This is a transient state, the camera device may
+ skip reporting this state in capture result.</notes></value>
<value>SEARCHING
<notes>AWB doesn't yet have a good set of control
- values for the current scene.</notes></value>
+ values for the current scene. This is a transient state, the camera device
+ may skip reporting this state in capture result.</notes></value>
<value>CONVERGED
<notes>AWB has a good set of control values for the
current scene.</notes></value>
CONVERGED | Camera device initiates AWB scan | SEARCHING | Values changing
CONVERGED | android.control.awbLock is ON | LOCKED | Values locked
LOCKED | android.control.awbLock is OFF | SEARCHING | Values not good after unlock
- LOCKED | android.control.awbLock is OFF | CONVERGED | Values good after unlock
+
+ For the above table, the camera device may skip reporting any state changes that happen
+ without application intervention (i.e. mode switch, trigger, locking). Any state that
+ can be skipped in that manner is called a transient state.
+
+ For example, for this AWB mode (AWB_MODE_AUTO), in addition to the state transitions
+ listed in above table, it is also legal for the camera device to skip one or more
+ transient states between two results. See below table for examples:
+
+ State | Transition Cause | New State | Notes
+ :-------------:|:--------------------------------:|:-------------:|:-----------------:
+ INACTIVE | Camera device finished AWB scan | CONVERGED | Values are already good, transient states are skipped by camera device.
+ LOCKED | android.control.awbLock is OFF | CONVERGED | Values good after unlock, transient states are skipped by camera device.
</details>
</entry>
<clone entry="android.control.mode" kind="controls">