1/*
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
17/**
18 * !! Do not reference this file directly !!
19 *
20 * It is logically a part of camera_metadata.c.  It is broken out for ease of
21 * maintaining the tag info.
22 *
23 * Array assignments are done using specified-index syntax to keep things in
24 * sync with camera_metadata_tags.h
25 */
26
27const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {
28    [ANDROID_REQUEST]        = "android.request",
29    [ANDROID_LENS]           = "android.lens",
30    [ANDROID_LENS_INFO]      = "android.lens.info",
31    [ANDROID_SENSOR]         = "android.sensor",
32    [ANDROID_SENSOR_INFO]    = "android.sensor.info",
33    [ANDROID_FLASH]          = "android.flash",
34    [ANDROID_FLASH_INFO]     = "android.flash.info",
35    [ANDROID_HOT_PIXEL]      = "android.hotPixel",
36    [ANDROID_HOT_PIXEL_INFO] = "android.hotPixel.info",
37    [ANDROID_DEMOSAIC]       = "android.demosaic",
38    [ANDROID_DEMOSAIC_INFO]  = "android.demosaic.info",
39    [ANDROID_NOISE]          = "android.noiseReduction",
40    [ANDROID_NOISE_INFO]     = "android.noiseReduction.info",
41    [ANDROID_SHADING]        = "android.shadingCorrection",
42    [ANDROID_SHADING_INFO]   = "android.shadingCorrection.info",
43    [ANDROID_GEOMETRIC]      = "android.geometricCorrection",
44    [ANDROID_GEOMETRIC_INFO] = "android.geometricCorrection.info",
45    [ANDROID_COLOR]          = "android.colorCorrection",
46    [ANDROID_COLOR_INFO]     = "android.colorCorrection.info",
47    [ANDROID_TONEMAP]        = "android.tonemap",
48    [ANDROID_TONEMAP_INFO]   = "android.tonemap.info",
49    [ANDROID_EDGE]           = "android.edge",
50    [ANDROID_EDGE_INFO]      = "android.edge.info",
51    [ANDROID_SCALER]         = "android.scaler",
52    [ANDROID_SCALER_INFO]    = "android.scaler.info",
53    [ANDROID_JPEG]           = "android.jpeg",
54    [ANDROID_JPEG_INFO]      = "android.jpeg.info",
55    [ANDROID_STATS]          = "android.statistics",
56    [ANDROID_STATS_INFO]     = "android.statistics.info",
57    [ANDROID_CONTROL]        = "android.control",
58    [ANDROID_CONTROL_INFO]   = "android.control.info",
59    [ANDROID_QUIRKS_INFO]    = "android.quirks.info"
60};
61
62unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
63    [ANDROID_REQUEST]        = { ANDROID_REQUEST_START,
64                                 ANDROID_REQUEST_END },
65    [ANDROID_LENS]           = { ANDROID_LENS_START,
66                                 ANDROID_LENS_END },
67    [ANDROID_LENS_INFO]      = { ANDROID_LENS_INFO_START,
68                                 ANDROID_LENS_INFO_END },
69    [ANDROID_SENSOR]         = { ANDROID_SENSOR_START,
70                                 ANDROID_SENSOR_END },
71    [ANDROID_SENSOR_INFO]    = { ANDROID_SENSOR_INFO_START,
72                                 ANDROID_SENSOR_INFO_END },
73    [ANDROID_FLASH]          = { ANDROID_FLASH_START,
74                                 ANDROID_FLASH_END },
75    [ANDROID_FLASH_INFO]     = { ANDROID_FLASH_INFO_START,
76                                 ANDROID_FLASH_INFO_END },
77    [ANDROID_HOT_PIXEL]      = { ANDROID_HOT_PIXEL_START,
78                                 ANDROID_HOT_PIXEL_END },
79    [ANDROID_HOT_PIXEL_INFO] = { ANDROID_HOT_PIXEL_INFO_START,
80                                 ANDROID_HOT_PIXEL_INFO_END },
81    [ANDROID_DEMOSAIC]       = { ANDROID_DEMOSAIC_START,
82                                 ANDROID_DEMOSAIC_END },
83    [ANDROID_DEMOSAIC_INFO]  = { ANDROID_DEMOSAIC_INFO_START,
84                                 ANDROID_DEMOSAIC_INFO_END },
85    [ANDROID_NOISE]          = { ANDROID_NOISE_START,
86                                 ANDROID_NOISE_END },
87    [ANDROID_NOISE_INFO]     = { ANDROID_NOISE_INFO_START,
88                                 ANDROID_NOISE_INFO_END },
89    [ANDROID_SHADING]        = { ANDROID_SHADING_START,
90                                 ANDROID_SHADING_END },
91    [ANDROID_SHADING_INFO]   = { ANDROID_SHADING_INFO_START,
92                                 ANDROID_SHADING_INFO_END },
93    [ANDROID_GEOMETRIC]      = { ANDROID_GEOMETRIC_START,
94                                 ANDROID_GEOMETRIC_END },
95    [ANDROID_GEOMETRIC_INFO] = { ANDROID_GEOMETRIC_INFO_START,
96                                 ANDROID_GEOMETRIC_INFO_END },
97    [ANDROID_COLOR]          = { ANDROID_COLOR_START,
98                                 ANDROID_COLOR_END },
99    [ANDROID_COLOR_INFO]     = { ANDROID_COLOR_INFO_START,
100                                 ANDROID_COLOR_INFO_END },
101    [ANDROID_TONEMAP]        = { ANDROID_TONEMAP_START,
102                                 ANDROID_TONEMAP_END },
103    [ANDROID_TONEMAP_INFO]   = { ANDROID_TONEMAP_INFO_START,
104                                 ANDROID_TONEMAP_INFO_END },
105    [ANDROID_EDGE]           = { ANDROID_EDGE_START,
106                                 ANDROID_EDGE_END },
107    [ANDROID_EDGE_INFO]      = { ANDROID_EDGE_INFO_START,
108                                 ANDROID_EDGE_INFO_END },
109    [ANDROID_SCALER]         = { ANDROID_SCALER_START,
110                                 ANDROID_SCALER_END },
111    [ANDROID_SCALER_INFO]    = { ANDROID_SCALER_INFO_START,
112                                 ANDROID_SCALER_INFO_END },
113    [ANDROID_JPEG]           = { ANDROID_JPEG_START,
114                                 ANDROID_JPEG_END },
115    [ANDROID_JPEG_INFO]      = { ANDROID_JPEG_INFO_START,
116                                 ANDROID_JPEG_INFO_END },
117    [ANDROID_STATS]          = { ANDROID_STATS_START,
118                                 ANDROID_STATS_END },
119    [ANDROID_STATS_INFO]     = { ANDROID_STATS_INFO_START,
120                                 ANDROID_STATS_INFO_END },
121    [ANDROID_CONTROL]        = { ANDROID_CONTROL_START,
122                                 ANDROID_CONTROL_END },
123    [ANDROID_CONTROL_INFO]   = { ANDROID_CONTROL_INFO_START,
124                                 ANDROID_CONTROL_INFO_END },
125    [ANDROID_QUIRKS_INFO]    = { ANDROID_QUIRKS_INFO_START,
126                                 ANDROID_QUIRKS_INFO_END }
127};
128
129// Shortcut defines to make succint names for field definitions
130#define TIDX(section, tag) \
131    [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _START ]
132
133#define TIIDX(section, tag) \
134    [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _INFO_START ]
135
136tag_info_t android_request[ANDROID_REQUEST_END -
137        ANDROID_REQUEST_START] = {
138    TIDX(REQUEST, ID)             =
139    { "id",            TYPE_INT32 },
140    TIDX(REQUEST, TYPE)  =
141    { "type",          TYPE_BYTE },
142    TIDX(REQUEST, METADATA_MODE)  =
143    { "metadataMode",  TYPE_BYTE },
144    TIDX(REQUEST, OUTPUT_STREAMS) =
145    { "outputStreams", TYPE_BYTE },
146    TIDX(REQUEST, INPUT_STREAMS) =
147    { "inputStreams", TYPE_BYTE },
148    TIDX(REQUEST, FRAME_COUNT)    =
149    { "frameCount",    TYPE_INT32 }
150};
151
152tag_info_t android_lens[ANDROID_LENS_END -
153        ANDROID_LENS_START] = {
154    TIDX(LENS, FOCUS_DISTANCE) =
155    { "focusDistance",            TYPE_FLOAT },
156    TIDX(LENS, APERTURE)       =
157    { "aperture",                 TYPE_FLOAT },
158    TIDX(LENS, FOCAL_LENGTH)   =
159    { "focalLength",              TYPE_FLOAT },
160    TIDX(LENS, FILTER_DENSITY) =
161    { "filterDensity",            TYPE_FLOAT },
162    TIDX(LENS, OPTICAL_STABILIZATION_MODE) =
163    { "opticalStabilizationMode", TYPE_BYTE },
164    TIDX(LENS, FOCUS_RANGE)    =
165    { "focusRange",               TYPE_FLOAT }
166};
167
168tag_info_t android_lens_info[ANDROID_LENS_INFO_END -
169        ANDROID_LENS_INFO_START] = {
170    TIIDX(LENS, MINIMUM_FOCUS_DISTANCE)  =
171    { "minimumFocusDistance",               TYPE_FLOAT },
172    TIIDX(LENS, HYPERFOCAL_DISTANCE) =
173    { "hyperfocalDistance",                 TYPE_FLOAT },
174    TIIDX(LENS, AVAILABLE_FOCAL_LENGTHS) =
175    { "availableFocalLengths",              TYPE_FLOAT },
176    TIIDX(LENS, AVAILABLE_APERTURES) =
177    { "availableApertures",                 TYPE_FLOAT },
178    TIIDX(LENS, AVAILABLE_FILTER_DENSITY) =
179    { "availableFilterDensities",           TYPE_FLOAT },
180    TIIDX(LENS, AVAILABLE_OPTICAL_STABILIZATION) =
181    { "availableOpticalStabilizationModes", TYPE_BYTE },
182    TIIDX(LENS, SHADING_MAP_SIZE) =
183    { "shadingMapSize",                     TYPE_INT32 },
184    TIIDX(LENS, SHADING_MAP) =
185    { "shadingMap",                         TYPE_FLOAT },
186    TIIDX(LENS, GEOMETRIC_CORRECTION_MAP_SIZE) =
187    { "geometricCorrectionMapSize",         TYPE_INT32 },
188    TIIDX(LENS, GEOMETRIC_CORRECTION_MAP) =
189    { "geometricCorrectionMap",             TYPE_FLOAT },
190    TIIDX(LENS, FACING) =
191    { "facing",                             TYPE_BYTE },
192    TIIDX(LENS, POSITION) =
193    { "position",                           TYPE_FLOAT }
194};
195
196tag_info_t android_sensor[ANDROID_SENSOR_END -
197        ANDROID_SENSOR_START] = {
198    TIDX(SENSOR, EXPOSURE_TIME) =
199    { "exposureTime",  TYPE_INT64 },
200    TIDX(SENSOR, FRAME_DURATION) =
201    { "frameDuration", TYPE_INT64 },
202    TIDX(SENSOR, SENSITIVITY) =
203    { "sensitivity",   TYPE_INT32 },
204    TIDX(SENSOR, TIMESTAMP) =
205    { "timestamp",     TYPE_INT64 }
206};
207
208tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
209        ANDROID_SENSOR_INFO_START] = {
210    TIIDX(SENSOR, EXPOSURE_TIME_RANGE) =
211    { "exposureTimeRange",      TYPE_INT64 },
212    TIIDX(SENSOR, MAX_FRAME_DURATION) =
213    { "maxFrameDuration",       TYPE_INT64 },
214    TIIDX(SENSOR, AVAILABLE_SENSITIVITIES) =
215    { "availableSensitivities", TYPE_INT32 },
216    TIIDX(SENSOR, COLOR_FILTER_ARRANGEMENT) =
217    { "colorFilterArrangement", TYPE_BYTE },
218    TIIDX(SENSOR, PHYSICAL_SIZE) =
219    { "physicalSize",           TYPE_FLOAT },
220    TIIDX(SENSOR, PIXEL_ARRAY_SIZE) =
221    { "pixelArraySize",         TYPE_INT32 },
222    TIIDX(SENSOR, ACTIVE_ARRAY_SIZE) =
223    { "activeArraySize",        TYPE_INT32 },
224    TIIDX(SENSOR, WHITE_LEVEL) =
225    { "whiteLevel",             TYPE_INT32 },
226    TIIDX(SENSOR, BLACK_LEVEL_PATTERN) =
227    { "blackLevelPattern",      TYPE_INT32 },
228    TIIDX(SENSOR, COLOR_TRANSFORM_1) =
229    { "colorTransform1",        TYPE_RATIONAL },
230    TIIDX(SENSOR, COLOR_TRANSFORM_2) =
231    { "colorTransform2",        TYPE_RATIONAL },
232    TIIDX(SENSOR, REFERENCE_ILLUMINANT_1) =
233    { "referenceIlluminant1",   TYPE_BYTE },
234    TIIDX(SENSOR, REFERENCE_ILLUMINANT_2) =
235    { "referenceIlluminant2",   TYPE_BYTE },
236    TIIDX(SENSOR, FORWARD_MATRIX_1) =
237    { "forwardMatrix1",         TYPE_RATIONAL },
238    TIIDX(SENSOR, FORWARD_MATRIX_2) =
239    { "forwardMatrix2",         TYPE_RATIONAL },
240    TIIDX(SENSOR, CALIBRATION_TRANSFORM_1) =
241    { "calibrationTransform1",  TYPE_RATIONAL },
242    TIIDX(SENSOR, CALIBRATION_TRANSFORM_2) =
243    { "calibrationTransform2",  TYPE_RATIONAL },
244    TIIDX(SENSOR, BASE_GAIN_FACTOR) =
245    { "baseGainFactor",         TYPE_RATIONAL },
246    TIIDX(SENSOR, MAX_ANALOG_SENSITIVITY) =
247    { "maxAnalogSensitivity",   TYPE_INT32 },
248    TIIDX(SENSOR, NOISE_MODEL_COEFFICIENTS) =
249    { "noiseModelCoefficients", TYPE_FLOAT },
250    TIIDX(SENSOR, ORIENTATION) =
251    { "orientation",            TYPE_INT32 }
252};
253
254tag_info_t android_flash[ANDROID_FLASH_END -
255        ANDROID_FLASH_START] = {
256    TIDX(FLASH, MODE) =
257    { "mode",          TYPE_BYTE },
258    TIDX(FLASH, FIRING_POWER) =
259    { "firingPower",   TYPE_BYTE },
260    TIDX(FLASH, FIRING_TIME) =
261    { "firingTime",    TYPE_INT64 }
262};
263
264tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
265        ANDROID_FLASH_INFO_START] = {
266    TIIDX(FLASH, AVAILABLE) =
267    { "available",      TYPE_BYTE },
268    TIIDX(FLASH, CHARGE_DURATION) =
269    { "chargeDuration", TYPE_INT64 },
270};
271
272tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
273        ANDROID_HOT_PIXEL_START] = {
274    TIDX(HOT_PIXEL, MODE) =
275    { "mode", TYPE_BYTE }
276};
277
278tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
279        ANDROID_HOT_PIXEL_INFO_START];
280
281tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
282        ANDROID_DEMOSAIC_START] = {
283    TIDX(DEMOSAIC, MODE) =
284    { "mode", TYPE_BYTE }
285};
286
287tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END -
288        ANDROID_DEMOSAIC_INFO_START];
289
290tag_info_t android_noise[ANDROID_NOISE_END -
291        ANDROID_NOISE_START] = {
292    TIDX(NOISE, MODE) =
293    { "mode",     TYPE_BYTE },
294    TIDX(NOISE, STRENGTH) =
295    { "strength", TYPE_BYTE }
296};
297
298tag_info_t android_noise_info[ANDROID_NOISE_INFO_END -
299        ANDROID_NOISE_INFO_START];
300
301tag_info_t android_shading[ANDROID_SHADING_END -
302        ANDROID_SHADING_START] = {
303    TIDX(SHADING, MODE) =
304    { "mode", TYPE_BYTE }
305};
306
307tag_info_t android_shading_info[ANDROID_SHADING_INFO_END -
308        ANDROID_SHADING_INFO_START];
309
310tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
311        ANDROID_GEOMETRIC_START] = {
312    TIDX(GEOMETRIC, MODE) =
313    { "mode", TYPE_BYTE }
314};
315
316tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END -
317        ANDROID_GEOMETRIC_INFO_START];
318
319tag_info_t android_color[ANDROID_COLOR_END -
320        ANDROID_COLOR_START] = {
321    TIDX(COLOR, MODE) =
322    { "mode",      TYPE_BYTE },
323    TIDX(COLOR, TRANSFORM) =
324    { "transform", TYPE_FLOAT }
325};
326
327tag_info_t android_color_info[ANDROID_COLOR_INFO_END -
328        ANDROID_COLOR_INFO_START];
329
330tag_info_t android_tonemap[ANDROID_TONEMAP_END -
331        ANDROID_TONEMAP_START] = {
332    TIDX(TONEMAP, MODE) =
333    { "mode",       TYPE_BYTE },
334    TIDX(TONEMAP, CURVE_RED) =
335    { "curveRed",   TYPE_FLOAT },
336    TIDX(TONEMAP, CURVE_GREEN) =
337    { "curveGreen", TYPE_FLOAT },
338    TIDX(TONEMAP, CURVE_BLUE) =
339    { "curveBlue",  TYPE_FLOAT }
340};
341
342tag_info_t android_tonemap_info[ANDROID_TONEMAP_INFO_END -
343        ANDROID_TONEMAP_INFO_START] = {
344    TIIDX(TONEMAP, MAX_CURVE_POINTS) =
345    { "maxCurvePoints", TYPE_INT32 }
346};
347
348tag_info_t android_edge[ANDROID_EDGE_END -
349        ANDROID_EDGE_START] = {
350    TIDX(EDGE, MODE) =
351    { "mode",          TYPE_BYTE },
352    TIDX(EDGE, STRENGTH) =
353    { "strength",      TYPE_BYTE }
354};
355
356tag_info_t android_edge_info[ANDROID_EDGE_INFO_END -
357        ANDROID_EDGE_INFO_START];
358
359tag_info_t android_scaler[ANDROID_SCALER_END -
360        ANDROID_SCALER_START] = {
361    TIDX(SCALER, CROP_REGION) =
362    { "cropRegion", TYPE_INT32 }
363};
364
365tag_info_t android_scaler_info[ANDROID_SCALER_INFO_END -
366        ANDROID_SCALER_INFO_START] = {
367    TIIDX(SCALER, AVAILABLE_FORMATS) =
368    { "availableFormats",          TYPE_INT32 },
369    TIIDX(SCALER, AVAILABLE_RAW_SIZES) =
370    { "availableRawSizes",         TYPE_INT32 },
371    TIIDX(SCALER, AVAILABLE_RAW_MIN_DURATIONS) =
372    { "availableRawMinDurations",  TYPE_INT64 },
373    TIIDX(SCALER, AVAILABLE_PROCESSED_SIZES) =
374    { "availableProcessedSizes",   TYPE_INT32 },
375    TIIDX(SCALER, AVAILABLE_PROCESSED_MIN_DURATIONS) =
376    { "availableProcessedMinDurations", TYPE_INT64 },
377    TIIDX(SCALER, AVAILABLE_JPEG_SIZES) =
378    { "availableJpegSizes",        TYPE_INT32 },
379    TIIDX(SCALER, AVAILABLE_JPEG_MIN_DURATIONS) =
380    { "availableJpegMinDurations", TYPE_INT64 },
381    TIIDX(SCALER, AVAILABLE_MAX_ZOOM) =
382    { "availableMaxDigitalZoom",   TYPE_INT32 }
383};
384
385tag_info_t android_jpeg[ANDROID_JPEG_END -
386        ANDROID_JPEG_START] = {
387    TIDX(JPEG, QUALITY) =
388    { "quality",             TYPE_INT32 },
389    TIDX(JPEG, THUMBNAIL_SIZE) =
390    { "thumbnailSize",       TYPE_INT32 },
391    TIDX(JPEG, THUMBNAIL_QUALITY) =
392    { "thumbnailQuality",    TYPE_INT32 },
393    TIDX(JPEG, GPS_COORDINATES) =
394    { "gpsCoordinates",      TYPE_DOUBLE },
395    TIDX(JPEG, GPS_PROCESSING_METHOD) =
396    { "gpsProcessingMethod", TYPE_BYTE },
397    TIDX(JPEG, GPS_TIMESTAMP) =
398    { "gpsTimestamp",        TYPE_INT64 },
399    TIDX(JPEG, ORIENTATION) =
400    { "orientation",         TYPE_INT32 },
401    TIDX(JPEG, SIZE) =
402    { "size",                TYPE_INT32 }
403};
404
405tag_info_t android_jpeg_info[ANDROID_JPEG_INFO_END -
406        ANDROID_JPEG_INFO_START] = {
407    TIIDX(JPEG, AVAILABLE_THUMBNAIL_SIZES) =
408    { "availableThumbnailSizes", TYPE_INT32 },
409    TIIDX(JPEG, MAX_SIZE) =
410    { "maxSize", TYPE_INT32 }
411};
412
413tag_info_t android_stats[ANDROID_STATS_END -
414        ANDROID_STATS_START] = {
415    TIDX(STATS, FACE_DETECT_MODE) =
416    { "faceDetectMode",   TYPE_BYTE },
417    TIDX(STATS, FACE_RECTANGLES) =
418    { "faceRectangles",   TYPE_INT32 },
419    TIDX(STATS, FACE_SCORES) =
420    { "faceScores",       TYPE_BYTE },
421    TIDX(STATS, FACE_LANDMARKS) =
422    { "faceLandmarks",    TYPE_INT32 },
423    TIDX(STATS, FACE_IDS) =
424    { "faceIds",          TYPE_INT32 },
425    TIDX(STATS, HISTOGRAM_MODE) =
426    { "histogramMode",    TYPE_BYTE },
427    TIDX(STATS, HISTOGRAM) =
428    { "histogram",        TYPE_INT32 },
429    TIDX(STATS, SHARPNESS_MAP_MODE) =
430    { "sharpnessMapMode", TYPE_BYTE },
431    TIDX(STATS, SHARPNESS_MAP) =
432    { "sharpnessMap",     TYPE_INT32 }
433};
434
435tag_info_t android_stats_info[ANDROID_STATS_INFO_END -
436        ANDROID_STATS_INFO_START] = {
437    TIIDX(STATS, AVAILABLE_FACE_DETECT_MODES) =
438    { "availableFaceDetectModes", TYPE_BYTE },
439    TIIDX(STATS, MAX_FACE_COUNT) =
440    { "maxFaceCount",             TYPE_INT32 },
441    TIIDX(STATS, HISTOGRAM_BUCKET_COUNT) =
442    { "histogramBucketCount",     TYPE_INT32 },
443    TIIDX(STATS, MAX_HISTOGRAM_COUNT) =
444    { "maxHistogramCount",        TYPE_INT32 },
445    TIIDX(STATS, SHARPNESS_MAP_SIZE) =
446    { "sharpnessMapSize",         TYPE_INT32 },
447    TIIDX(STATS, MAX_SHARPNESS_MAP_VALUE) =
448    { "maxSharpnessMapValue",     TYPE_INT32 }
449};
450
451
452tag_info_t android_control[ANDROID_CONTROL_END -
453        ANDROID_CONTROL_START] = {
454    TIDX(CONTROL, CAPTURE_INTENT) =
455    { "captureIntent",               TYPE_BYTE },
456    TIDX(CONTROL, MODE) =
457    { "mode",                        TYPE_BYTE },
458    TIDX(CONTROL, EFFECT_MODE) =
459    { "effectMode",                  TYPE_BYTE },
460    TIDX(CONTROL, SCENE_MODE) =
461    { "sceneMode",                   TYPE_BYTE },
462    TIDX(CONTROL, VIDEO_STABILIZATION_MODE) =
463    { "videoStabilizationMode",      TYPE_BYTE },
464    TIDX(CONTROL, AE_MODE) =
465    { "aeMode",                      TYPE_BYTE },
466    TIDX(CONTROL, AE_LOCK) =
467    { "aeLock",                      TYPE_BYTE },
468    TIDX(CONTROL, AE_REGIONS) =
469    { "aeRegions",                   TYPE_INT32 },
470    TIDX(CONTROL, AE_EXP_COMPENSATION) =
471    { "aeExposureCompensation",      TYPE_INT32 },
472    TIDX(CONTROL, AE_TARGET_FPS_RANGE) =
473    { "aeTargetFpsRange",            TYPE_INT32 },
474    TIDX(CONTROL, AE_ANTIBANDING_MODE) =
475    { "aeAntibandingMode",           TYPE_BYTE },
476    TIDX(CONTROL, AE_STATE) =
477    { "aeState",                     TYPE_BYTE },
478    TIDX(CONTROL, AE_PRECAPTURE_ID) =
479    { "aePrecaptureId",              TYPE_INT32},
480    TIDX(CONTROL, AWB_MODE) =
481    { "awbMode",                     TYPE_BYTE },
482    TIDX(CONTROL, AWB_LOCK) =
483    { "awbLock",                     TYPE_BYTE },
484    TIDX(CONTROL, AWB_REGIONS) =
485    { "awbRegions",                  TYPE_INT32 },
486    TIDX(CONTROL, AWB_STATE) =
487    { "awbState",                    TYPE_BYTE },
488    TIDX(CONTROL, AF_MODE) =
489    { "afMode",                      TYPE_BYTE },
490    TIDX(CONTROL, AF_REGIONS) =
491    { "afRegions",                   TYPE_INT32 },
492    TIDX(CONTROL, AF_STATE) =
493    { "afState",                     TYPE_BYTE },
494    TIDX(CONTROL, AF_TRIGGER_ID) =
495    { "afTriggerId",                 TYPE_INT32 }
496};
497
498tag_info_t android_control_info[ANDROID_CONTROL_INFO_END -
499        ANDROID_CONTROL_INFO_START] = {
500    TIIDX(CONTROL, AVAILABLE_SCENE_MODES) =
501    { "availableSceneModes",         TYPE_BYTE },
502    TIIDX(CONTROL, AVAILABLE_EFFECTS) =
503    { "availableEffects",            TYPE_BYTE },
504    TIIDX(CONTROL, MAX_REGIONS) =
505    { "maxRegions",                  TYPE_INT32 },
506    TIIDX(CONTROL, AE_AVAILABLE_MODES) =
507    { "aeAvailableModes",            TYPE_BYTE },
508    TIIDX(CONTROL, AE_EXP_COMPENSATION_STEP) =
509    { "aeCompensationStep",          TYPE_RATIONAL },
510    TIIDX(CONTROL, AE_EXP_COMPENSATION_RANGE) =
511    { "aeCompensationRange",         TYPE_INT32 },
512    TIIDX(CONTROL, AE_AVAILABLE_TARGET_FPS_RANGES) =
513    { "aeAvailableTargetFpsRanges",  TYPE_INT32 },
514    TIIDX(CONTROL, AE_AVAILABLE_ANTIBANDING_MODES) =
515    { "aeAvailableAntibandingModes", TYPE_BYTE },
516    TIIDX(CONTROL, AWB_AVAILABLE_MODES) =
517    { "awbAvailableModes",           TYPE_BYTE },
518    TIIDX(CONTROL, AF_AVAILABLE_MODES) =
519    { "afAvailableModes",            TYPE_BYTE },
520    TIIDX(CONTROL, AVAILABLE_VIDEO_STABILIZATION_MODES) =
521    { "availableVideoStabilizationModes", TYPE_BYTE },
522    TIIDX(CONTROL, SCENE_MODE_OVERRIDES) =
523    { "sceneModeOverrides", TYPE_BYTE }
524};
525
526tag_info_t android_quirks_info[ANDROID_QUIRKS_INFO_END -
527        ANDROID_QUIRKS_INFO_START] = {
528    TIIDX(QUIRKS, TRIGGER_AF_WITH_AUTO) =
529    { "triggerAfWithAuto", TYPE_BYTE },
530    TIIDX(QUIRKS, USE_ZSL_FORMAT) =
531    { "useZslFormat", TYPE_BYTE },
532    TIIDX(QUIRKS, METERING_CROP_REGION) =
533    { "meteringCropRegion", TYPE_BYTE },
534};
535
536#undef TIDX
537#undef TIIDX
538
539tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
540    android_request,
541    android_lens,
542    android_lens_info,
543    android_sensor,
544    android_sensor_info,
545    android_flash,
546    android_flash_info,
547    android_hot_pixel,
548    android_hot_pixel_info,
549    android_demosaic,
550    android_demosaic_info,
551    android_noise,
552    android_noise_info,
553    android_shading,
554    android_shading_info,
555    android_geometric,
556    android_geometric_info,
557    android_color,
558    android_color_info,
559    android_tonemap,
560    android_tonemap_info,
561    android_edge,
562    android_edge_info,
563    android_scaler,
564    android_scaler_info,
565    android_jpeg,
566    android_jpeg_info,
567    android_stats,
568    android_stats_info,
569    android_control,
570    android_control_info,
571    android_quirks_info
572};
573