metadata_properties.xml revision 59ccb1e070e988e93e5191a4bf5d0d7e5331e463
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (C) 2012 The Android Open Source Project
3
4     Licensed under the Apache License, Version 2.0 (the "License");
5     you may not use this file except in compliance with the License.
6     You may obtain a copy of the License at
7
8          http://www.apache.org/licenses/LICENSE-2.0
9
10     Unless required by applicable law or agreed to in writing, software
11     distributed under the License is distributed on an "AS IS" BASIS,
12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13     See the License for the specific language governing permissions and
14     limitations under the License.
15-->
16<metadata xmlns="http://schemas.android.com/service/camera/metadata/"
17xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
18xsi:schemaLocation="http://schemas.android.com/service/camera/metadata/ metadata_properties.xsd">
19
20  <tags>
21    <tag id="AWB">
22        Needed for auto white balance
23    </tag>
24    <tag id="BC">
25        Needed for backwards compatibility with old Java API
26    </tag>
27    <tag id="V1">
28        New features for first camera 2 release (API1)
29    </tag>
30    <tag id="ADV">
31      <!-- TODO: fill the tag description -->
32    </tag>
33    <tag id="DNG">
34        Needed for DNG file support
35    </tag>
36    <tag id="EXIF">
37      <!-- TODO: fill the tag description -->
38    </tag>
39    <tag id="HAL2">
40        Tag only used by camera device HAL 2.x
41    </tag>
42  </tags>
43
44  <types>
45    <typedef name="rectangle">
46      <language name="java">android.graphics.Rect</language>
47    </typedef>
48    <typedef name="size">
49      <language name="java">android.hardware.camera2.Size</language>
50    </typedef>
51    <typedef name="string">
52      <language name="java">String</language>
53    </typedef>
54    <typedef name="boolean">
55      <language name="java">boolean</language>
56    </typedef>
57    <typedef name="imageFormat">
58      <language name="java">int</language>
59    </typedef>
60  </types>
61
62  <namespace name="android">
63    <section name="colorCorrection">
64      <controls>
65        <entry name="mode" type="byte" visibility="public" enum="true">
66          <enum>
67            <value>TRANSFORM_MATRIX
68              <notes>Use the android.colorCorrection.transform matrix
69              and android.colorCorrection.gains to do color conversion</notes>
70            </value>
71            <value>FAST
72              <notes>Must not slow down frame rate relative to raw
73              bayer output</notes>
74            </value>
75            <value>HIGH_QUALITY
76              <notes>Frame rate may be reduced by high
77              quality</notes>
78            </value>
79          </enum>
80
81          <notes>When android.control.awbMode is not OFF, TRANSFORM_MATRIX
82          should be ignored.</notes>
83        </entry>
84        <entry name="transform" type="rational" visibility="public"
85               type_notes="3x3 rational matrix in row-major order"
86               container="array">
87          <array>
88            <size>3</size>
89            <size>3</size>
90          </array>
91          <description>A color transform matrix to use to transform
92          from sensor RGB color space to output linear sRGB color space
93          </description>
94          <range>Output values are expected to be in the range
95          (0,1)</range>
96          <notes>This matrix is either set by HAL when the request
97          android.colorCorrection.mode is not TRANSFORM_MATRIX, or
98          directly by the application in the request when the
99          android.colorCorrection.mode is TRANSFORM_MATRIX.
100
101          In the latter case, the HAL may round the matrix to account
102          for precision issues; the final rounded matrix should be
103          reported back in this matrix result metadata.</notes>
104        </entry>
105        <entry name="gains" type="float" visibility="public"
106               type_notes="A 1D array of floats for 4 color channel gains"
107               container="array">
108          <array>
109            <size>4</size>
110          </array>
111          <description>Gains applying to Bayer color channels for
112          white-balance</description>
113          <notes>The 4-channel white-balance gains are defined in
114          the order of [R G_even G_odd B], where G_even is the gain
115          for green pixels on even rows of the output, and G_odd
116          is the gain for greenpixels on the odd rows. if a HAL
117          does not support a separate gain for even/odd green channels,
118          it should use the G_even value,and write G_odd equal to
119          G_even in the output result metadata.
120
121          This array is either set by HAL when the request
122          android.colorCorrection.mode is not TRANSFORM_MATRIX, or
123          directly by the application in the request when the
124          android.colorCorrection.mode is TRANSFORM_MATRIX.
125
126          The ouput should be the gains actually applied by the HAL to
127          the current frame.</notes>
128        </entry>
129      </controls>
130      <dynamic>
131        <clone entry="android.colorCorrection.transform" kind="controls">
132        </clone>
133        <clone entry="android.colorCorrection.gains" kind="controls">
134        </clone>
135      </dynamic>
136    </section>
137    <section name="control">
138      <controls>
139        <entry name="aeAntibandingMode" type="byte" visibility="public"
140               enum="true" >
141          <enum>
142            <value>OFF</value>
143            <value>50HZ</value>
144            <value>60HZ</value>
145            <value>AUTO</value>
146          </enum>
147          <description>Enum for controlling
148          antibanding</description>
149          <range>
150          android.control.aeAvailableAntibandingModes</range>
151        </entry>
152        <entry name="aeExposureCompensation" type="int32" visibility="public">
153          <description>Adjustment to AE target image
154          brightness</description>
155          <units>count of positive/negative EV steps</units>
156          <notes>For example, if EV step is 0.333, '6' will mean an
157          exposure compensation of +2 EV; -3 will mean an exposure
158          compensation of -1</notes>
159          <tag id="BC" />
160        </entry>
161        <entry name="aeLock" type="byte" visibility="public" enum="true"
162               typedef="boolean">
163          <enum>
164            <value>OFF
165            <notes>Autoexposure lock is disabled; the AE algorithm
166            is free to update its parameters.</notes></value>
167            <value>ON
168            <notes>Autoexposure lock is enabled; the AE algorithm
169            must not update the exposure and sensitivity parameters
170            while the lock is active</notes></value>
171          </enum>
172          <description>Whether AE is currently locked to its latest
173          calculated values</description>
174          <notes>Note that even when AE is locked, the flash may be
175          fired if the AE mode is ON_AUTO_FLASH / ON_ALWAYS_FLASH /
176          ON_AUTO_FLASH_REDEYE.</notes>
177          <tag id="BC" />
178        </entry>
179        <entry name="aeMode" type="byte" visibility="public" enum="true">
180          <enum>
181            <value>OFF
182              <notes>Autoexposure is disabled; sensor.exposureTime,
183              sensor.sensitivity and sensor.frameDuration are used</notes>
184            </value>
185            <value>ON
186              <notes>Autoexposure is active, no flash
187              control</notes>
188            </value>
189            <value>ON_AUTO_FLASH
190            <notes>if flash exists Autoexposure is active, auto
191            flash control; flash may be fired when precapture
192            trigger is activated, and for captures for which
193            captureIntent = STILL_CAPTURE</notes></value>
194            <value>ON_ALWAYS_FLASH
195            <notes>if flash exists Autoexposure is active, auto
196            flash control for precapture trigger and always flash
197            when captureIntent = STILL_CAPTURE</notes></value>
198            <value>ON_AUTO_FLASH_REDEYE
199            <notes>optional Automatic red eye reduction with flash.
200            If deemed necessary, red eye reduction sequence should
201            fire when precapture trigger is activated, and final
202            flash should fire when captureIntent =
203            STILL_CAPTURE</notes></value>
204          </enum>
205          <description>Whether AE is currently updating the sensor
206          exposure and sensitivity fields</description>
207          <range>android.control.aeAvailableModes</range>
208          <notes>Only effective if android.control.mode =
209          AUTO</notes>
210          <tag id="BC" />
211        </entry>
212        <entry name="aeRegions" type="int32" visibility="public"
213               container="array">
214          <array>
215            <size>5</size>
216            <size>area_count</size>
217          </array>
218          <description>List of areas to use for
219          metering</description>
220          <notes>Each area is a rectangle plus weight: xmin, ymin,
221          xmax, ymax, weight. The rectangle is defined inclusive of the
222          specified coordinates.
223
224          The coordinate system is based on the active pixel array,
225          with (0,0) being the top-left pixel in the active pixel array, and
226          (android.sensor.info.activeArraySize.width - 1,
227          android.sensor.info.activeArraySize.height - 1) being the
228          bottom-right pixel in the active pixel array. The weight
229          should be nonnegative.
230
231          If all regions have 0 weight, then no specific metering area
232          needs to be used by the HAL. If the metering region is
233          outside the current android.scaler.cropRegion, the HAL
234          should ignore the sections outside the region and output the
235          used sections in the frame metadata</notes>
236          <tag id="BC" />
237        </entry>
238        <entry name="aeTargetFpsRange" type="int32" visibility="public"
239               container="array">
240          <array>
241            <size>2</size>
242          </array>
243          <description>Range over which fps can be adjusted to
244          maintain exposure</description>
245          <range>android.control.aeAvailableTargetFpsRanges</range>
246          <notes>Only constrains AE algorithm, not manual control
247          of android.sensor.exposureTime</notes>
248          <tag id="BC" />
249        </entry>
250        <entry name="aePrecaptureTrigger" type="byte" visibility="public"
251               enum="true">
252          <enum>
253            <value>IDLE
254              <notes>The trigger is idle.</notes>
255            </value>
256            <value>START
257              <notes>The precapture metering sequence
258              must be started. The exact effect of the precapture
259              trigger depends on the current AE mode and
260              state.</notes>
261            </value>
262          </enum>
263          <description>Whether the HAL must trigger precapture
264          metering.</description>
265          <notes>This entry is normally set to IDLE, or is not
266          included at all in the request settings. When included and
267          set to START, the HAL must trigger the autoexposure
268          precapture metering sequence.
269
270          The effect of AE precapture trigger depends on the current
271          AE mode and state; see the camera HAL device v3 header for
272          details.</notes>
273          <tag id="BC" />
274        </entry>
275        <entry name="afMode" type="byte" visibility="public" enum="true">
276          <enum>
277            <value>OFF
278            <notes>The 3A routines do not control the lens;
279            android.lens.focusDistance is controlled by the
280            application</notes></value>
281            <value>AUTO
282            <notes>if lens is not fixed focus.
283
284            Use android.lens.minimumFocusDistance to determine if lens
285            is fixed focus In this mode, the lens does not move unless
286            the autofocus trigger action is called. When that trigger
287            is activated, AF must transition to ACTIVE_SCAN, then to
288            the outcome of the scan (FOCUSED or
289            NOT_FOCUSED).
290
291            Triggering cancel AF resets the lens position to default,
292            and sets the AF state to INACTIVE.</notes></value>
293            <value>MACRO
294            <notes>In this mode, the lens does not move unless the
295            autofocus trigger action is called.
296
297            When that trigger is activated, AF must transition to
298            ACTIVE_SCAN, then to the outcome of the scan (FOCUSED or
299            NOT_FOCUSED).  Triggering cancel AF resets the lens
300            position to default, and sets the AF state to
301            INACTIVE.</notes></value>
302            <value>CONTINUOUS_VIDEO
303            <notes>In this mode, the AF algorithm modifies the lens
304            position continually to attempt to provide a
305            constantly-in-focus image stream.
306
307            The focusing behavior should be suitable for good quality
308            video recording; typically this means slower focus
309            movement and no overshoots. When the AF trigger is not
310            involved, the AF algorithm should start in INACTIVE state,
311            and then transition into PASSIVE_SCAN and PASSIVE_FOCUSED
312            states as appropriate. When the AF trigger is activated,
313            the algorithm should immediately transition into
314            AF_FOCUSED or AF_NOT_FOCUSED as appropriate, and lock the
315            lens position until a cancel AF trigger is received.
316
317            Once cancel is received, the algorithm should transition
318            back to INACTIVE and resume passive scan. Note that this
319            behavior is not identical to CONTINUOUS_PICTURE, since an
320            ongoing PASSIVE_SCAN must immediately be
321            canceled.</notes></value>
322            <value>CONTINUOUS_PICTURE
323            <notes>In this mode, the AF algorithm modifies the lens
324            position continually to attempt to provide a
325            constantly-in-focus image stream.
326
327            The focusing behavior should be suitable for still image
328            capture; typically this means focusing as fast as
329            possible. When the AF trigger is not involved, the AF
330            algorithm should start in INACTIVE state, and then
331            transition into PASSIVE_SCAN and PASSIVE_FOCUSED states as
332            appropriate as it attempts to maintain focus. When the AF
333            trigger is activated, the algorithm should finish its
334            PASSIVE_SCAN if active, and then transition into
335            AF_FOCUSED or AF_NOT_FOCUSED as appropriate, and lock the
336            lens position until a cancel AF trigger is received.
337
338            When the AF cancel trigger is activated, the algorithm
339            should transition back to INACTIVE and then act as if it
340            has just been started.</notes></value>
341            <value>EDOF
342            <notes>Extended depth of field (digital focus). AF
343            trigger is ignored, AF state should always be
344            INACTIVE.</notes></value>
345          </enum>
346          <description>Whether AF is currently enabled, and what
347          mode it is set to</description>
348          <tag id="BC" />
349        </entry>
350        <entry name="afRegions" type="int32" visibility="public"
351               container="array">
352          <array>
353            <size>5</size>
354            <size>area_count</size>
355          </array>
356          <description>List of areas to use for focus
357          estimation</description>
358          <notes>Each area is a rectangle plus weight: xmin, ymin,
359          xmax, ymax, weight. The rectangle is defined inclusive of the
360          specified coordinates.
361
362          The coordinate system is based on the active pixel array,
363          with (0,0) being the top-left pixel in the active pixel array, and
364          (android.sensor.info.activeArraySize.width - 1,
365          android.sensor.info.activeArraySize.height - 1) being the
366          bottom-right pixel in the active pixel array. The weight
367          should be nonnegative.
368
369          If all regions have 0 weight, then no specific focus area
370          needs to be used by the HAL. If the focusing region is
371          outside the current android.scaler.cropRegion, the HAL
372          should ignore the sections outside the region and output the
373          used sections in the frame metadata</notes>
374          <tag id="BC" />
375        </entry>
376        <entry name="afTrigger" type="byte" visibility="public" enum="true">
377          <enum>
378            <value>IDLE
379              <notes>The trigger is idle.</notes>
380            </value>
381            <value>START
382              <notes>Autofocus must trigger now.</notes>
383            </value>
384            <value>CANCEL
385              <notes>Autofocus must return to initial
386              state, and cancel any active trigger.</notes>
387            </value>
388          </enum>
389          <description>Whether the HAL must trigger autofocus.</description>
390          <notes>This entry is normally set to IDLE, or is not
391          included at all in the request settings.
392
393          When included and set to START, the HAL must trigger the
394          autofocus algorithm. The effect of AF trigger depends on the
395          current AF mode and state; see the camera HAL device v3
396          header for details. When set to CANCEL, the HAL must cancel
397          any active trigger, and return to initial AF state.</notes>
398          <tag id="BC" />
399        </entry>
400        <entry name="awbLock" type="byte" visibility="public" enum="true"
401               typedef="boolean">
402          <enum>
403            <value>OFF
404            <notes>Auto-whitebalance lock is disabled; the AWB
405            algorithm is free to update its parameters if in AUTO
406            mode.</notes></value>
407            <value>ON
408            <notes>Auto-whitebalance lock is enabled; the AWB
409            algorithm must not update the exposure and sensitivity
410            parameters while the lock is active</notes></value>
411          </enum>
412          <description>Whether AWB is currently locked to its
413          latest calculated values</description>
414          <notes>Note that AWB lock is only meaningful for AUTO
415          mode; in other modes, AWB is already fixed to a specific
416          setting</notes>
417          <tag id="BC" />
418        </entry>
419        <entry name="awbMode" type="byte" visibility="public" enum="true">
420          <enum>
421            <value>OFF</value>
422            <value>AUTO</value>
423            <value>INCANDESCENT</value>
424            <value>FLUORESCENT</value>
425            <value>WARM_FLUORESCENT</value>
426            <value>DAYLIGHT</value>
427            <value>CLOUDY_DAYLIGHT</value>
428            <value>TWILIGHT</value>
429            <value>SHADE</value>
430          </enum>
431          <description>Whether AWB is currently setting the color
432          transform fields, and what its illumination target
433          is</description>
434          <notes>[BC - AWB lock,AWB modes]</notes>
435          <tag id="BC" />
436          <tag id="AWB" />
437        </entry>
438        <entry name="awbRegions" type="int32" visibility="public"
439               container="array">
440          <array>
441            <size>5</size>
442            <size>area_count</size>
443          </array>
444          <description>List of areas to use for illuminant
445          estimation</description>
446          <notes>Only used in AUTO mode.
447
448          Each area is a rectangle plus weight: xmin, ymin,
449          xmax, ymax, weight. The rectangle is defined inclusive of the
450          specified coordinates.
451
452          The coordinate system is based on the active pixel array,
453          with (0,0) being the top-left pixel in the active pixel array, and
454          (android.sensor.info.activeArraySize.width - 1,
455          android.sensor.info.activeArraySize.height - 1) being the
456          bottom-right pixel in the active pixel array. The weight
457          should be nonnegative.
458
459          If all regions have 0 weight, then no specific metering area
460          needs to be used by the HAL. If the metering region is
461          outside the current android.scaler.cropRegion, the HAL
462          should ignore the sections outside the region and output the
463          used sections in the frame metadata</notes>
464          <tag id="BC" />
465        </entry>
466        <entry name="captureIntent" type="byte" visibility="public" enum="true">
467          <enum>
468            <value>CUSTOM
469            <notes>This request doesn't fall into the other
470            categories. Default to preview-like
471            behavior.</notes></value>
472            <value>PREVIEW
473            <notes>This request is for a preview-like usecase. The
474            precapture trigger may be used to start off a metering
475            w/flash sequence</notes></value>
476            <value>STILL_CAPTURE
477            <notes>This request is for a still capture-type
478            usecase.</notes></value>
479            <value>VIDEO_RECORD
480            <notes>This request is for a video recording
481            usecase.</notes></value>
482            <value>VIDEO_SNAPSHOT
483            <notes>This request is for a video snapshot (still
484            image while recording video) usecase</notes></value>
485            <value>ZERO_SHUTTER_LAG
486            <notes>This request is for a ZSL usecase; the
487            application will stream full-resolution images and
488            reprocess one or several later for a final
489            capture</notes></value>
490          </enum>
491          <description>Information to 3A routines about the purpose
492          of this capture, to help decide optimal 3A
493          strategy</description>
494          <range>all must be supported</range>
495          <notes>Only used if android.control.mode != OFF.</notes>
496          <tag id="BC" />
497        </entry>
498        <entry name="effectMode" type="byte" visibility="public" enum="true">
499          <enum>
500            <value>OFF</value>
501            <value optional="true">MONO</value>
502            <value optional="true">NEGATIVE</value>
503            <value optional="true">SOLARIZE</value>
504            <value optional="true">SEPIA</value>
505            <value optional="true">POSTERIZE</value>
506            <value optional="true">WHITEBOARD</value>
507            <value optional="true">BLACKBOARD</value>
508            <value optional="true">AQUA</value>
509          </enum>
510          <description>Whether any special color effect is in use.
511          Only used if android.control.mode != OFF</description>
512          <range>android.control.availableEffects</range>
513          <tag id="BC" />
514        </entry>
515        <entry name="mode" type="byte" visibility="public" enum="true">
516          <enum>
517            <value>OFF
518            <notes>Full application control of pipeline. All 3A
519            routines are disabled, no other settings in
520            android.control.* have any effect</notes></value>
521            <value>AUTO
522            <notes>Use settings for each individual 3A routine.
523            Manual control of capture parameters is disabled. All
524            controls in android.control.* besides sceneMode take
525            effect</notes></value>
526            <value>USE_SCENE_MODE
527            <notes>Use specific scene mode. Enabling this disables
528            control.aeMode, control.awbMode and control.afMode
529            controls; the HAL must ignore those settings while
530            USE_SCENE_MODE is active (except for FACE_PRIORITY
531            scene mode). Other control entries are still active.
532            This setting can only be used if availableSceneModes !=
533            UNSUPPORTED</notes></value>
534          </enum>
535          <description>Overall mode of 3A control
536          routines</description>
537          <range>all must be supported</range>
538          <tag id="BC" />
539        </entry>
540        <entry name="sceneMode" type="byte" visibility="public" enum="true">
541          <enum>
542            <value id="0">UNSUPPORTED</value>
543            <value>FACE_PRIORITY
544            <notes>if face detection support exists Use face
545            detection data to drive 3A routines. If face detection
546            statistics are disabled, should still operate correctly
547            (but not return face detection statistics to the
548            framework).
549
550            Unlike the other scene modes, aeMode, awbMode, and afMode
551            remain active when FACE_PRIORITY is set. This is due to
552            compatibility concerns with the old camera
553            API</notes></value>
554            <value optional="true">ACTION</value>
555            <value optional="true">PORTRAIT</value>
556            <value optional="true">LANDSCAPE</value>
557            <value optional="true">NIGHT</value>
558            <value optional="true">NIGHT_PORTRAIT</value>
559            <value optional="true">THEATRE</value>
560            <value optional="true">BEACH</value>
561            <value optional="true">SNOW</value>
562            <value optional="true">SUNSET</value>
563            <value optional="true">STEADYPHOTO</value>
564            <value optional="true">FIREWORKS</value>
565            <value optional="true">SPORTS</value>
566            <value optional="true">PARTY</value>
567            <value optional="true">CANDLELIGHT</value>
568            <value optional="true">BARCODE</value>
569          </enum>
570          <description>Which scene mode is active when
571          android.control.mode = SCENE_MODE</description>
572          <range>android.control.availableSceneModes</range>
573          <tag id="BC" />
574        </entry>
575        <entry name="videoStabilizationMode" type="byte" visibility="public"
576               enum="true" typedef="boolean">
577          <enum>
578            <value>OFF</value>
579            <value>ON</value>
580          </enum>
581          <description>Whether video stabilization is
582          active</description>
583          <notes>If enabled, video stabilization can modify the
584          android.scaler.cropRegion to keep the video stream
585          stabilized</notes>
586          <tag id="BC" />
587        </entry>
588      </controls>
589      <static>
590        <entry name="aeAvailableAntibandingModes" type="byte" visibility="public"
591               type_notes="list of enums" container="array">
592          <array>
593            <size>n</size>
594          </array>
595          <description>Which set of antibanding modes are
596          supported</description>
597        </entry>
598        <entry name="aeAvailableModes" type="byte"
599        type_notes="list of enums" container="array">
600          <array>
601            <size>n</size>
602          </array>
603          <description>Which subset of AE modes is
604          supported</description>
605          <range>OFF, ON must be supported.
606          ON_AUTO_FLASH/ON_ALWAYS_FLASH must be supported if flash
607          unit is available</range>
608        </entry>
609        <entry name="aeAvailableTargetFpsRanges" type="int32" visibility="public"
610               type_notes="list of pairs of frame rates"
611               container="array">
612          <array>
613            <size>2</size>
614            <size>n</size>
615          </array>
616          <description>List of frame rate ranges supported by the
617          AE algorithm/hardware</description>
618        </entry>
619        <entry name="aeCompensationRange" type="int32" visibility="public"
620               container="array">
621          <array>
622            <size>2</size>
623          </array>
624          <description>Maximum and minimum exposure compensation
625          setting, in counts of
626          android.control.aeCompensationStepSize</description>
627          <range>At least (-2,2)/(exp compensation step
628          size)</range>
629          <tag id="BC" />
630        </entry>
631        <entry name="aeCompensationStep" type="rational" visibility="public">
632          <description>Smallest step by which exposure compensation
633          can be changed</description>
634          <range>&lt;= 1/2</range>
635          <tag id="BC" />
636        </entry>
637        <entry name="afAvailableModes" type="byte" visibility="public"
638        type_notes="List of enums" container="array">
639          <array>
640            <size>n</size>
641          </array>
642          <description>List of AF modes that can be
643          selected</description>
644          <range>OFF must be included. AUTO must be supported if
645          lens allows for changing focus</range>
646          <tag id="BC" />
647        </entry>
648        <entry name="availableEffects" type="byte" visibility="public"
649               type_notes="list of enums" container="array">
650          <array>
651            <size>n</size>
652          </array>
653          <description>what subset of the full color effect enum
654          list is supported</description>
655          <range>OFF must be listed</range>
656          <tag id="BC" />
657        </entry>
658        <entry name="availableSceneModes" type="byte" visibility="public"
659               type_notes="list of enums from android.control.sceneMode, plus UNSUPPORTED to indicate no scene modes are supported"
660               container="array">
661          <array>
662            <size>n</size>
663          </array>
664          <description>what subset of the scene mode enum list is
665          supported.</description>
666          <range>SCENE_MODE_FACE_PRIORITY must be supported if face
667          detection is supported</range>
668          <tag id="BC" />
669        </entry>
670        <entry name="availableVideoStabilizationModes" type="byte"
671               visibility="public" type_notes="List of enums." container="array">
672          <array>
673            <size>n</size>
674          </array>
675          <description>List of video stabilization modes that can
676          be supported</description>
677          <range>OFF must be included</range>
678          <tag id="BC" />
679        </entry>
680        <entry name="awbAvailableModes" type="byte" visibility="public"
681               type_notes="List of enums (android.control.awbMode)"
682               container="array">
683          <array>
684            <size>n</size>
685          </array>
686          <range>OFF, AUTO must be included</range>
687          <tag id="BC" />
688        </entry>
689        <entry name="maxRegions" type="int32" visibility="public">
690          <description>For AE, AWB, and AF, how many individual
691          regions can be listed for metering?</description>
692          <range>&gt;= 1</range>
693          <tag id="BC" />
694        </entry>
695        <entry name="sceneModeOverrides" type="byte" visibility="system"
696               container="array">
697          <array>
698            <size>3</size>
699            <size>length(availableSceneModes)</size>
700          </array>
701          <description>List of AE, AWB, and AF modes to use for
702          each available scene mode</description>
703          <range>For each listed scene mode, lists the aeMode,
704          awbMode, and afMode that the HAL wants to use for that
705          scene mode.
706
707          For each entry, the order is {aeMode, awbMode, afMode} in
708          order of increasing index</range>
709          <notes>When a scene mode is enabled, the HAL is expected
710          to override aeMode, awbMode, and afMode with its
711          preferred settings for that scene mode.
712
713          To simplify communication with old camera API applications,
714          the service wants this override list in the static metadata.
715          The order of this list matches that of availableSceneModes,
716          with 3 entires for each scene mode.  The overrides listed
717          for SCENE_MODE_FACE_PRIORITY are ignored, since for that
718          mode, the application-set aeMode, awbMode, and afMode are
719          used instead, like they are when android.control.mode is
720          AUTO.
721
722          It is recommended that for FACE_PRIORITY, the overrides
723          should be set to 0. As an example, if availableSceneModes is
724          { FACE_PRIORITY, ACTION, NIGHT }, then the service expects
725          this field to have 9 entries; for example { 0 , 0, 0,
726          ON_AUTO_FLASH, AUTO, CONTINUOUS_PICTURE, ON_AUTO_FLASH,
727          INCANDESCENT, AUTO }</notes>
728          <tag id="BC" />
729        </entry>
730      </static>
731      <dynamic>
732        <entry name="aePrecaptureId" type="int32" visibility="hidden">
733          <description>The ID sent with the latest
734          CAMERA2_TRIGGER_PRECAPTURE_METERING call</description>
735          <notes>Must be 0 if no
736          CAMERA2_TRIGGER_PRECAPTURE_METERING trigger received yet
737          by HAL. Always updated even if AE algorithm ignores the
738          trigger</notes>
739        </entry>
740        <clone entry="android.control.aeRegions" kind="controls">
741        </clone>
742        <entry name="aeState" type="byte" visibility="public" enum="true">
743          <enum>
744            <value>INACTIVE
745            <notes>AE is off.  When a camera device is opened, it starts in
746            this state.</notes></value>
747            <value>SEARCHING
748            <notes>AE doesn't yet have a good set of control values
749            for the current scene</notes></value>
750            <value>CONVERGED
751            <notes>AE has a good set of control values for the
752            current scene</notes></value>
753            <value>LOCKED
754            <notes>AE has been locked (aeMode =
755            LOCKED)</notes></value>
756            <value>FLASH_REQUIRED
757            <notes>AE has a good set of control values, but flash
758            needs to be fired for good quality still
759            capture</notes></value>
760            <value>PRECAPTURE
761            <notes>AE has been asked to do a precapture sequence
762            (through the
763            trigger_action(CAMERA2_TRIGGER_PRECAPTURE_METERING)
764            call), and is currently executing it. Once PRECAPTURE
765            completes, AE will transition to CONVERGED or
766            FLASH_REQUIRED as appropriate</notes></value>
767          </enum>
768          <description>Current state of AE algorithm</description>
769          <notes>Whenever the AE algorithm state changes, a
770          MSG_AUTOEXPOSURE notification must be send if a
771          notification callback is registered.</notes>
772        </entry>
773        <clone entry="android.control.afMode" kind="controls">
774        </clone>
775        <clone entry="android.control.afRegions" kind="controls">
776        </clone>
777        <entry name="afState" type="byte" visibility="public" enum="true">
778          <enum>
779            <value>INACTIVE
780            <notes>AF off or has not yet tried to scan/been asked
781            to scan.  When a camera device is opened, it starts in
782            this state.</notes></value>
783            <value>PASSIVE_SCAN
784            <notes>if CONTINUOUS_* modes are supported. AF is
785            currently doing an AF scan initiated by a continuous
786            autofocus mode</notes></value>
787            <value>PASSIVE_FOCUSED
788            <notes>if CONTINUOUS_* modes are supported. AF currently
789            believes it is in focus, but may restart scanning at
790            any time.</notes></value>
791            <value>ACTIVE_SCAN
792            <notes>if AUTO or MACRO modes are supported. AF is doing
793            an AF scan because it was triggered by AF
794            trigger</notes></value>
795            <value>FOCUSED_LOCKED
796            <notes>if any AF mode besides OFF is supported. AF
797            believes it is focused correctly and is
798            locked</notes></value>
799            <value>NOT_FOCUSED_LOCKED
800            <notes>if any AF mode besides OFF is supported. AF has
801            failed to focus successfully and is
802            locked</notes></value>
803            <value>PASSIVE_UNFOCUSED
804            <notes>if CONTINUOUS_* modes are supported. AF finished a
805            passive scan without finding focus, and may restart
806            scanning at any time.</notes></value>
807          </enum>
808          <description>Current state of AF algorithm</description>
809          <notes>Whenever the AF algorithm state changes, a
810          MSG_AUTOFOCUS notification must be send if a notification
811          callback is registered.</notes>
812        </entry>
813        <entry name="afTriggerId" type="int32" visibility="hidden">
814          <description>The ID sent with the latest
815          CAMERA2_TRIGGER_AUTOFOCUS call</description>
816          <notes>Must be 0 if no CAMERA2_TRIGGER_AUTOFOCUS trigger
817          received yet by HAL. Always updated even if AF algorithm
818          ignores the trigger</notes>
819        </entry>
820        <clone entry="android.control.awbMode" kind="controls">
821        </clone>
822        <clone entry="android.control.awbRegions" kind="controls">
823        </clone>
824        <entry name="awbState" type="byte" visibility="public" enum="true">
825          <enum>
826            <value>INACTIVE
827            <notes>AWB is not in auto mode.  When a camera device is opened, it
828            starts in this state.</notes></value>
829            <value>SEARCHING
830            <notes>AWB doesn't yet have a good set of control
831            values for the current scene</notes></value>
832            <value>CONVERGED
833            <notes>AWB has a good set of control values for the
834            current scene</notes></value>
835            <value>LOCKED
836            <notes>AE has been locked (aeMode =
837            LOCKED)</notes></value>
838          </enum>
839          <description>Current state of AWB algorithm</description>
840          <notes>Whenever the AWB algorithm state changes, a
841          MSG_AUTOWHITEBALANCE notification must be send if a
842          notification callback is registered.</notes>
843        </entry>
844        <clone entry="android.control.mode" kind="controls">
845        </clone>
846      </dynamic>
847    </section>
848    <section name="demosaic">
849      <controls>
850        <entry name="mode" type="byte" enum="true">
851          <enum>
852            <value>FAST
853            <notes>Minimal or no slowdown of frame rate compared to
854            Bayer RAW output</notes></value>
855            <value>HIGH_QUALITY
856            <notes>High-quality may reduce output frame
857            rate</notes></value>
858          </enum>
859          <description>Controls the quality of the demosaicing
860          processing</description>
861          <tag id="V1" />
862        </entry>
863      </controls>
864    </section>
865    <section name="edge">
866      <controls>
867        <entry name="mode" type="byte" visibility="public" enum="true">
868          <enum>
869            <value>OFF
870            <notes>No edge enhancement is applied</notes></value>
871            <value>FAST
872            <notes>Must not slow down frame rate relative to raw
873            bayer output</notes></value>
874            <value>HIGH_QUALITY
875            <notes>Frame rate may be reduced by high
876            quality</notes></value>
877          </enum>
878          <description>Operation mode for edge
879          enhancement</description>
880        </entry>
881        <entry name="strength" type="byte">
882          <description>Control the amount of edge enhancement
883          applied to the images</description>
884          <units>1-10; 10 is maximum sharpening</units>
885        </entry>
886      </controls>
887      <dynamic>
888        <clone entry="android.edge.mode" kind="controls"></clone>
889      </dynamic>
890    </section>
891    <section name="flash">
892      <controls>
893        <entry name="firingPower" type="byte">
894          <description>Power for flash firing/torch</description>
895          <units>10 is max power; 0 is no flash. Linear</units>
896          <range>0 - 10</range>
897          <notes>Power for snapshot may use a different scale than
898          for torch mode. Only one entry for torch mode will be
899          used</notes>
900          <tag id="V1" />
901        </entry>
902        <entry name="firingTime" type="int64">
903          <description>Firing time of flash relative to start of
904          exposure</description>
905          <units>nanoseconds</units>
906          <range>0-(exposure time-flash duration)</range>
907          <notes>Clamped to (0, exposure time - flash
908          duration).</notes>
909          <tag id="V1" />
910        </entry>
911        <entry name="mode" type="byte" visibility="public" enum="true">
912          <enum>
913            <value>OFF
914            <notes>Do not fire the flash for this
915            capture</notes></value>
916            <value>SINGLE
917            <notes>if android.flash.available is true Fire flash
918            for this capture based on firingPower,
919            firingTime.</notes></value>
920            <value>TORCH
921            <notes>if android.flash.available is true Flash
922            continuously on, power set by
923            firingPower</notes></value>
924          </enum>
925          <description>Select flash operation mode</description>
926          <tag id="BC" />
927        </entry>
928      </controls>
929      <static>
930        <namespace name="info">
931          <entry name="available" type="byte" visibility="public">
932            <description>Whether this camera has a
933            flash</description>
934            <units>boolean (0 = false, otherwise true)</units>
935            <notes>If no flash, none of the flash controls do
936            anything. All other metadata should return 0</notes>
937            <tag id="BC" />
938          </entry>
939          <entry name="chargeDuration" type="int64">
940            <description>Time taken before flash can fire
941            again</description>
942            <units>nanoseconds</units>
943            <range>0-1e9</range>
944            <notes>1 second too long/too short for recharge? Should
945            this be power-dependent?</notes>
946            <tag id="V1" />
947          </entry>
948        </namespace>
949        <entry name="colorTemperature" type="byte">
950          <description>The x,y whitepoint of the
951          flash</description>
952          <units>pair of floats</units>
953          <range>0-1 for both</range>
954          <tag id="ADV" />
955        </entry>
956        <entry name="maxEnergy" type="byte">
957          <description>Max energy output of the flash for a full
958          power single flash</description>
959          <units>lumen-seconds</units>
960          <range>&gt;= 0</range>
961          <tag id="ADV" />
962        </entry>
963      </static>
964      <dynamic>
965        <clone entry="android.flash.firingPower" kind="controls">
966        </clone>
967        <clone entry="android.flash.firingTime" kind="controls">
968        </clone>
969        <clone entry="android.flash.mode" kind="controls"></clone>
970        <entry name="state" type="byte" visibility="public" enum="true">
971          <enum>
972            <value>UNAVAILABLE
973            <notes>No flash on camera</notes></value>
974            <value>CHARGING
975            <notes>if android.flash.available is true Flash is
976            charging and cannot be fired</notes></value>
977            <value>READY
978            <notes>if android.flash.available is true Flash is
979            ready to fire</notes></value>
980            <value>FIRED
981            <notes>if android.flash.available is true Flash fired
982            for this capture</notes></value>
983          </enum>
984          <description>Current state of the flash
985          unit</description>
986        </entry>
987      </dynamic>
988    </section>
989    <section name="geometric">
990      <controls>
991        <entry name="mode" type="byte" enum="true">
992          <enum>
993            <value>OFF
994            <notes>No geometric correction is
995            applied</notes></value>
996            <value>FAST
997            <notes>Must not slow down frame rate relative to raw
998            bayer output</notes></value>
999            <value>HIGH_QUALITY
1000            <notes>Frame rate may be reduced by high
1001            quality</notes></value>
1002          </enum>
1003          <description>Operating mode of geometric
1004          correction</description>
1005        </entry>
1006        <entry name="strength" type="byte">
1007          <description>Control the amount of shading correction
1008          applied to the images</description>
1009          <units>unitless: 1-10; 10 is full shading
1010          compensation</units>
1011          <tag id="ADV" />
1012        </entry>
1013      </controls>
1014    </section>
1015    <section name="hotPixel">
1016      <controls>
1017        <entry name="mode" type="byte" enum="true">
1018          <enum>
1019            <value>OFF
1020            <notes>No hot pixel correction can be
1021            applied</notes></value>
1022            <value>FAST
1023            <notes>Frame rate must not be reduced compared to raw
1024            Bayer output</notes></value>
1025            <value>HIGH_QUALITY
1026            <notes>Frame rate may be reduced by high
1027            quality</notes></value>
1028          </enum>
1029          <description>Set operational mode for hot pixel
1030          correction</description>
1031          <tag id="V1" />
1032        </entry>
1033      </controls>
1034      <static>
1035        <namespace name="info">
1036          <entry name="map" type="int32"
1037          type_notes="list of coordinates based on android.sensor.pixelArraySize"
1038          container="array">
1039            <array>
1040              <size>2</size>
1041              <size>n</size>
1042            </array>
1043            <description>Location of hot/defective pixels on
1044            sensor</description>
1045            <tag id="ADV" />
1046          </entry>
1047        </namespace>
1048      </static>
1049      <dynamic>
1050        <clone entry="android.hotPixel.mode" kind="controls">
1051          <tag id="V1" />
1052        </clone>
1053      </dynamic>
1054    </section>
1055    <section name="jpeg">
1056      <controls>
1057        <entry name="gpsCoordinates" type="double" visibility="public"
1058        type_notes="latitude, longitude, altitude. First two in degrees, the third in meters"
1059        container="array">
1060          <array>
1061            <size>3</size>
1062          </array>
1063          <description>GPS coordinates to include in output JPEG
1064          EXIF</description>
1065          <range>(-180 - 180], [-90,90], [-inf, inf]</range>
1066          <tag id="BC" />
1067        </entry>
1068        <entry name="gpsProcessingMethod" type="byte" visibility="public"
1069               typedef="string">
1070          <description>32 characters describing GPS algorithm to
1071          include in EXIF</description>
1072          <units>UTF-8 null-terminated string</units>
1073          <tag id="BC" />
1074        </entry>
1075        <entry name="gpsTimestamp" type="int64" visibility="public">
1076          <description>Time GPS fix was made to include in
1077          EXIF</description>
1078          <units>UTC in seconds since January 1, 1970</units>
1079          <tag id="BC" />
1080        </entry>
1081        <entry name="orientation" type="int32" visibility="public">
1082          <description>Orientation of JPEG image to
1083          write</description>
1084          <units>Degrees in multiples of 90</units>
1085          <range>0, 90, 180, 270</range>
1086          <tag id="BC" />
1087        </entry>
1088        <entry name="quality" type="byte" visibility="public">
1089          <description>Compression quality of the final JPEG
1090          image</description>
1091          <range>1-100; larger is higher quality</range>
1092          <notes>85-95 is typical usage range</notes>
1093          <tag id="BC" />
1094        </entry>
1095        <entry name="thumbnailQuality" type="byte" visibility="public">
1096          <description>Compression quality of JPEG
1097          thumbnail</description>
1098          <range>1-100; larger is higher quality</range>
1099          <tag id="BC" />
1100        </entry>
1101        <entry name="thumbnailSize" type="int32" visibility="public"
1102        container="array" typedef="size">
1103          <array>
1104            <size>2</size>
1105          </array>
1106          <description>Resolution of embedded JPEG
1107          thumbnail</description>
1108          <range>from android.jpeg.availableThumbnailSizes</range>
1109          <tag id="BC" />
1110        </entry>
1111      </controls>
1112      <static>
1113        <entry name="availableThumbnailSizes" type="int32" visibility="public"
1114        type_notes="list of resolution pairs" container="array" typedef="size">
1115          <array>
1116            <size>2</size>
1117            <size>n</size>
1118          </array>
1119          <description>Supported resolutions for the JPEG
1120          thumbnail</description>
1121          <range>Must include at least one valid resolution, plus
1122          (0,0) for no thumbnail generation</range>
1123          <tag id="BC" />
1124        </entry>
1125        <entry name="maxSize" type="int32" visibility="system">
1126          <description>Maximum size in bytes for the compressed
1127          JPEG buffer</description>
1128          <range>Must be large enough to fit any JPEG produced by
1129          the camera</range>
1130          <notes>This is used for sizing the gralloc buffers for
1131          JPEG</notes>
1132        </entry>
1133      </static>
1134      <dynamic>
1135        <clone entry="android.jpeg.gpsCoordinates" kind="controls">
1136        </clone>
1137        <clone entry="android.jpeg.gpsProcessingMethod"
1138        kind="controls"></clone>
1139        <clone entry="android.jpeg.gpsTimestamp" kind="controls">
1140        </clone>
1141        <clone entry="android.jpeg.orientation" kind="controls">
1142        </clone>
1143        <clone entry="android.jpeg.quality" kind="controls">
1144        </clone>
1145        <entry name="size" type="int32">
1146          <description>The size of the compressed JPEG image, in
1147          bytes</description>
1148          <range>&gt;= 0</range>
1149          <notes>If no JPEG output is produced for the request,
1150          this must be 0.
1151
1152          Otherwise, this describes the real size of the compressed
1153          JPEG image placed in the output stream.  More specifically,
1154          if android.jpeg.maxSize = 1000000, and a specific capture
1155          has android.jpeg.size = 500000, then the output buffer from
1156          the JPEG stream will be 1000000 bytes, of which the first
1157          500000 make up the real data.</notes>
1158        </entry>
1159        <clone entry="android.jpeg.thumbnailQuality"
1160        kind="controls"></clone>
1161        <clone entry="android.jpeg.thumbnailSize" kind="controls">
1162        </clone>
1163      </dynamic>
1164    </section>
1165    <section name="lens">
1166      <controls>
1167        <entry name="aperture" type="float" visibility="public">
1168          <description>Size of the lens aperture</description>
1169          <units>f-number (f/NNN)</units>
1170          <range>android.lens.info.availableApertures</range>
1171          <notes>Will not be supported on most devices. Can only
1172          pick from supported list</notes>
1173          <tag id="V1" />
1174        </entry>
1175        <entry name="filterDensity" type="float" visibility="public">
1176          <description>State of lens neutral density
1177          filter(s)</description>
1178          <units>number of stops of filtering</units>
1179          <range>android.lens.info.availableFilterDensities</range>
1180          <notes>Will not be supported on most devices. Can only
1181          pick from supported list</notes>
1182          <tag id="V1" />
1183        </entry>
1184        <entry name="focalLength" type="float" visibility="public">
1185          <description>Lens optical zoom setting</description>
1186          <units>focal length in mm</units>
1187          <range>&gt; 0</range>
1188          <notes>Will not be supported on most devices.</notes>
1189          <tag id="V1" />
1190        </entry>
1191        <entry name="focusDistance" type="float" visibility="public">
1192          <description>Distance to plane of sharpest focus,
1193          measured from frontmost surface of the lens</description>
1194          <units>diopters (1/m)</units>
1195          <range>&gt;= 0</range>
1196          <notes>0 = infinity focus. Used value should be clamped
1197          to (0,minimum focus distance)</notes>
1198          <tag id="BC" />
1199          <tag id="V1" />
1200        </entry>
1201        <entry name="opticalStabilizationMode" type="byte" visibility="public"
1202        enum="true">
1203          <enum>
1204            <value>OFF</value>
1205            <value optional="true">ON</value>
1206          </enum>
1207          <description>Whether optical image stabilization is
1208          enabled.</description>
1209          <range>android.lens.availableOpticalStabilization</range>
1210          <notes>Will not be supported on most devices.</notes>
1211          <tag id="V1" />
1212        </entry>
1213      </controls>
1214      <static>
1215        <namespace name="info">
1216          <entry name="availableApertures" type="float" visibility="public"
1217          container="array">
1218            <array>
1219              <size>n</size>
1220            </array>
1221            <description>List of supported aperture
1222            values</description>
1223            <range>one entry required, &gt; 0</range>
1224            <notes>If variable aperture not available, only setting
1225            should be for the fixed aperture</notes>
1226            <tag id="V1" />
1227          </entry>
1228          <entry name="availableFilterDensities" type="float" visibility="public"
1229          container="array">
1230            <array>
1231              <size>n</size>
1232            </array>
1233            <description>List of supported ND filter
1234            values</description>
1235            <range>one entry required, &gt;= 0</range>
1236            <notes>If not available, only setting is 0. Otherwise,
1237            lists the available exposure index values for dimming
1238            (2 would mean the filter is set to reduce incoming
1239            light by two stops)</notes>
1240            <tag id="V1" />
1241          </entry>
1242          <entry name="availableFocalLengths" type="float" visibility="public"
1243          type_notes="the list of available focal lengths"
1244          container="array">
1245            <array>
1246              <size>n</size>
1247            </array>
1248            <description>If fitted with optical zoom, what focal
1249            lengths are available. If not, the static focal
1250            length</description>
1251            <range>&gt; 0</range>
1252            <notes>If optical zoom not supported, only one value
1253            should be reported</notes>
1254            <tag id="BC" />
1255            <tag id="V1" />
1256          </entry>
1257          <entry name="availableOpticalStabilization" type="byte"
1258          visibility="public" type_notes="list of enums" container="array">
1259            <array>
1260              <size>n</size>
1261            </array>
1262            <description>List of supported optical image
1263            stabilization modes</description>
1264            <tag id="V1" />
1265          </entry>
1266          <entry name="geometricCorrectionMap" type="float"
1267          type_notes="2D array of destination coordinate pairs for uniform grid points in source image, per color channel. Size in the range of 2x3x40x30"
1268          container="array">
1269            <array>
1270              <size>2</size>
1271              <size>3</size>
1272              <size>n</size>
1273              <size>m</size>
1274            </array>
1275            <description>A low-resolution map for correction of
1276            geometric distortions and chromatic aberrations, per
1277            color channel</description>
1278            <range>N, M &gt;= 2</range>
1279            <notes>[DNG wants a function instead]. What's easiest
1280            for implementers? With an array size (M, N), entry (i,
1281            j) provides the destination for pixel (i/(M-1) * width,
1282            j/(N-1) * height). Data is row-major, with each array
1283            entry being ( (X, Y)_r, (X, Y)_g, (X, Y)_b ) )</notes>
1284            <tag id="DNG" />
1285          </entry>
1286          <entry name="geometricCorrectionMapSize" type="int32"
1287          type_notes="width and height of geometric correction map"
1288          container="array" typedef="size">
1289            <array>
1290              <size>2</size>
1291            </array>
1292            <description>Dimensions of geometric correction
1293            map</description>
1294            <range>Both values &gt;= 2</range>
1295            <tag id="V1" />
1296          </entry>
1297          <entry name="hyperfocalDistance" type="float" visibility="public">
1298            <description>Hyperfocal distance for this lens; set to
1299            0 if fixed focus</description>
1300            <units>diopters</units>
1301            <range>&gt;= 0</range>
1302            <notes>The hyperfocal distance is used for the old
1303            API's 'fixed' setting</notes>
1304            <tag id="BC" />
1305          </entry>
1306          <entry name="minimumFocusDistance" type="float" visibility="public">
1307            <description>Shortest distance from frontmost surface
1308            of the lens that can be focused correctly</description>
1309            <units>diopters</units>
1310            <range>&gt;= 0</range>
1311            <notes>If the lens is fixed-focus, this should be
1312            0</notes>
1313            <tag id="V1" />
1314          </entry>
1315          <entry name="shadingMapSize" type="int32" visibility="public"
1316                 type_notes="width and height of lens shading map provided by the HAL. (N, M)"
1317                 container="array" typedef="size">
1318            <array>
1319              <size>2</size>
1320            </array>
1321            <description>Dimensions of lens shading
1322            map</description>
1323            <range>Both values &gt;= 1</range>
1324            <tag id="V1" />
1325          </entry>
1326        </namespace>
1327        <entry name="facing" type="byte" visibility="public" enum="true">
1328          <enum>
1329            <value>FRONT</value>
1330            <value>BACK</value>
1331          </enum>
1332          <description>Direction the camera faces relative to
1333          device screen</description>
1334        </entry>
1335        <entry name="opticalAxisAngle" type="float"
1336        type_notes="degrees. First defines the angle of separation between the perpendicular to the screen and the camera optical axis. The second then defines the clockwise rotation of the optical axis from native device up."
1337        container="array">
1338          <array>
1339            <size>2</size>
1340          </array>
1341          <description>Relative angle of camera optical axis to the
1342          perpendicular axis from the display</description>
1343          <range>[0-90) for first angle, [0-360) for second</range>
1344          <notes>Examples:
1345
1346          (0,0) means that the camera optical axis
1347          is perpendicular to the display surface;
1348
1349          (45,0) means that the camera points 45 degrees up when
1350          device is held upright;
1351
1352          (45,90) means the camera points 45 degrees to the right when
1353          the device is held upright.
1354
1355          Use FACING field to determine perpendicular outgoing
1356          direction</notes>
1357          <tag id="ADV" />
1358        </entry>
1359        <entry name="position" type="float" container="array">
1360          <array>
1361            <size>3, location in mm, in the sensor coordinate
1362            system</size>
1363          </array>
1364          <description>Coordinates of camera optical axis on
1365          device</description>
1366          <tag id="V1" />
1367        </entry>
1368      </static>
1369      <dynamic>
1370        <clone entry="android.lens.aperture" kind="controls">
1371          <tag id="V1" />
1372        </clone>
1373        <clone entry="android.lens.filterDensity" kind="controls">
1374          <tag id="V1" />
1375        </clone>
1376        <clone entry="android.lens.focalLength" kind="controls">
1377          <tag id="BC" />
1378        </clone>
1379        <clone entry="android.lens.focusDistance" kind="controls">
1380          <notes>Should be zero for fixed-focus cameras</notes>
1381          <tag id="BC" />
1382        </clone>
1383        <entry name="focusRange" type="float" visibility="public"
1384        type_notes="Range of scene distances that are in focus"
1385        container="array">
1386          <array>
1387            <size>2</size>
1388          </array>
1389          <description>The range of scene distances that are in
1390          sharp focus (depth of field)</description>
1391          <units>pair of focus distances in diopters: (near,
1392          far)</units>
1393          <range>&gt;=0</range>
1394          <notes>If variable focus not supported, can still report
1395          fixed depth of field range</notes>
1396          <tag id="BC" />
1397        </entry>
1398        <clone entry="android.lens.opticalStabilizationMode"
1399        kind="controls">
1400          <tag id="V1" />
1401        </clone>
1402        <entry name="state" type="byte" visibility="public" enum="true">
1403          <enum>
1404            <value>STATIONARY</value>
1405            <value>MOVING</value>
1406          </enum>
1407          <description>Current lens status</description>
1408          <tag id="V1" />
1409        </entry>
1410      </dynamic>
1411    </section>
1412    <section name="noiseReduction">
1413      <controls>
1414        <entry name="mode" type="byte" visibility="public" enum="true">
1415          <enum>
1416            <value>OFF
1417            <notes>No noise reduction is applied</notes></value>
1418            <value>FAST
1419            <notes>Must not slow down frame rate relative to raw
1420            bayer output</notes></value>
1421            <value>HIGH_QUALITY
1422            <notes>May slow down frame rate to provide highest
1423            quality</notes></value>
1424          </enum>
1425          <description>Mode of operation for the noise reduction
1426          algorithm</description>
1427          <range>android.noiseReduction.availableModes</range>
1428          <tag id="V1" />
1429        </entry>
1430        <entry name="strength" type="byte">
1431          <description>Control the amount of noise reduction
1432          applied to the images</description>
1433          <units>1-10; 10 is max noise reduction</units>
1434          <range>1 - 10</range>
1435        </entry>
1436      </controls>
1437      <dynamic>
1438        <clone entry="android.noiseReduction.mode" kind="controls">
1439        </clone>
1440      </dynamic>
1441    </section>
1442    <section name="quirks">
1443      <static>
1444        <entry name="meteringCropRegion" type="byte" visibility="system">
1445          <description>If set to 1, the camera service does not
1446          scale 'normalized' coordinates with respect to the crop
1447          region. This applies to metering input (a{e,f,wb}Region
1448          and output (face rectangles).</description>
1449          <notes>Normalized coordinates refer to those in the
1450          (-1000,1000) range mentioned in the
1451          android.hardware.Camera API.
1452
1453          HAL implementations should instead always use and emit
1454          sensor array-relative coordinates for all region data. Does
1455          not need to be listed in static metadata. Support will be
1456          removed in future versions of camera service.</notes>
1457        </entry>
1458        <entry name="triggerAfWithAuto" type="byte" visibility="system">
1459          <description>If set to 1, then the camera service always
1460          switches to FOCUS_MODE_AUTO before issuing a AF
1461          trigger.</description>
1462          <notes>HAL implementations should implement AF trigger
1463          modes for AUTO, MACRO, CONTINUOUS_FOCUS, and
1464          CONTINUOUS_PICTURE modes instead of using this flag. Does
1465          not need to be listed in static metadata. Support will be
1466          removed in future versions of camera service</notes>
1467        </entry>
1468        <entry name="useZslFormat" type="byte" visibility="system">
1469          <description>If set to 1, the camera service uses
1470          CAMERA2_PIXEL_FORMAT_ZSL instead of
1471          HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED for the zero
1472          shutter lag stream</description>
1473          <notes>HAL implementations should use gralloc usage flags
1474          to determine that a stream will be used for
1475          zero-shutter-lag, instead of relying on an explicit
1476          format setting. Does not need to be listed in static
1477          metadata. Support will be removed in future versions of
1478          camera service.</notes>
1479        </entry>
1480      </static>
1481    </section>
1482    <section name="request">
1483      <controls>
1484        <entry name="frameCount" type="int32" visibility="system">
1485          <description>A frame counter set by the framework. Must
1486          be maintained unchanged in output frame. This value monotonically
1487          increases with every new result (that is, each new result has a unique
1488          frameCount value).
1489          </description>
1490          <units>incrementing integer</units>
1491          <range>Any int</range>
1492        </entry>
1493        <entry name="id" type="int32" visibility="hidden">
1494          <description>An application-specified ID for the current
1495          request. Must be maintained unchanged in output
1496          frame</description>
1497          <units>arbitrary integer assigned by application</units>
1498          <range>Any int</range>
1499          <tag id="V1" />
1500        </entry>
1501        <entry name="inputStreams" type="int32" visibility="system"
1502               container="array">
1503          <array>
1504            <size>n</size>
1505          </array>
1506          <description>List which camera reprocess stream is used
1507          for the source of reprocessing data.</description>
1508          <units>List of camera reprocess stream IDs</units>
1509          <range>Typically, only one entry allowed, must be a valid
1510          reprocess stream ID.
1511
1512          If android.jpeg.needsThumbnail is set, then multiple
1513          reprocess streams may be included in a single request; they
1514          must be different scaled versions of the same image.</range>
1515          <notes>Only meaningful when android.request.type ==
1516          REPROCESS. Ignored otherwise</notes>
1517          <tag id="HAL2" />
1518        </entry>
1519        <entry name="metadataMode" type="byte" visibility="system"
1520               enum="true">
1521          <enum>
1522            <value>NONE
1523            <notes>No metadata should be produced on output, except
1524            for application-bound buffer data. If no
1525            application-bound streams exist, no frame should be
1526            placed in the output frame queue. If such streams
1527            exist, a frame should be placed on the output queue
1528            with null metadata but with the necessary output buffer
1529            information. Timestamp information should still be
1530            included with any output stream buffers</notes></value>
1531            <value>FULL
1532            <notes>All metadata should be produced. Statistics will
1533            only be produced if they are separately
1534            enabled</notes></value>
1535          </enum>
1536          <description>How much metadata to produce on
1537          output</description>
1538        </entry>
1539        <entry name="outputStreams" type="int32" visibility="system"
1540               container="array">
1541          <array>
1542            <size>n</size>
1543          </array>
1544          <description>Lists which camera output streams image data
1545          from this capture must be sent to</description>
1546          <units>List of camera stream IDs</units>
1547          <range>List must only include streams that have been
1548          created</range>
1549          <notes>If no output streams are listed, then the image
1550          data should simply be discarded. The image data must
1551          still be captured for metadata and statistics production,
1552          and the lens and flash must operate as requested.</notes>
1553          <tag id="HAL2" />
1554        </entry>
1555        <entry name="type" type="byte" visibility="system" enum="true">
1556          <enum>
1557            <value>CAPTURE
1558            <notes>Capture a new image from the imaging hardware,
1559            and process it according to the
1560            settings</notes></value>
1561            <value>REPROCESS
1562            <notes>Process previously captured data; the
1563            android.request.inputStream parameter determines the
1564            source reprocessing stream. TODO: Mark dynamic metadata
1565            needed for reprocessing with [RP]</notes></value>
1566          </enum>
1567          <description>The type of the request; either CAPTURE or
1568          REPROCESS. For HAL3, this tag is redundant.</description>
1569          <tag id="HAL2" />
1570        </entry>
1571      </controls>
1572      <static>
1573        <entry name="maxNumOutputStreams" type="int32" visibility="public"
1574        container="array">
1575          <array>
1576            <size>3</size>
1577          </array>
1578          <description>How many output streams can be allocated at
1579          the same time for each type of stream</description>
1580          <units>The number of raw sensor streams; the number of
1581          processed, uncompressed streams; and the number of
1582          JPEG-compressed streams</units>
1583          <range>&gt;=1 for Raw and JPEG-compressed stream. &gt;= 3
1584          for processed, uncompressed streams</range>
1585          <notes>Video snapshot with preview callbacks requires 3
1586          processed streams (preview, record, app callbacks) and
1587          one JPEG stream (snapshot)</notes>
1588          <tag id="BC" />
1589        </entry>
1590        <entry name="maxNumReprocessStreams" type="int32" visibility="system"
1591        container="array">
1592          <array>
1593            <size>1</size>
1594          </array>
1595          <description>How many reprocessing streams of any type
1596          can be allocated at the same time</description>
1597          <range>&gt;= 1</range>
1598        </entry>
1599      </static>
1600      <dynamic>
1601        <entry name="frameCount" type="int32" visibility="public">
1602          <description>A frame counter set by the framework. This value monotonically
1603          increases with every new result (that is, each new result has a unique
1604          frameCount value).</description>
1605          <units>count of frames</units>
1606          <range>&gt; 0</range>
1607          <notes>Reset on release()</notes>
1608        </entry>
1609        <clone entry="android.request.id" kind="controls"></clone>
1610        <clone entry="android.request.metadataMode"
1611        kind="controls"></clone>
1612        <clone entry="android.request.outputStreams"
1613        kind="controls"></clone>
1614      </dynamic>
1615    </section>
1616    <section name="scaler">
1617      <controls>
1618        <entry name="cropRegion" type="int32" visibility="public"
1619               container="array" typedef="rectangle">
1620          <array>
1621            <size>4</size>
1622          </array>
1623          <description>(x, y, width, height).
1624
1625          A rectangle with the top-level corner of (x,y) and size
1626          (width, height). The region of the sensor that is used for
1627          output. Each stream must use this rectangle to produce its
1628          output, cropping to a smaller region if necessary to
1629          maintain the stream's aspect ratio.
1630
1631          HAL2.x uses only (x, y, width)</description>
1632          <units>(x,y) of top-left corner, width and height of region
1633          in pixels; (0,0) is top-left corner of
1634          android.sensor.activeArraySize</units>
1635          <notes>
1636            Any additional per-stream cropping must be done to
1637            maximize the final pixel area of the stream.
1638
1639            For example, if the crop region is set to a 4:3 aspect
1640            ratio, then 4:3 streams should use the exact crop
1641            region. 16:9 streams should further crop vertically
1642            (letterbox).
1643
1644            Conversely, if the crop region is set to a 16:9, then 4:3
1645            outputs should crop horizontally (pillarbox), and 16:9
1646            streams should match exactly. These additional crops must
1647            be centered within the crop region.
1648
1649            The output streams must maintain square pixels at all
1650            times, no matter what the relative aspect ratios of the
1651            crop region and the stream are.  Negative values for
1652            corner are allowed for raw output if full pixel array is
1653            larger than active pixel array. Width and height may be
1654            rounded to nearest larger supportable width, especially
1655            for raw output, where only a few fixed scales may be
1656            possible. The width and height of the crop region cannot
1657            be set to be smaller than floor( activeArraySize.width /
1658            android.scaler.maxDigitalZoom ) and floor(
1659            activeArraySize.height / android.scaler.maxDigitalZoom),
1660            respectively.
1661          </notes>
1662          <tag id="BC" />
1663        </entry>
1664      </controls>
1665      <static>
1666        <entry name="availableFormats" type="int32"
1667        visibility="public" enum="true"
1668        type_notes="values from HAL_PIXEL_FORMAT_* in /system/core/include/system/graphics.h"
1669        container="array" typedef="imageFormat">
1670          <array>
1671            <size>n</size>
1672          </array>
1673          <enum>
1674            <value id="0x20">RAW_SENSOR
1675            </value>
1676            <value id="0x32315659">YV12
1677                <notes>YCrCb 4:2:0 Planar</notes>
1678            </value>
1679            <value id="0x11">YCrCb_420_SP
1680                <notes>NV21</notes>
1681            </value>
1682
1683            <value id="0x22">IMPLEMENTATION_DEFINED
1684                <notes>Hal Implementation Defined</notes>
1685            </value>
1686
1687            <value id="0x23">YCbCr_420_888
1688                <notes>Flexible YUV420 Format</notes>
1689            </value>
1690
1691            <value id="0x21">BLOB
1692                <notes>JPEG</notes>
1693            </value>
1694          </enum>
1695          <description>List of app-visible formats</description>
1696          <tag id="BC" />
1697        </entry>
1698        <entry name="availableJpegMinDurations" type="int64" visibility="public"
1699        container="array">
1700          <array>
1701            <size>n</size>
1702          </array>
1703          <description>The minimum frame duration that is supported
1704          for each resolution in availableJpegSizes. Should
1705          correspond to the frame duration when only that JPEG
1706          stream is active and captured in a burst, with all
1707          processing set to FAST</description>
1708          <notes>When multiple streams are configured, the minimum
1709          frame duration will be &gt;= max(individual stream min
1710          durations)</notes>
1711          <tag id="BC" />
1712        </entry>
1713        <entry name="availableJpegSizes" type="int32" visibility="public"
1714        container="array" typedef="size">
1715          <array>
1716            <size>n</size>
1717            <size>2</size>
1718          </array>
1719          <description>The resolutions available for output from
1720          the JPEG block. Listed as width x height</description>
1721          <range>Must include: - sensor maximum resolution Should
1722          include: - half/quarter max resolution</range>
1723          <tag id="BC" />
1724        </entry>
1725        <entry name="availableMaxDigitalZoom" type="float" visibility="public">
1726          <description>The maximum ratio between active area width
1727          and crop region width, or between active area height and
1728          crop region height, if the crop region height is larger
1729          than width</description>
1730          <range>&gt;=1</range>
1731          <tag id="BC" />
1732        </entry>
1733        <entry name="availableProcessedMinDurations" type="int64" visibility="public"
1734        container="array">
1735          <array>
1736            <size>n</size>
1737          </array>
1738          <description>The minimum frame duration that is supported
1739          for each resolution in availableProcessedSizes. Should
1740          correspond to the frame duration when only that processed
1741          stream is active, with all processing set to
1742          FAST</description>
1743          <notes>When multiple streams are configured, the minimum
1744          frame duration will be &gt;= max(individual stream min
1745          durations)</notes>
1746          <tag id="BC" />
1747        </entry>
1748        <entry name="availableProcessedSizes" type="int32" visibility="public"
1749        container="array" typedef="size">
1750          <array>
1751            <size>n</size>
1752            <size>2</size>
1753          </array>
1754          <description>The resolutions available for use with
1755          processed output streams, such as YV12, NV12, and
1756          platform opaque YUV/RGB streams to the GPU or video
1757          encoders. Listed as width, height</description>
1758          <range>Must include: - sensor maximum resolution -
1759          standard QCIF, 240p, 480p, 720p, and 1080p
1760          resolutions</range>
1761          <notes>The actual supported resolution list may be limited by
1762          consumer end points for different use cases. For example, for
1763          recording use case, the largest supported resolution may be
1764          limited by max supported size from encoder, for preview use
1765          case, the largest supported resolution may be limited by max
1766          resolution SurfaceTexture/SurfaceView can support.
1767          </notes>
1768          <tag id="BC" />
1769        </entry>
1770        <entry name="availableRawMinDurations" type="int64"
1771        container="array">
1772          <array>
1773            <size>n</size>
1774          </array>
1775          <description>The minimum frame duration that is supported
1776          for each raw resolution in availableRawSizes. Should
1777          correspond to the frame duration when only the raw stream
1778          is active.</description>
1779          <notes>When multiple streams are configured, the minimum
1780          frame duration will be &gt;= max(individual stream min
1781          durations)</notes>
1782          <tag id="BC" />
1783        </entry>
1784        <entry name="availableRawSizes" type="int32"
1785        container="array" typedef="size">
1786          <array>
1787            <size>n</size>
1788            <size>2</size>
1789          </array>
1790          <description>The resolutions available for use with raw
1791          sensor output streams, listed as width,
1792          height</description>
1793          <range>Must include: - sensor maximum resolution</range>
1794        </entry>
1795      </static>
1796      <dynamic>
1797        <clone entry="android.scaler.cropRegion" kind="controls">
1798        </clone>
1799      </dynamic>
1800    </section>
1801    <section name="sensor">
1802      <controls>
1803        <entry name="exposureTime" type="int64" visibility="public">
1804          <description>Duration each pixel is exposed to
1805          light.
1806
1807          If the sensor can't expose this exact duration, it should shorten the
1808          duration exposed to the nearest possible value (rather than expose longer).
1809          </description>
1810          <units>nanoseconds</units>
1811          <range>android.sensor.info.exposureTimeRange</range>
1812          <notes>1/10000 - 30 sec range. No bulb mode</notes>
1813          <tag id="V1" />
1814        </entry>
1815        <entry name="frameDuration" type="int64" visibility="public">
1816          <description>Duration from start of frame exposure to
1817          start of next frame exposure</description>
1818          <units>nanoseconds</units>
1819          <range>see android.sensor.info.maxFrameDuration,
1820          android.scaler.info.availableMinFrameDurations</range>
1821          <notes>Exposure time has priority, so duration is set to
1822          max(duration, exposure time + overhead)</notes>
1823          <tag id="V1" />
1824          <tag id="BC" />
1825        </entry>
1826        <entry name="sensitivity" type="int32" visibility="public">
1827          <description>Gain applied to image data. Must be
1828          implemented through analog gain only if set to values
1829          below 'maximum analog sensitivity'.
1830
1831          If the sensor can't apply this exact gain, it should lessen the
1832          gain to the nearest possible value (rather than gain more).
1833          </description>
1834          <units>ISO arithmetic units</units>
1835          <range>android.sensor.info.sensitivityRange</range>
1836          <notes>ISO 12232:2006 REI method</notes>
1837          <tag id="V1" />
1838        </entry>
1839      </controls>
1840      <static>
1841        <namespace name="info">
1842          <entry name="activeArraySize" type="int32" visibility="public"
1843          type_notes="Four ints defining the active pixel rectangle"
1844          container="array"
1845          typedef="rectangle">
1846            <array>
1847              <size>4</size>
1848            </array>
1849            <description>Area of raw data which corresponds to only
1850            active pixels; smaller or equal to
1851            pixelArraySize.</description>
1852            <units>xmin, ymin, width, height. Top left of full
1853            pixel array is (0,0)</units>
1854            <tag id="DNG" />
1855          </entry>
1856          <entry name="sensitivityRange" type="int32" visibility="public"
1857          type_notes="Range of supported sensitivities"
1858          container="array">
1859            <array>
1860              <size>2</size>
1861            </array>
1862            <description>Range of valid sensitivities</description>
1863            <range>Min &lt;= 100, Max &gt;= 1600</range>
1864            <tag id="BC" />
1865            <tag id="V1" />
1866          </entry>
1867          <entry name="colorFilterArrangement" type="byte" enum="true">
1868            <enum>
1869              <value>RGGB</value>
1870              <value>GRBG</value>
1871              <value>GBRG</value>
1872              <value>BGGR</value>
1873              <value>RGB
1874              <notes>Sensor is not Bayer; output has 3 16-bit
1875              values for each pixel, instead of just 1 16-bit value
1876              per pixel.</notes></value>
1877            </enum>
1878            <description>Arrangement of color filters on sensor;
1879            represents the colors in the top-left 2x2 section of
1880            the sensor, in reading order</description>
1881            <tag id="DNG" />
1882          </entry>
1883          <entry name="exposureTimeRange" type="int64" visibility="public"
1884          type_notes="nanoseconds" container="array">
1885            <array>
1886              <size>2</size>
1887            </array>
1888            <description>Range of valid exposure
1889            times</description>
1890            <range>Min &lt;= 100e3 (100 us), Max &gt;= 30e9 (30
1891            sec)</range>
1892            <tag id="V1" />
1893          </entry>
1894          <entry name="maxFrameDuration" type="int64" visibility="public">
1895            <description>Maximum possible frame duration (minimum frame
1896            rate)</description>
1897            <units>nanoseconds</units>
1898            <range>&gt;= 30e9</range>
1899            <notes>Minimum duration is a function of resolution,
1900            processing settings. See
1901            android.scaler.availableProcessedMinDurations
1902            android.scaler.availableJpegMinDurations
1903            android.scaler.availableRawMinDurations</notes>
1904            <tag id="BC" />
1905            <tag id="V1" />
1906          </entry>
1907          <entry name="physicalSize" type="float" visibility="public"
1908          type_notes="width x height in millimeters"
1909          container="array">
1910            <array>
1911              <size>2</size>
1912            </array>
1913            <description>The physical dimensions of the full pixel
1914            array</description>
1915            <notes>Needed for FOV calculation for old API</notes>
1916            <tag id="V1" />
1917            <tag id="BC" />
1918          </entry>
1919          <entry name="pixelArraySize" type="int32"
1920          container="array" typedef="size">
1921            <array>
1922              <size>2</size>
1923            </array>
1924            <description>Dimensions of full pixel array, possibly
1925            including black calibration pixels</description>
1926            <notes>Maximum output resolution for raw format must
1927            match this in
1928            android.scaler.info.availableSizesPerFormat</notes>
1929            <tag id="DNG" />
1930            <tag id="BC" />
1931          </entry>
1932          <entry name="whiteLevel" type="int32">
1933            <description>Maximum raw value output by
1934            sensor</description>
1935            <range>&gt; 1024 (10-bit output)</range>
1936            <notes>Defines sensor bit depth (10-14 bits is
1937            expected)</notes>
1938            <tag id="DNG" />
1939          </entry>
1940        </namespace>
1941        <entry name="baseGainFactor" type="rational" visibility="public">
1942          <description>Gain factor from electrons to raw units when
1943          ISO=100</description>
1944          <tag id="V1" />
1945        </entry>
1946        <entry name="blackLevelPattern" type="int32"
1947        type_notes="2x2 raw count block" container="array">
1948          <array>
1949            <size>4</size>
1950          </array>
1951          <description>A fixed black level offset for each of the
1952          Bayer mosaic channels</description>
1953          <range>&gt;= 0 each</range>
1954          <notes>As per DNG BlackLevelRepeatDim / BlackLevel
1955          tags</notes>
1956          <tag id="DNG" />
1957        </entry>
1958        <entry name="calibrationTransform1" type="rational"
1959        type_notes="3x3 matrix in row-major-order"
1960        container="array">
1961          <array>
1962            <size>9</size>
1963          </array>
1964          <description>Per-device calibration on top of color space
1965          transform 1</description>
1966          <tag id="DNG" />
1967        </entry>
1968        <entry name="calibrationTransform2" type="rational"
1969        type_notes="3x3 matrix in row-major-order"
1970        container="array">
1971          <array>
1972            <size>9</size>
1973          </array>
1974          <description>Per-device calibration on top of color space
1975          transform 2</description>
1976          <tag id="DNG" />
1977        </entry>
1978        <entry name="colorTransform1" type="rational"
1979        type_notes="3x3 matrix in row-major-order"
1980        container="array">
1981          <array>
1982            <size>9</size>
1983          </array>
1984          <description>Linear mapping from XYZ (D50) color space to
1985          reference linear sensor color, for first reference
1986          illuminant</description>
1987          <notes>Use as follows XYZ = inv(transform) * clip( (raw -
1988          black level(raw) ) / ( white level - max black level) ).
1989          At least in the simple case</notes>
1990          <tag id="DNG" />
1991        </entry>
1992        <entry name="colorTransform2" type="rational"
1993        type_notes="3x3 matrix in row-major-order"
1994        container="array">
1995          <array>
1996            <size>9</size>
1997          </array>
1998          <description>Linear mapping from XYZ (D50) color space to
1999          reference linear sensor color, for second reference
2000          illuminant</description>
2001          <tag id="DNG" />
2002        </entry>
2003        <entry name="forwardMatrix1" type="rational"
2004        type_notes="3x3 matrix in row-major-order"
2005        container="array">
2006          <array>
2007            <size>9</size>
2008          </array>
2009          <description>Used by DNG for better WB
2010          adaptation</description>
2011          <tag id="DNG" />
2012        </entry>
2013        <entry name="forwardMatrix2" type="rational"
2014        type_notes="3x3 matrix in row-major-order"
2015        container="array">
2016          <array>
2017            <size>9</size>
2018          </array>
2019          <description>Used by DNG for better WB
2020          adaptation</description>
2021          <tag id="DNG" />
2022        </entry>
2023        <entry name="maxAnalogSensitivity" type="int32" visibility="public">
2024          <description>Maximum sensitivity that is implemented
2025          purely through analog gain</description>
2026          <notes>For android.sensor.sensitivity values less than or
2027          equal to this, all applied gain must be analog. For
2028          values above this, it can be a mix of analog and
2029          digital</notes>
2030          <tag id="V1" />
2031        </entry>
2032        <entry name="noiseModelCoefficients" type="float"
2033        type_notes="float constants A, B for the noise variance model"
2034        container="array">
2035          <array>
2036            <size>2</size>
2037          </array>
2038          <description>Estimation of sensor noise
2039          characteristics</description>
2040          <units>var(raw pixel value) = electrons * (baseGainFactor
2041          * iso/100)^2 + A * (baseGainFactor * iso/100)^2 +
2042          B</units>
2043          <notes>A represents sensor read noise before analog
2044          amplification; B represents noise from A/D conversion and
2045          other circuits after amplification. Both noise sources
2046          are assumed to be gaussian, independent, and not to vary
2047          across the sensor</notes>
2048          <tag id="V1" />
2049        </entry>
2050        <entry name="orientation" type="int32" visibility="public">
2051          <description>Clockwise angle through which the output
2052          image needs to be rotated to be upright on the device
2053          screen in its native orientation. Also defines the
2054          direction of rolling shutter readout, which is from top
2055          to bottom in the sensor's coordinate system</description>
2056          <units>degrees clockwise rotation, only multiples of
2057          90</units>
2058          <range>0,90,180,270</range>
2059          <tag id="BC" />
2060        </entry>
2061        <entry name="referenceIlluminant1" type="byte" enum="true">
2062          <enum>
2063            <value id="1">DAYLIGHT</value>
2064            <value id="2">FLUORESCENT</value>
2065            <value id="3">TUNGSTEN
2066            <notes>Incandescent light</notes></value>
2067            <value id="4">FLASH</value>
2068            <value id="9">FINE_WEATHER</value>
2069            <value id="10">CLOUDY_WEATHER</value>
2070            <value id="11">SHADE</value>
2071            <value id="12">DAYLIGHT_FLUORESCENT
2072            <notes>D 5700 - 7100K</notes></value>
2073            <value id="13">DAY_WHITE_FLUORESCENT
2074            <notes>N 4600 - 5400K</notes></value>
2075            <value id="14">COOL_WHITE_FLUORESCENT
2076            <notes>W 3900 - 4500K</notes></value>
2077            <value id="15">WHITE_FLUORESCENT
2078            <notes>WW 3200 - 3700K</notes></value>
2079            <value id="17">STANDARD_A</value>
2080            <value id="18">STANDARD_B</value>
2081            <value id="19">STANDARD_C</value>
2082            <value id="20">D55</value>
2083            <value id="21">D65</value>
2084            <value id="22">D75</value>
2085            <value id="23">D50</value>
2086            <value id="24">ISO_STUDIO_TUNGSTEN</value>
2087          </enum>
2088          <description>Light source used to define transform
2089          1</description>
2090          <notes>[EXIF LightSource tag] Must all these be
2091          supported? Need CCT for each!</notes>
2092          <tag id="DNG" />
2093          <tag id="EXIF" />
2094        </entry>
2095        <entry name="referenceIlluminant2" type="byte">
2096          <description>Light source used to define transform
2097          2</description>
2098          <units>Same as illuminant 1</units>
2099        </entry>
2100      </static>
2101      <dynamic>
2102        <clone entry="android.sensor.exposureTime" kind="controls">
2103        </clone>
2104        <clone entry="android.sensor.frameDuration"
2105        kind="controls"></clone>
2106        <clone entry="android.sensor.sensitivity" kind="controls">
2107        </clone>
2108        <entry name="timestamp" type="int64" visibility="public">
2109          <description>Time at start of exposure of first
2110          row</description>
2111          <units>nanoseconds</units>
2112          <range>&gt; 0</range>
2113          <notes>Monotonic, should be synced to other timestamps in
2114          system</notes>
2115          <tag id="BC" />
2116        </entry>
2117        <entry name="temperature" type="float" visibility="public">
2118          <description>The temperature of the sensor, sampled at the time
2119          exposure began for this frame.
2120
2121          The thermal diode being queried should be inside the sensor PCB, or
2122          somewhere close to it.
2123          </description>
2124
2125          <units>celsius</units>
2126          <range>Optional. This value is missing if no temperature is available.</range>
2127        </entry>
2128      </dynamic>
2129    </section>
2130    <section name="shading">
2131      <controls>
2132        <entry name="mode" type="byte" enum="true">
2133          <enum>
2134            <value>OFF
2135            <notes>No shading correction is applied</notes></value>
2136            <value>FAST
2137            <notes>Must not slow down frame rate relative to raw
2138            bayer output</notes></value>
2139            <value>HIGH_QUALITY
2140            <notes>Frame rate may be reduced by high
2141            quality</notes></value>
2142          </enum>
2143          <description>Quality of lens shading correction applied
2144          to the image data</description>
2145        </entry>
2146        <entry name="strength" type="byte">
2147          <description>Control the amount of shading correction
2148          applied to the images</description>
2149          <units>unitless: 1-10; 10 is full shading
2150          compensation</units>
2151          <tag id="ADV" />
2152        </entry>
2153      </controls>
2154      <dynamic>
2155        <clone entry="android.shading.mode" kind="controls">
2156        </clone>
2157      </dynamic>
2158    </section>
2159    <section name="statistics">
2160      <controls>
2161        <entry name="faceDetectMode" type="byte" visibility="public" enum="true">
2162          <enum>
2163            <value>OFF</value>
2164            <value>SIMPLE
2165            <notes>Optional Return rectangle and confidence
2166            only</notes></value>
2167            <value>FULL
2168            <notes>Optional Return all face
2169            metadata</notes></value>
2170          </enum>
2171          <description>State of the face detector
2172          unit</description>
2173          <range>
2174          android.statistics.info.availableFaceDetectModes</range>
2175          <notes>Whether face detection is enabled, and whether it
2176          should output just the basic fields or the full set of
2177          fields. Value must be one of the
2178          android.statistics.info.availableFaceDetectModes.</notes>
2179          <tag id="BC" />
2180        </entry>
2181        <entry name="histogramMode" type="byte" enum="true" typedef="boolean">
2182          <enum>
2183            <value>OFF</value>
2184            <value>ON</value>
2185          </enum>
2186          <description>Operating mode for histogram
2187          generation</description>
2188          <tag id="V1" />
2189        </entry>
2190        <entry name="sharpnessMapMode" type="byte" enum="true" typedef="boolean">
2191          <enum>
2192            <value>OFF</value>
2193            <value>ON</value>
2194          </enum>
2195          <description>Operating mode for sharpness map
2196          generation</description>
2197          <tag id="V1" />
2198        </entry>
2199      </controls>
2200      <static>
2201        <namespace name="info">
2202          <entry name="availableFaceDetectModes" type="byte"
2203                 visibility="public"
2204                 type_notes="List of enums from android.statistics.faceDetectMode"
2205                 container="array">
2206            <array>
2207              <size>n</size>
2208            </array>
2209            <description>Which face detection modes are available,
2210            if any</description>
2211            <units>List of enum:
2212            OFF
2213            SIMPLE
2214            FULL</units>
2215            <notes>OFF means face detection is disabled, it must
2216            be included in the list.
2217
2218            SIMPLE means the device supports the
2219            android.statistics.faceRectangles and
2220            android.statistics.faceScores outputs.
2221
2222            FULL means the device additionally supports the
2223            android.statistics.faceIds and
2224            android.statistics.faceLandmarks outputs.
2225            </notes>
2226          </entry>
2227          <entry name="histogramBucketCount" type="int32">
2228            <description>Number of histogram buckets
2229            supported</description>
2230            <range>&gt;= 64</range>
2231          </entry>
2232          <entry name="maxFaceCount" type="int32" visibility="public" >
2233            <description>Maximum number of simultaneously detectable
2234            faces</description>
2235            <range>&gt;= 4 if availableFaceDetectionModes lists
2236            modes besides OFF, otherwise 0</range>
2237          </entry>
2238          <entry name="maxHistogramCount" type="int32">
2239            <description>Maximum value possible for a histogram
2240            bucket</description>
2241          </entry>
2242          <entry name="maxSharpnessMapValue" type="int32">
2243            <description>Maximum value possible for a sharpness map
2244            region.</description>
2245          </entry>
2246          <entry name="sharpnessMapSize" type="int32"
2247          type_notes="width x height" container="array" typedef="size">
2248            <array>
2249              <size>2</size>
2250            </array>
2251            <description>Dimensions of the sharpness
2252            map</description>
2253            <range>Must be at least 32 x 32</range>
2254          </entry>
2255        </namespace>
2256      </static>
2257      <dynamic>
2258        <clone entry="android.statistics.faceDetectMode"
2259        kind="controls"></clone>
2260        <entry name="faceIds" type="int32" visibility="public" container="array">
2261          <array>
2262            <size>n</size>
2263          </array>
2264          <description>List of unique IDs for detected
2265          faces</description>
2266          <notes>Only available if faceDetectMode == FULL</notes>
2267          <tag id="BC" />
2268        </entry>
2269        <entry name="faceLandmarks" type="int32" visibility="public"
2270        type_notes="(leftEyeX, leftEyeY, rightEyeX, rightEyeY, mouthX, mouthY)"
2271        container="array">
2272          <array>
2273            <size>n</size>
2274            <size>6</size>
2275          </array>
2276          <description>List of landmarks for detected
2277          faces</description>
2278          <notes>Only available if faceDetectMode == FULL</notes>
2279          <tag id="BC" />
2280        </entry>
2281        <entry name="faceRectangles" type="int32" visibility="public"
2282        type_notes="(xmin, ymin, xmax, ymax). (0,0) is top-left of active pixel area"
2283        container="array" typedef="rectangle">
2284          <array>
2285            <size>n</size>
2286            <size>4</size>
2287          </array>
2288          <description>List of the bounding rectangles for detected
2289          faces</description>
2290          <notes>Only available if faceDetectMode != OFF</notes>
2291          <tag id="BC" />
2292        </entry>
2293        <entry name="faceScores" type="byte" visibility="public" container="array">
2294          <array>
2295            <size>n</size>
2296          </array>
2297          <description>List of the face confidence scores for
2298          detected faces</description>
2299          <range>1-100</range>
2300          <notes>Only available if faceDetectMode != OFF. The value should be
2301          meaningful (for example, setting 100 at all times is illegal).</notes>
2302          <tag id="BC" />
2303        </entry>
2304        <entry name="histogram" type="int32"
2305        type_notes="count of pixels for each color channel that fall into each histogram bucket, scaled to be between 0 and maxHistogramCount"
2306        container="array">
2307          <array>
2308            <size>n</size>
2309            <size>3</size>
2310          </array>
2311          <description>A 3-channel histogram based on the raw
2312          sensor data</description>
2313          <notes>The k'th bucket (0-based) covers the input range
2314          (with w = android.sensor.info.whiteLevel) of [ k * w/N,
2315          (k + 1) * w / N ). If only a monochrome sharpness map is
2316          supported, all channels should have the same data</notes>
2317          <tag id="V1" />
2318        </entry>
2319        <clone entry="android.statistics.histogramMode"
2320        kind="controls"></clone>
2321        <entry name="sharpnessMap" type="int32"
2322        type_notes="estimated sharpness for each region of the input image. Normalized to be between 0 and maxSharpnessMapValue. Higher values mean sharper (better focused)"
2323        container="array">
2324          <array>
2325            <size>n</size>
2326            <size>m</size>
2327            <size>3</size>
2328          </array>
2329          <description>A 3-channel sharpness map, based on the raw
2330          sensor data</description>
2331          <notes>If only a monochrome sharpness map is supported,
2332          all channels should have the same data</notes>
2333          <tag id="V1" />
2334        </entry>
2335        <clone entry="android.statistics.sharpnessMapMode"
2336        kind="controls"></clone>
2337        <entry name="lensShadingMap" type="float" visibility="public"
2338               type_notes="2D array of float gain factors per channel to correct lens shading"
2339               container="array">
2340          <array>
2341            <size>4</size>
2342            <size>n</size>
2343            <size>m</size>
2344          </array>
2345          <description>A low-resolution map of lens shading, per
2346          color channel</description>
2347          <range>Each gain factor is &gt;= 1</range>
2348          <notes>Assume bilinear interpolation of map. The least
2349          shaded section of the image should have a gain factor
2350          of 1; all other sections should have gains above 1.
2351          the map should be on the order of 30-40 rows, and
2352          must be smaller than 64x64.
2353
2354          When android.colorCorrection.mode = TRANSFORM_MATRIX, the map
2355          must take into account the colorCorrection settings.
2356          </notes>
2357        </entry>
2358        <entry name="predictedColorGains" type="float" visibility="public"
2359               type_notes="A 1D array of floats for 4 color channel gains"
2360               container="array">
2361          <array>
2362            <size>4</size>
2363          </array>
2364          <description>The best-fit color channel gains calculated
2365          by the HAL's statistics units for the current output frame
2366          </description>
2367          <notes>
2368          This may be different than the gains used for this frame,
2369          since statistics processing on data from a new frame
2370          typically completes after the transform has already been
2371          applied to that frame.
2372
2373          The 4 channel gains are defined in Bayer domain,
2374          see android.colorCorrection.gains for details.
2375
2376          This value should always be calculated by the AWB block,
2377          regardless of the android.control.* current values.
2378          </notes>
2379        </entry>
2380        <entry name="predictedColorTransform" type="rational" visibility="public"
2381               type_notes="3x3 rational matrix in row-major order"
2382               container="array">
2383          <array>
2384            <size>3</size>
2385            <size>3</size>
2386          </array>
2387          <description>The best-fit color transform matrix estimate
2388          calculated by the HAL's statistics units for the current
2389          output frame</description>
2390          <notes>The HAL must provide the estimate from its
2391          statistics unit on the white balance transforms to use
2392          for the next frame. These are the values the HAL believes
2393          are the best fit for the current output frame. This may
2394          be different than the transform used for this frame, since
2395          statistics processing on data from a new frame typically
2396          completes after the transform has already been applied to
2397          that frame.
2398
2399          These estimates must be provided for all frames, even if
2400          capture settings and color transforms are set by the application.
2401
2402          This value should always be calculated by the AWB block,
2403          regardless of the android.control.* current values.
2404          </notes>
2405        </entry>
2406        <entry name="sceneFlicker" type="byte" visibility="public" enum="true">
2407          <enum>
2408            <value>NONE</value>
2409            <value>50HZ</value>
2410            <value>60HZ</value>
2411          </enum>
2412          <description>The HAL estimated scene illumination lighting
2413          frequency</description>
2414          <notes>Report NONE if there doesn't appear to be flickering
2415          illumination</notes>
2416        </entry>
2417      </dynamic>
2418      <controls>
2419        <entry name="lensShadingMapMode" type="byte" visibility="public" enum="true">
2420          <enum>
2421            <value>OFF</value>
2422            <value>ON</value>
2423          </enum>
2424          <description>Whether the HAL needs to output the lens
2425          shading map in output result metadata</description>
2426          <notes>When set to ON,
2427          android.statistics.lensShadingMap must be provided in
2428          the output result metdata.</notes>
2429        </entry>
2430      </controls>
2431    </section>
2432    <section name="tonemap">
2433      <controls>
2434        <entry name="curveBlue" type="float" visibility="public"
2435        type_notes="1D array of float pairs (P_IN, P_OUT). The maximum number of pairs is specified by android.tonemap.maxCurvePoints."
2436        container="array">
2437          <array>
2438            <size>n</size>
2439            <size>2</size>
2440          </array>
2441          <description>Table mapping blue input values to output
2442          values</description>
2443          <units>same as android.tonemap.curveRed</units>
2444          <range>same as android.tonemap.curveRed</range>
2445          <notes>Tonemapping / contrast / gamma curve for the blue
2446          channel, to use when android.tonemap.mode is CONTRAST_CURVE.
2447
2448          See android.tonemap.curveRed for more details.</notes>
2449        </entry>
2450        <entry name="curveGreen" type="float" visibility="public"
2451        type_notes="1D array of float pairs (P_IN, P_OUT). The maximum number of pairs is specified by android.tonemap.maxCurvePoints."
2452        container="array">
2453          <array>
2454            <size>n</size>
2455            <size>2</size>
2456          </array>
2457          <description>Table mapping green input values to output
2458          values</description>
2459          <units>same as android.tonemap.curveRed</units>
2460          <range>same as android.tonemap.curveRed</range>
2461          <notes>Tonemapping / contrast / gamma curve for the green
2462          channel, to use when android.tonemap.mode is CONTRAST_CURVE.
2463
2464          See android.tonemap.curveRed for more details.</notes>
2465        </entry>
2466        <entry name="curveRed" type="float" visibility="public"
2467        type_notes="1D array of float pairs (P_IN, P_OUT). The maximum number of pairs is specified by android.tonemap.maxCurvePoints."
2468        container="array">
2469          <array>
2470            <size>n</size>
2471            <size>2</size>
2472          </array>
2473          <description>Table mapping red input values to output
2474          values</description>
2475          <range>0-1 on input and output coordinates.</range>
2476          <notes>Tonemapping / contrast / gamma curve for the red
2477          channel, to use when android.tonemap.mode is CONTRAST_CURVE.
2478
2479          Since the input and output ranges may vary depending on
2480          the camera pipeline, the input and output pixel values
2481          are represented by normalized floating-point values
2482          between 0 and 1, with 0 == black and 1 == white.
2483
2484          The curve should be linearly interpolated between the
2485          defined points. The points will be listed in increasing
2486          order of P_IN. For example, if the array is: [0.0, 0.0,
2487          0.3, 0.5, 1.0, 1.0], then the input-&gt;output mapping
2488          for a few sample points would be: 0 -&gt; 0, 0.15 -&gt;
2489          0.25, 0.3 -&gt; 0.5, 0.5 -&gt; 0.64</notes>
2490          <tag id="DNG" />
2491        </entry>
2492        <entry name="mode" type="byte" visibility="public" enum="true">
2493          <enum>
2494            <value>CONTRAST_CURVE
2495            <notes>Use the tone mapping curve specified in
2496            android.tonemap.curve</notes></value>
2497            <value>FAST
2498            <notes>Must not slow down frame rate relative to raw
2499            bayer output</notes></value>
2500            <value>HIGH_QUALITY
2501            <notes>Frame rate may be reduced by high
2502            quality</notes></value>
2503          </enum>
2504        </entry>
2505      </controls>
2506      <static>
2507        <entry name="maxCurvePoints" type="int32" visibility="public" >
2508          <description>Maximum number of supported points in the
2509          tonemap curve</description>
2510          <range>&gt;= 128</range>
2511        </entry>
2512      </static>
2513      <dynamic>
2514        <clone entry="android.tonemap.curveBlue" kind="controls">
2515        </clone>
2516        <clone entry="android.tonemap.curveGreen" kind="controls">
2517        </clone>
2518        <clone entry="android.tonemap.curveRed" kind="controls">
2519        </clone>
2520        <clone entry="android.tonemap.mode" kind="controls">
2521        </clone>
2522      </dynamic>
2523    </section>
2524    <section name="led">
2525      <controls>
2526        <entry name="transmit" type="byte" visibility="hidden" enum="true"
2527               typedef="boolean">
2528          <enum>
2529            <value>OFF</value>
2530            <value>ON</value>
2531          </enum>
2532          <description>This LED is nominally used to indicate to the user
2533          that the camera is powered on and may be streaming images back to the
2534          Application Processor. In certain rare circumstances, the OS may
2535          disable this when video is processed locally and not transmitted to
2536          any untrusted applications.
2537
2538          In particular, the LED *must* always be on when the data could be
2539          transmitted off the device. The LED *should* always be on whenever
2540          data is stored locally on the device.
2541
2542          The LED *may* be off if a trusted application is using the data that
2543          doesn't violate the above rules.
2544          </description>
2545        </entry>
2546      </controls>
2547      <dynamic>
2548        <clone entry="android.led.transmit" kind="controls"></clone>
2549      </dynamic>
2550      <static>
2551        <entry name="availableLeds" type="byte" visibility="hidden" enum="true"
2552               container="array">
2553          <array>
2554            <size>n</size>
2555          </array>
2556          <enum>
2557            <value>TRANSMIT
2558              <notes>android.led.transmit control is used</notes>
2559            </value>
2560          </enum>
2561          <description>A list of camera LEDs that are available on this system.
2562          </description>
2563        </entry>
2564      </static>
2565    </section>
2566    <section name="info">
2567      <static>
2568        <entry name="supportedHardwareLevel" type="byte" visibility="public"
2569               enum="true" >
2570          <enum>
2571            <value>LIMITED</value>
2572            <value>FULL</value>
2573          </enum>
2574          <description>
2575          The camera 3 HAL device can implement one of two possible
2576          operational modes; limited and full. Full support is
2577          expected from new higher-end devices. Limited mode has
2578          hardware requirements roughly in line with those for a
2579          camera HAL device v1 implementation, and is expected from
2580          older or inexpensive devices. Full is a strict superset of
2581          limited, and they share the same essential operational flow.
2582
2583          For full details refer to "S3. Operational Modes" in camera3.h
2584          </description>
2585          <range>Optional. Default value is LIMITED.</range>
2586        </entry>
2587      </static>
2588    </section>
2589    <section name="blackLevel">
2590      <controls>
2591        <entry name="lock" type="byte" visibility="public" enum="true"
2592               typedef="boolean">
2593          <enum>
2594            <value>OFF</value>
2595            <value>ON</value>
2596          </enum>
2597          <description> Whether black-level compensation is locked
2598          to its current values, or is free to vary</description>
2599          <notes>When set to ON, the values used for black-level
2600          compensation must not change until the lock is set to
2601          OFF
2602
2603          Since changes to certain capture parameters (such as
2604          exposure time) may require resetting of black level
2605          compensation, the HAL must report whether setting the
2606          black level lock was successful in the output result
2607          metadata.
2608
2609          The black level locking must happen at the sensor, and not at the ISP.
2610          If for some reason black level locking is no longer legal (for example,
2611          the analog gain has changed, which forces black levels to be
2612          recalculated), then the HAL is free to override this request (and it
2613          must report 'OFF' when this does happen) until the next time locking
2614          is legal again.</notes>
2615          <tag id="HAL2" />
2616        </entry>
2617      </controls>
2618      <dynamic>
2619        <clone entry="android.blackLevel.lock"
2620        kind="controls"></clone>
2621      </dynamic>
2622    </section>
2623  </namespace>
2624</metadata>
2625