Home | History | Annotate | Download | only in camera
      1 page.title=3A Modes and State Transition
      2 @jd:body
      3 
      4 <!--
      5     Copyright 2013 The Android Open Source Project
      6 
      7     Licensed under the Apache License, Version 2.0 (the "License");
      8     you may not use this file except in compliance with the License.
      9     You may obtain a copy of the License at
     10 
     11         http://www.apache.org/licenses/LICENSE-2.0
     12 
     13     Unless required by applicable law or agreed to in writing, software
     14     distributed under the License is distributed on an "AS IS" BASIS,
     15     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16     See the License for the specific language governing permissions and
     17     limitations under the License.
     18 -->
     19 <div id="qv-wrapper">
     20   <div id="qv">
     21     <h2>In this document</h2>
     22     <ol id="auto-toc">
     23     </ol>
     24   </div>
     25 </div>
     26 
     27 <p>
     28   While the actual 3A algorithms are up to the HAL implementation, a high-level 
     29   state machine description is defined by the HAL interface to allow the HAL 
     30   device and the framework to communicate about the current state of 3A and 
     31   trigger 3A events.</p>
     32 <p>When the device is opened, all the individual 3A states must be STATE_INACTIVE. 
     33   Stream configuration does not reset 3A. For example, locked focus must be 
     34   maintained across the configure() call.</p>
     35 <p>Triggering a 3A action involves simply setting the relevant trigger entry in the 
     36   settings for the next request to indicate start of trigger. For example, the 
     37   trigger for starting an autofocus scan is setting the entry 
     38   ANDROID_CONTROL_AF_TRIGGER to ANDROID_CONTROL_AF_TRIGGER_START for one request; 
     39   and cancelling an autofocus scan is triggered by setting 
     40   ANDROID_CONTROL_AF_TRIGGER to ANDROID_CONTRL_AF_TRIGGER_CANCEL. Otherwise, the 
     41   entry will not exist or be set to ANDROID_CONTROL_AF_TRIGGER_IDLE. Each request 
     42   with a trigger entry set to a non-IDLE value will be treated as an independent 
     43   triggering event.</p>
     44 <p>At the top level, 3A is controlled by the ANDROID_CONTROL_MODE setting. It 
     45   selects between no 3A (ANDROID_CONTROL_MODE_OFF), normal AUTO mode 
     46   (ANDROID_CONTROL_MODE_AUTO), and using the scene mode setting 
     47   (ANDROID_CONTROL_USE_SCENE_MODE):</p>
     48 <ul>
     49   <li>In OFF mode, each of the individual Auto-focus(AF), auto-exposure (AE), and 
     50     auto-whitebalance (AWB) modes are effectively OFF, and none of the capture 
     51     controls may be overridden by the 3A routines.</li>
     52   <li>In AUTO mode, AF, AE, and AWB modes all run their own independent algorithms, 
     53     and have their own mode, state, and trigger metadata entries, as listed in the 
     54     next section.</li>
     55   <li>In USE_SCENE_MODE, the value of the ANDROID_CONTROL_SCENE_MODE entry must be 
     56     used to determine the behavior of 3A routines. In SCENE_MODEs other than 
     57     FACE_PRIORITY, the HAL must override the values of 
     58     ANDROID_CONTROL_AE/AWB/AF_MODE to be the mode it prefers for the selected 
     59     SCENE_MODE. For example, the HAL may prefer SCENE_MODE_NIGHT to use 
     60     CONTINUOUS_FOCUS AF mode. Any user selection of AE/AWB/AF_MODE when scene must 
     61     be ignored for these scene modes.</li>
     62   <li>For SCENE_MODE_FACE_PRIORITY, the AE/AWB/AFMODE controls work as in 
     63     ANDROID_CONTROL_MODE_AUTO, but the 3A routines must bias toward metering and 
     64     focusing on any detected faces in the scene.</li>
     65 </ul>
     66 <h2 id="auto-focus">Auto-focus settings and result entries</h2>
     67 <p>Main metadata entries:<br/>
     68   ANDROID_CONTROL_AF_MODE: Control for selecting the current autofocus mode. Set 
     69   by the framework in the request settings.<br/>
     70   AF_MODE_OFF: AF is disabled; the framework/app directly controls lens position.<br/>
     71   AF_MODE_AUTO: Single-sweep autofocus. No lens movement unless AF is triggered.<br/>
     72   AF_MODE_MACRO: Single-sweep up-close autofocus. No lens movement unless AF is 
     73   triggered.<br/>
     74   AF_MODE_CONTINUOUS_VIDEO: Smooth continuous focusing, for recording video. 
     75   Triggering immediately locks focus in current position. Canceling resumes 
     76   continuous focusing.<br/>
     77   AF_MODE_CONTINUOUS_PICTURE: Fast continuous focusing, for zero-shutter-lag still 
     78   capture. Triggering locks focus once currently active sweep concludes. Canceling 
     79   resumes continuous focusing.<br/>
     80   AF_MODE_EDOF: Advanced extended depth of field focusing. There is no autofocus 
     81   scan, so triggering one or canceling one has no effect. Images are focused 
     82   automatically by the HAL.<br/>
     83   ANDROID_CONTROL_AF_STATE: Dynamic metadata describing the current AF algorithm 
     84   state, reported by the HAL in the result metadata.<br/>
     85   AF_STATE_INACTIVE: No focusing has been done, or algorithm was reset. Lens is 
     86   not moving. Always the state for MODE_OFF or MODE_EDOF. When the device is 
     87   opened, it must start in this state.<br/>
     88   AF_STATE_PASSIVE_SCAN: A continuous focus algorithm is currently scanning for 
     89   good focus. The lens is moving.<br/>
     90   AF_STATE_PASSIVE_FOCUSED: A continuous focus algorithm believes it is well 
     91   focused. The lens is not moving. The HAL may spontaneously leave this state.<br/>
     92   AF_STATE_PASSIVE_UNFOCUSED: A continuous focus algorithm believes it is not well 
     93   focused. The lens is not moving. The HAL may spontaneously leave this state.<br/>
     94   AF_STATE_ACTIVE_SCAN: A scan triggered by the user is underway.<br/>
     95   AF_STATE_FOCUSED_LOCKED: The AF algorithm believes it is focused. The lens is 
     96   not moving.<br/>
     97   AF_STATE_NOT_FOCUSED_LOCKED: The AF algorithm has been unable to focus. The lens 
     98   is not moving.<br/>
     99   ANDROID_CONTROL_AFTRIGGER: Control for starting an autofocus scan, the meaning 
    100   of which depends on mode and state. Set by the framework in the request 
    101   settings.<br/>
    102   AF_TRIGGER_IDLE: No current trigger.<br/>
    103   AF_TRIGGER_START: Trigger start of AF scan. Effect depends on mode and state.<br/>
    104   AF_TRIGGER_CANCEL: Cancel current AF scan if any, and reset algorithm to 
    105   default.<br/>
    106   Additional metadata entries:<br/>
    107   ANDROID_CONTROL_AF_REGIONS: Control for selecting the regions of the field of 
    108   view (FOV) that should be used to determine good focus. This applies to all AF 
    109   modes that scan for focus. Set by the framework in the request settings.</p>
    110 <h2 id="auto-exposure">Auto-exposure settings and result entries</h2>
    111 <p>Main metadata entries:<br/>
    112   ANDROID_CONTROL_AE_MODE: Control for selecting the current auto-exposure mode. 
    113   Set by the framework in the request settings.<br/>
    114   AE_MODE_OFF: Autoexposure is disabled; the user controls exposure, gain, frame 
    115   duration, and flash.<br/>
    116   AE_MODE_ON: Standard autoexposure, with flash control disabled. User may set 
    117   flash to fire or to torch mode.<br/>
    118   AE_MODE_ON_AUTO_FLASH: Standard autoexposure, with flash on at HAL's discretion 
    119   for precapture and still capture. User control of flash disabled.<br/>
    120   AE_MODE_ON_ALWAYS_FLASH: Standard autoexposure, with flash always fired for 
    121   capture, and at HAL's discretion for precapture. User control of flash disabled.<br/>
    122   AE_MODE_ON_AUTO_FLASH_REDEYE: Standard autoexposure, with flash on at HAL's 
    123   discretion for precapture and still capture. Use a flash burst at end of 
    124   precapture sequence to reduce redeye in the final picture. User control of flash 
    125   disabled.<br/>
    126   ANDROID_CONTROL_AE_STATE: Dynamic metadata describing the current AE algorithm 
    127   state, reported by the HAL in the result metadata.<br/>
    128   AE_STATE_INACTIVE: Initial AE state after mode switch. When the device is 
    129   opened, it must start in this state.<br/>
    130   AE_STATE_SEARCHING: AE is not converged to a good value and is adjusting 
    131   exposure parameters.<br/>
    132   AE_STATE_CONVERGED: AE has found good exposure values for the current scene, and 
    133   the exposure parameters are not changing. HAL may spontaneously leave this state 
    134   to search for a better solution.<br/>
    135   AE_STATE_LOCKED: AE has been locked with the AE_LOCK control. Exposure values 
    136   are not changing.<br/>
    137   AE_STATE_FLASH_REQUIRED: The HAL has converged exposure but believes flash is 
    138   required for a sufficiently bright picture. Used for determining if a 
    139   zero-shutter-lag frame can be used.<br/>
    140   AE_STATE_PRECAPTURE: The HAL is in the middle of a precapture sequence. 
    141   Depending on AE mode, this mode may involve firing the flash for metering or a 
    142   burst of flash pulses for redeye reduction.<br/>
    143   ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER: Control for starting a metering sequence 
    144   before capturing a high-quality image. Set by the framework in the request 
    145   settings.<br/>
    146   PRECAPTURE_TRIGGER_IDLE: No current trigger.<br/>
    147   PRECAPTURE_TRIGGER_START: Start a precapture sequence. The HAL should use the 
    148   subsequent requests to measure good exposure/white balance for an upcoming 
    149   high-resolution capture.<br/>
    150   Additional metadata entries:<br/>
    151   ANDROID_CONTROL_AE_LOCK: Control for locking AE controls to their current 
    152   values.<br/>
    153   ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION: Control for adjusting AE algorithm 
    154   target brightness point.<br/>
    155   ANDROID_CONTROL_AE_TARGET_FPS_RANGE: Control for selecting the target frame rate 
    156   range for the AE algorithm. The AE routine cannot change the frame rate to be 
    157   outside these bounds.<br/>
    158   ANDROID_CONTROL_AE_REGIONS: Control for selecting the regions of the FOV that 
    159   should be used to determine good exposure levels. This applies to all AE modes 
    160   besides OFF.</p>
    161 <h2 id="auto-wb">Auto-whitebalance settings and result entries</h2>
    162 <p>Main metadata entries:<br/>
    163   ANDROID_CONTROL_AWB_MODE: Control for selecting the current white-balance mode.<br/>
    164   AWB_MODE_OFF: Auto-whitebalance is disabled. User controls color matrix.<br/>
    165   AWB_MODE_AUTO: Automatic white balance is enabled; 3A controls color transform, 
    166   possibly using more complex transforms than a simple matrix.<br/>
    167   AWB_MODE_INCANDESCENT: Fixed white balance settings good for indoor incandescent 
    168   (tungsten) lighting, roughly 2700K.<br/>
    169   AWB_MODE_FLUORESCENT: Fixed white balance settings good for fluorescent 
    170   lighting, roughly 5000K.<br/>
    171   AWB_MODE_WARM_FLUORESCENT: Fixed white balance settings good for fluorescent 
    172   lighting, roughly 3000K.<br/>
    173   AWB_MODE_DAYLIGHT: Fixed white balance settings good for daylight, roughly 
    174   5500K.<br/>
    175   AWB_MODE_CLOUDY_DAYLIGHT: Fixed white balance settings good for clouded 
    176   daylight, roughly 6500K.<br/>
    177   AWB_MODE_TWILIGHT: Fixed white balance settings good for near-sunset/sunrise, 
    178   roughly 15000K.<br/>
    179   AWB_MODE_SHADE: Fixed white balance settings good for areas indirectly lit by 
    180   the sun, roughly 7500K.<br/>
    181   ANDROID_CONTROL_AWB_STATE: Dynamic metadata describing the current AWB algorithm 
    182   state, reported by the HAL in the result metadata.<br/>
    183   AWB_STATE_INACTIVE: Initial AWB state after mode switch. When the device is 
    184   opened, it must start in this state.<br/>
    185   AWB_STATE_SEARCHING: AWB is not converged to a good value and is changing color 
    186   adjustment parameters.<br/>
    187   AWB_STATE_CONVERGED: AWB has found good color adjustment values for the current 
    188   scene, and the parameters are not changing. HAL may spontaneously leave this 
    189   state to search for a better solution.<br/>
    190   AWB_STATE_LOCKED: AWB has been locked with the AWB_LOCK control. Color 
    191   adjustment values are not changing.<br/>
    192   Additional metadata entries:<br/>
    193   ANDROID_CONTROL_AWB_LOCK: Control for locking AWB color adjustments to their 
    194   current values.<br/>
    195   ANDROID_CONTROL_AWB_REGIONS: Control for selecting the regions of the FOV that 
    196   should be used to determine good color balance. This applies only to 
    197   auto-whitebalance mode.</p>
    198 <h2 id="state-transition">General state machine transition notes</h2>
    199 <p>Switching between AF, AE, or AWB modes always resets the algorithm's state to 
    200   INACTIVE. Similarly, switching between CONTROL_MODE or CONTROL_SCENE_MODE if 
    201   CONTROL_MODE == USE_SCENE_MODE resets all the algorithm states to INACTIVE.<br/>
    202   The tables below are per-mode.</p>
    203 <h2 id="af-state">AF state machines</h2>
    204 <table>
    205   <tr>
    206     <td><strong>mode = AF_MODE_OFF or AF_MODE_EDOF</strong></td>
    207     <td></td>
    208     <td></td>
    209     <td></td>
    210   </tr>
    211   <tr>
    212     <th>State</th>
    213     <th>Transformation cause</th>
    214     <th>New state</th>
    215     <th>Notes</th>
    216   </tr>
    217   <tr>
    218     <td>INACTIVE</td>
    219     <td></td>
    220     <td></td>
    221     <td>AF is disabled</td>
    222   </tr>
    223   <tr>
    224     <td><strong>mode = AF_MODE_AUTO or AF_MODE_MACRO</strong></td>
    225     <td></td>
    226     <td></td>
    227     <td></td>
    228   </tr>
    229   <tr>
    230     <th>State</th>
    231     <th>Transformation cause</th>
    232     <th>New state</th>
    233     <th>Notes</th>
    234   </tr>
    235   <tr>
    236     <td>INACTIVE</td>
    237     <td>AF_TRIGGER</td>
    238     <td>ACTIVE_SCAN</td>
    239     <td>Start AF sweep
    240       Lens now moving</td>
    241   </tr>
    242   <tr>
    243     <td>ACTIVE_SCAN</td>
    244     <td>AF sweep done</td>
    245     <td>FOCUSED_LOCKED</td>
    246     <td>If AF successful
    247       Lens now locked</td>
    248   </tr>
    249   <tr>
    250     <td>ACTIVE_SCAN</td>
    251     <td>AF sweep done</td>
    252     <td>NOT_FOCUSED_LOCKED</td>
    253     <td>If AF successful
    254       Lens now locked</td>
    255   </tr>
    256   <tr>
    257     <td>ACTIVE_SCAN</td>
    258     <td>AF_CANCEL</td>
    259     <td>INACTIVE</td>
    260     <td>Cancel/reset AF
    261       Lens now locked</td>
    262   </tr>
    263   <tr>
    264     <td>FOCUSED_LOCKED</td>
    265     <td>AF_CANCEL</td>
    266     <td>INACTIVE</td>
    267     <td>Cancel/reset AF</td>
    268   </tr>
    269   <tr>
    270     <td>FOCUSED_LOCKED</td>
    271     <td>AF_TRIGGER</td>
    272     <td>ACTIVE_SCAN</td>
    273     <td>Start new sweep
    274       Lens now moving</td>
    275   </tr>
    276   <tr>
    277     <td>NOT_FOCUSED_LOCKED</td>
    278     <td>AF_CANCEL</td>
    279     <td>INACTIVE</td>
    280     <td>Cancel/reset AF</td>
    281   </tr>
    282   <tr>
    283     <td>NOT_FOCUSED_LOCKED</td>
    284     <td>AF_TRIGGER</td>
    285     <td>ACTIVE_SCAN</td>
    286     <td>Start new sweep
    287       Lens now moving</td>
    288   </tr>
    289   <tr>
    290     <td>All states</td>
    291     <td>mode change</td>
    292     <td>INACTIVE</td>
    293     <td></td>
    294   </tr>
    295   <tr>
    296     <td><strong>mode = AF_MODE_CONTINUOUS_VIDEO</strong></td>
    297     <td></td>
    298     <td></td>
    299     <td></td>
    300   </tr>
    301   <tr>
    302     <th>State</th>
    303     <th>Transformation cause</th>
    304     <th>New state</th>
    305     <th>Notes</th>
    306   </tr>
    307   <tr>
    308     <td>INACTIVE</td>
    309     <td>HAL initiates new scan</td>
    310     <td>PASSIVE_SCAN</td>
    311     <td>Start AF sweep
    312       Lens now moving</td>
    313   </tr>
    314   <tr>
    315     <td>INACTIVE</td>
    316     <td>AF_TRIGGER</td>
    317     <td>NOT_FOCUSED_LOCKED</td>
    318     <td>AF state query 
    319       Lens now locked</td>
    320   </tr>
    321   <tr>
    322     <td>PASSIVE_SCAN</td>
    323     <td>HAL completes current scan</td>
    324     <td>PASSIVE_FOCUSED</td>
    325     <td>End AF scan
    326       Lens now locked </td>
    327   </tr>
    328   <tr>
    329     <td>PASSIVE_SCAN</td>
    330     <td>AF_TRIGGER</td>
    331     <td>FOCUSED_LOCKED</td>
    332     <td>Immediate transformation
    333       if focus is good
    334       Lens now locked</td>
    335   </tr>
    336   <tr>
    337     <td>PASSIVE_SCAN</td>
    338     <td>AF_TRIGGER</td>
    339     <td>NOT_FOCUSED_LOCKED</td>
    340     <td>Immediate transformation
    341       if focus is bad
    342       Lens now locked</td>
    343   </tr>
    344   <tr>
    345     <td>PASSIVE_SCAN</td>
    346     <td>AF_CANCEL</td>
    347     <td>INACTIVE</td>
    348     <td>Reset lens position
    349       Lens now locked</td>
    350   </tr>
    351   <tr>
    352     <td>PASSIVE_FOCUSED</td>
    353     <td>HAL initiates new scan</td>
    354     <td>PASSIVE_SCAN</td>
    355     <td>Start AF scan
    356       Lens now moving</td>
    357   </tr>
    358   <tr>
    359     <td>PASSIVE_FOCUSED</td>
    360     <td>AF_TRIGGER</td>
    361     <td>FOCUSED_LOCKED</td>
    362     <td>Immediate transformation
    363       if focus is good
    364       Lens now locked</td>
    365   </tr>
    366   <tr>
    367     <td>PASSIVE_FOCUSED</td>
    368     <td>AF_TRIGGER</td>
    369     <td>NOT_FOCUSED_LOCKED</td>
    370     <td>Immediate transformation
    371       if focus is bad
    372       Lens now locked</td>
    373   </tr>
    374   <tr>
    375     <td>FOCUSED_LOCKED</td>
    376     <td>AF_TRIGGER</td>
    377     <td>FOCUSED_LOCKED</td>
    378     <td>No effect</td>
    379   </tr>
    380   <tr>
    381     <td>FOCUSED_LOCKED</td>
    382     <td>AF_CANCEL</td>
    383     <td>INACTIVE</td>
    384     <td>Restart AF scan</td>
    385   </tr>
    386   <tr>
    387     <td>NOT_FOCUSED_LOCKED</td>
    388     <td>AF_TRIGGER</td>
    389     <td>NOT_FOCUSED_LOCKED</td>
    390     <td>No effect</td>
    391   </tr>
    392   <tr>
    393     <td>NOT_FOCUSED_LOCKED</td>
    394     <td>AF_CANCEL</td>
    395     <td>INACTIVE</td>
    396     <td>Restart AF scan</td>
    397   </tr>
    398   <tr>
    399     <td><strong>mode = AF_MODE_CONTINUOUS_PICTURE</strong></td>
    400     <td></td>
    401     <td></td>
    402     <td></td>
    403   </tr>
    404   <tr>
    405     <th>State</th>
    406     <th>Transformation cause</th>
    407     <th>New state</th>
    408     <th>Notes</th>
    409   </tr>
    410   <tr>
    411     <td>INACTIVE</td>
    412     <td>HAL initiates new scan</td>
    413     <td>PASSIVE_SCAN</td>
    414     <td>Start AF scan
    415       Lens now moving</td>
    416   </tr>
    417   <tr>
    418     <td>INACTIVE</td>
    419     <td>AF_TRIGGER</td>
    420     <td>NOT_FOCUSED_LOCKED</td>
    421     <td>AF state query
    422       Lens now locked</td>
    423   </tr>
    424   <tr>
    425     <td>PASSIVE_SCAN</td>
    426     <td>HAL completes current scan</td>
    427     <td>PASSIVE_FOCUSED</td>
    428     <td>End AF scan
    429       Lens now locked</td>
    430   </tr>
    431   <tr>
    432     <td>PASSIVE_SCAN</td>
    433     <td>AF_TRIGGER</td>
    434     <td>FOCUSED_LOCKED</td>
    435     <td>Eventual transformation once focus good
    436       Lens now locked</td>
    437   </tr>
    438   <tr>
    439     <td>PASSIVE_SCAN</td>
    440     <td>AF_TRIGGER</td>
    441     <td>NOT_FOCUSED_LOCKED</td>
    442     <td>Eventual transformation if cannot focus
    443       Lens now locked</td>
    444   </tr>
    445   <tr>
    446     <td>PASSIVE_SCAN</td>
    447     <td>AF_CANCEL</td>
    448     <td>INACTIVE</td>
    449     <td>Reset lens position
    450       Lens now locked</td>
    451   </tr>
    452   <tr>
    453     <td>PASSIVE_FOCUSED</td>
    454     <td>HAL initiates new scan</td>
    455     <td>PASSIVE_SCAN</td>
    456     <td>Start AF scan
    457       Lens now moving</td>
    458   </tr>
    459   <tr>
    460     <td>PASSIVE_FOCUSED</td>
    461     <td>AF_TRIGGER</td>
    462     <td>FOCUSED_LOCKED</td>
    463     <td>Immediate transformation if focus is good
    464       Lens now locked</td>
    465   </tr>
    466   <tr>
    467     <td>PASSIVE_FOCUSED</td>
    468     <td>AF_TRIGGER</td>
    469     <td>NOT_FOCUSED_LOCKED</td>
    470     <td>Immediate transformation if focus is bad
    471       Lens now locked</td>
    472   </tr>
    473   <tr>
    474     <td>FOCUSED_LOCKED</td>
    475     <td>AF_TRIGGER</td>
    476     <td>FOCUSED_LOCKED</td>
    477     <td>No effect</td>
    478   </tr>
    479   <tr>
    480     <td>FOCUSED_LOCKED</td>
    481     <td>AF_CANCEL</td>
    482     <td>INACTIVE</td>
    483     <td>Restart AF scan</td>
    484   </tr>
    485   <tr>
    486     <td>NOT_FOCUSED_LOCKED</td>
    487     <td>AF_TRIGGER</td>
    488     <td>NOT_FOCUSED_LOCKED</td>
    489     <td>No effect</td>
    490   </tr>
    491   <tr>
    492     <td>NOT_FOCUSED_LOCKED</td>
    493     <td>AF_CANCEL</td>
    494     <td>INACTIVE</td>
    495     <td>Restart AF scan</td>
    496   </tr>
    497 </table>
    498 <h2 id="ae-wb">AE and AWB state machines</h2>
    499 <p>The AE and AWB state machines are mostly identical. AE has additional 
    500   FLASH_REQUIRED and PRECAPTURE states. So rows below that refer to those two 
    501   states should be ignored for the AWB state machine.</p>
    502 <table>
    503   <tr>
    504     <td><strong>mode = AE_MODE_OFF / AWB mode not AUTO</strong></td>
    505     <td></td>
    506     <td></td>
    507     <td></td>
    508   </tr>
    509   <tr>
    510     <th>State</th>
    511     <th>Transformation cause</th>
    512     <th>New state</th>
    513     <th>Notes</th>
    514   </tr>
    515   <tr>
    516     <td>INACTIVE</td>
    517     <td></td>
    518     <td></td>
    519     <td>AE/AWB disabled</td>
    520   </tr>
    521   <tr>
    522     <td><strong>mode = AE_MODE_ON_* / AWB_MODE_AUTO</strong></td>
    523     <td></td>
    524     <td></td>
    525     <td></td>
    526   </tr>
    527   <tr>
    528     <th>State</th>
    529     <th>Transformation cause</th>
    530     <th>New state</th>
    531     <th>Notes</th>
    532   </tr>
    533   <tr>
    534     <td>INACTIVE</td>
    535     <td>HAL initiates AE/AWB scan</td>
    536     <td>SEARCHING</td>
    537     <td></td>
    538   </tr>
    539   <tr>
    540     <td>INACTIVE</td>
    541     <td>AE/AWB_LOCK on</td>
    542     <td>LOCKED</td>
    543     <td>Values locked</td>
    544   </tr>
    545   <tr>
    546     <td>SEARCHING</td>
    547     <td>HAL finishes AE/AWB scan</td>
    548     <td>CONVERGED</td>
    549     <td>Good values, not changing</td>
    550   </tr>
    551   <tr>
    552     <td>SEARCHING</td>
    553     <td>HAL finishes AE scan</td>
    554     <td>FLASH_REQUIRED</td>
    555     <td>Converged but too dark without flash</td>
    556   </tr>
    557   <tr>
    558     <td>SEARCHING</td>
    559     <td>AE/AWB_LOCK on</td>
    560     <td>LOCKED</td>
    561     <td>Values locked</td>
    562   </tr>
    563   <tr>
    564     <td>CONVERGED</td>
    565     <td>HAL initiates AE/AWB scan</td>
    566     <td>SEARCHING</td>
    567     <td>Values locked</td>
    568   </tr>
    569   <tr>
    570     <td>CONVERGED</td>
    571     <td>AE/AWB_LOCK on</td>
    572     <td>LOCKED</td>
    573     <td>Values locked</td>
    574   </tr>
    575   <tr>
    576     <td>FLASH_REQUIRED</td>
    577     <td>HAL initiates AE/AWB scan</td>
    578     <td>SEARCHING</td>
    579     <td>Values locked</td>
    580   </tr>
    581   <tr>
    582     <td>FLASH_REQUIRED</td>
    583     <td>AE/AWB_LOCK on</td>
    584     <td>LOCKED</td>
    585     <td>Values locked</td>
    586   </tr>
    587   <tr>
    588     <td>LOCKED</td>
    589     <td>AE/AWB_LOCK off</td>
    590     <td>SEARCHING</td>
    591     <td>Values not good after unlock</td>
    592   </tr>
    593   <tr>
    594     <td>LOCKED</td>
    595     <td>AE/AWB_LOCK off</td>
    596     <td>CONVERGED</td>
    597     <td>Values good after unlock</td>
    598   </tr>
    599   <tr>
    600     <td>LOCKED</td>
    601     <td>AE_LOCK off</td>
    602     <td>FLASH_REQUIRED</td>
    603     <td>Exposure good, but too dark</td>
    604   </tr>
    605   <tr>
    606     <td>All AE states</td>
    607     <td>PRECAPTURE_START</td>
    608     <td>PRECAPTURE</td>
    609     <td>Start precapture sequence</td>
    610   </tr>
    611   <tr>
    612     <td>PRECAPTURE</td>
    613     <td>Sequence done, AE_LOCK off</td>
    614     <td>CONVERGED</td>
    615     <td>Ready for high-quality capture</td>
    616   </tr>
    617   <tr>
    618     <td>PRECAPTURE</td>
    619     <td>Sequence done, AE_LOCK on</td>
    620     <td>LOCKED</td>
    621     <td>Ready for high-quality capture</td>
    622   </tr>
    623 </table>
    624 <h2 id="manual-control">Enabling manual control</h2>
    625 <p>Several controls are also involved in configuring the device 3A blocks to allow 
    626   for direct application control.</p>
    627 <p>The HAL model for 3A control is that for each request, the HAL inspects the 
    628   state of the 3A control fields. If any 3A routine is enabled, then that routine 
    629   overrides the control variables that relate to that routine, and these override 
    630   values are then available in the result metadata for that capture.  So for 
    631   example, if auto-exposure is enabled in a request, the HAL should overwrite the 
    632   exposure, gain, and frame duration fields (and potentially the flash fields, 
    633   depending on AE mode) of the request. The list of relevant controls is:</p>
    634 <table>
    635   <tr>
    636     <th>Control name</th>
    637     <th>Unit</th>
    638     <th>Notes</th>
    639   </tr>
    640   <tr>
    641     <td>android.control.mode</td>
    642     <td>enum: OFF, AUTO, USE_SCENE_MODE</td>
    643     <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.
    644       When set to AUTO, the individual algorithm controls in android.control.* are in effect, such as android.control.afMode.
    645       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>
    646   </tr>
    647   <tr>
    648     <td>android.control.afMode</td>
    649     <td>enum</td>
    650     <td>OFF means manual control of lens focusing through android.lens.focusDistance.</td>
    651   </tr>
    652   <tr>
    653     <td>android.control.aeMode</td>
    654     <td>enum</td>
    655     <td>OFF means manual control of exposure/gain/frame duration through android.sensor.exposureTime / .sensitivity / .frameDuration</td>
    656   </tr>
    657   <tr>
    658     <td>android.control.awbMode</td>
    659     <td>enum</td>
    660     <td>OFF means manual control of white balance. </td>
    661   </tr>
    662 </table>
    663