camera_metadata_tag_info.c revision 623ff65afea34612498dcf33887ffaf8b194c281
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};
60
61unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
62    [ANDROID_REQUEST]        = { ANDROID_REQUEST_START,
63                                 ANDROID_REQUEST_END },
64    [ANDROID_LENS]           = { ANDROID_LENS_START,
65                                 ANDROID_LENS_END },
66    [ANDROID_LENS_INFO]      = { ANDROID_LENS_INFO_START,
67                                 ANDROID_LENS_INFO_END },
68    [ANDROID_SENSOR]         = { ANDROID_SENSOR_START,
69                                 ANDROID_SENSOR_END },
70    [ANDROID_SENSOR_INFO]    = { ANDROID_SENSOR_INFO_START,
71                                 ANDROID_SENSOR_INFO_END },
72    [ANDROID_FLASH]          = { ANDROID_FLASH_START,
73                                 ANDROID_FLASH_END },
74    [ANDROID_FLASH_INFO]     = { ANDROID_FLASH_INFO_START,
75                                 ANDROID_FLASH_INFO_END },
76    [ANDROID_HOT_PIXEL]      = { ANDROID_HOT_PIXEL_START,
77                                 ANDROID_HOT_PIXEL_END },
78    [ANDROID_HOT_PIXEL_INFO] = { ANDROID_HOT_PIXEL_INFO_START,
79                                 ANDROID_HOT_PIXEL_INFO_END },
80    [ANDROID_DEMOSAIC]       = { ANDROID_DEMOSAIC_START,
81                                 ANDROID_DEMOSAIC_END },
82    [ANDROID_DEMOSAIC_INFO]  = { ANDROID_DEMOSAIC_INFO_START,
83                                 ANDROID_DEMOSAIC_INFO_END },
84    [ANDROID_NOISE]          = { ANDROID_NOISE_START,
85                                 ANDROID_NOISE_END },
86    [ANDROID_NOISE_INFO]     = { ANDROID_NOISE_INFO_START,
87                                 ANDROID_NOISE_INFO_END },
88    [ANDROID_SHADING]        = { ANDROID_SHADING_START,
89                                 ANDROID_SHADING_END },
90    [ANDROID_SHADING_INFO]   = { ANDROID_SHADING_INFO_START,
91                                 ANDROID_SHADING_INFO_END },
92    [ANDROID_GEOMETRIC]      = { ANDROID_GEOMETRIC_START,
93                                 ANDROID_GEOMETRIC_END },
94    [ANDROID_GEOMETRIC_INFO] = { ANDROID_GEOMETRIC_INFO_START,
95                                 ANDROID_GEOMETRIC_INFO_END },
96    [ANDROID_COLOR]          = { ANDROID_COLOR_START,
97                                 ANDROID_COLOR_END },
98    [ANDROID_COLOR_INFO]     = { ANDROID_COLOR_INFO_START,
99                                 ANDROID_COLOR_INFO_END },
100    [ANDROID_TONEMAP]        = { ANDROID_TONEMAP_START,
101                                 ANDROID_TONEMAP_END },
102    [ANDROID_TONEMAP_INFO]   = { ANDROID_TONEMAP_INFO_START,
103                                 ANDROID_TONEMAP_INFO_END },
104    [ANDROID_EDGE]           = { ANDROID_EDGE_START,
105                                 ANDROID_EDGE_END },
106    [ANDROID_EDGE_INFO]      = { ANDROID_EDGE_INFO_START,
107                                 ANDROID_EDGE_INFO_END },
108    [ANDROID_SCALER]         = { ANDROID_SCALER_START,
109                                 ANDROID_SCALER_END },
110    [ANDROID_SCALER_INFO]    = { ANDROID_SCALER_INFO_START,
111                                 ANDROID_SCALER_INFO_END },
112    [ANDROID_JPEG]           = { ANDROID_JPEG_START,
113                                 ANDROID_JPEG_END },
114    [ANDROID_JPEG_INFO]      = { ANDROID_JPEG_INFO_START,
115                                 ANDROID_JPEG_INFO_END },
116    [ANDROID_STATS]          = { ANDROID_STATS_START,
117                                 ANDROID_STATS_END },
118    [ANDROID_STATS_INFO]     = { ANDROID_STATS_INFO_START,
119                                 ANDROID_STATS_INFO_END },
120    [ANDROID_CONTROL]        = { ANDROID_CONTROL_START,
121                                 ANDROID_CONTROL_END },
122    [ANDROID_CONTROL_INFO]   = { ANDROID_CONTROL_INFO_START,
123                                 ANDROID_CONTROL_INFO_END }
124};
125
126// Shortcut defines to make succint names for field definitions
127#define TIDX(section, tag) \
128    [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _START ]
129
130#define TIIDX(section, tag) \
131    [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _INFO_START ]
132
133tag_info_t android_request[ANDROID_REQUEST_END -
134        ANDROID_REQUEST_START] = {
135    TIDX(REQUEST, ID)             =
136    { "id",            TYPE_INT32 },
137    TIDX(REQUEST, METADATA_MODE)  =
138    { "metadataMode",  TYPE_BYTE },
139    TIDX(REQUEST, OUTPUT_STREAMS) =
140    { "outputStreams", TYPE_BYTE },
141    TIDX(REQUEST, FRAME_COUNT)    =
142    { "frameCount",    TYPE_INT32 }
143};
144
145tag_info_t android_lens[ANDROID_LENS_END -
146        ANDROID_LENS_START] = {
147    TIDX(LENS, FOCUS_DISTANCE) =
148    { "focusDistance",            TYPE_FLOAT },
149    TIDX(LENS, APERTURE)       =
150    { "aperture",                 TYPE_FLOAT },
151    TIDX(LENS, FOCAL_LENGTH)   =
152    { "focalLength",              TYPE_FLOAT },
153    TIDX(LENS, FILTER_DENSITY) =
154    { "filterDensity",            TYPE_FLOAT },
155    TIDX(LENS, OPTICAL_STABILIZATION_MODE) =
156    { "opticalStabilizationMode", TYPE_BYTE },
157    TIDX(LENS, FOCUS_RANGE)    =
158    { "focusRange",               TYPE_FLOAT }
159};
160
161tag_info_t android_lens_info[ANDROID_LENS_INFO_END -
162        ANDROID_LENS_INFO_START] = {
163    TIIDX(LENS, MINIMUM_FOCUS_DISTANCE)  =
164    { "minimumFocusDistance",               TYPE_FLOAT },
165    TIIDX(LENS, AVAILABLE_FOCAL_LENGTHS) =
166    { "availableFocalLengths",              TYPE_FLOAT },
167    TIIDX(LENS, AVAILABLE_APERTURES) =
168    { "availableApertures",                 TYPE_FLOAT },
169    TIIDX(LENS, AVAILABLE_FILTER_DENSITY) =
170    { "availableFilterDensities",           TYPE_FLOAT },
171    TIIDX(LENS, AVAILABLE_OPTICAL_STABILIZATION) =
172    { "availableOpticalStabilizationModes", TYPE_BYTE },
173    TIIDX(LENS, SHADING_MAP) =
174    { "shadingMap",                         TYPE_FLOAT },
175    TIIDX(LENS, GEOMETRIC_CORRECTION_MAP) =
176    { "geometricCorrectionMap",             TYPE_FLOAT },
177    TIIDX(LENS, FACING) =
178    { "facing",                             TYPE_BYTE },
179    TIIDX(LENS, POSITION) =
180    { "position",                           TYPE_FLOAT }
181};
182
183tag_info_t android_sensor[ANDROID_SENSOR_END -
184        ANDROID_SENSOR_START] = {
185    TIDX(SENSOR, EXPOSURE_TIME) =
186    { "exposureTime",  TYPE_INT64 },
187    TIDX(SENSOR, FRAME_DURATION) =
188    { "frameDuration", TYPE_INT64 },
189    TIDX(SENSOR, SENSITIVITY) =
190    { "sensitivity",   TYPE_INT32 },
191    TIDX(SENSOR, TIMESTAMP) =
192    { "timestamp",     TYPE_INT64 }
193};
194
195tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
196        ANDROID_SENSOR_INFO_START] = {
197    TIIDX(SENSOR, EXPOSURE_TIME_RANGE) =
198    { "exposureTimeRange",      TYPE_INT64 },
199    TIIDX(SENSOR, MAX_FRAME_DURATION) =
200    { "maxFrameDuration",       TYPE_INT64 },
201    TIIDX(SENSOR, AVAILABLE_SENSITIVITIES) =
202    { "availableSensitivities", TYPE_INT32 },
203    TIIDX(SENSOR, COLOR_FILTER_ARRANGEMENT) =
204    { "colorFilterArrangement", TYPE_BYTE },
205    TIIDX(SENSOR, PIXEL_ARRAY_SIZE) =
206    { "pixelArraySize",         TYPE_INT32 },
207    TIIDX(SENSOR, ACTIVE_ARRAY_SIZE) =
208    { "activeArraySize",        TYPE_INT32 },
209    TIIDX(SENSOR, WHITE_LEVEL) =
210    { "whiteLevel",             TYPE_INT32 },
211    TIIDX(SENSOR, BLACK_LEVEL_PATTERN) =
212    { "blackLevelPattern",      TYPE_INT32 },
213    TIIDX(SENSOR, COLOR_TRANSFORM_1) =
214    { "colorTransform1",        TYPE_RATIONAL },
215    TIIDX(SENSOR, COLOR_TRANSFORM_2) =
216    { "colorTransform2",        TYPE_RATIONAL },
217    TIIDX(SENSOR, REFERENCE_ILLUMINANT_1) =
218    { "referenceIlluminant1",   TYPE_BYTE },
219    TIIDX(SENSOR, REFERENCE_ILLUMINANT_2) =
220    { "referenceIlluminant2",   TYPE_BYTE },
221    TIIDX(SENSOR, FORWARD_MATRIX_1) =
222    { "forwardMatrix1",         TYPE_RATIONAL },
223    TIIDX(SENSOR, FORWARD_MATRIX_2) =
224    { "forwardMatrix2",         TYPE_RATIONAL },
225    TIIDX(SENSOR, CALIBRATION_TRANSFORM_1) =
226    { "calibrationTransform1",  TYPE_RATIONAL },
227    TIIDX(SENSOR, CALIBRATION_TRANSFORM_2) =
228    { "calibrationTransform2",  TYPE_RATIONAL },
229    TIIDX(SENSOR, BASE_GAIN_FACTOR) =
230    { "baseGainFactor",         TYPE_RATIONAL },
231    TIIDX(SENSOR, MAX_ANALOG_SENSITIVITY) =
232    { "maxAnalogSensitivity",   TYPE_INT32 },
233    TIIDX(SENSOR, NOISE_MODEL_COEFFICIENTS) =
234    { "noiseModelCoefficients", TYPE_FLOAT },
235    TIIDX(SENSOR, ORIENTATION) =
236    { "orientation",            TYPE_INT32 }
237};
238
239tag_info_t android_flash[ANDROID_FLASH_END -
240        ANDROID_FLASH_START] = {
241    TIDX(FLASH, MODE) =
242    { "mode",          TYPE_BYTE },
243    TIDX(FLASH, FIRING_POWER) =
244    { "firingPower",   TYPE_BYTE },
245    TIDX(FLASH, FIRING_TIME) =
246    { "firingTime",    TYPE_INT64 }
247};
248
249tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
250        ANDROID_FLASH_INFO_START] = {
251    TIIDX(FLASH, AVAILABLE_MODES) =
252    { "available",      TYPE_BYTE },
253    TIIDX(FLASH, CHARGE_DURATION) =
254    { "chargeDuration", TYPE_INT64 },
255};
256
257tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
258        ANDROID_HOT_PIXEL_START] = {
259    TIDX(HOT_PIXEL, MODE) =
260    { "mode", TYPE_BYTE }
261};
262
263tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
264        ANDROID_HOT_PIXEL_INFO_START];
265
266tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
267        ANDROID_DEMOSAIC_START] = {
268    TIDX(DEMOSAIC, MODE) =
269    { "mode", TYPE_BYTE }
270};
271
272tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END -
273        ANDROID_DEMOSAIC_INFO_START];
274
275tag_info_t android_noise[ANDROID_NOISE_END -
276        ANDROID_NOISE_START] = {
277    TIDX(NOISE, MODE) =
278    { "mode",     TYPE_BYTE },
279    TIDX(NOISE, STRENGTH) =
280    { "strength", TYPE_BYTE }
281};
282
283tag_info_t android_noise_info[ANDROID_NOISE_INFO_END -
284        ANDROID_NOISE_INFO_START];
285
286tag_info_t android_shading[ANDROID_SHADING_END -
287        ANDROID_SHADING_START] = {
288    TIDX(SHADING, MODE) =
289    { "mode", TYPE_BYTE }
290};
291
292tag_info_t android_shading_info[ANDROID_SHADING_INFO_END -
293        ANDROID_SHADING_INFO_START];
294
295tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
296        ANDROID_GEOMETRIC_START] = {
297    TIDX(GEOMETRIC, MODE) =
298    { "mode", TYPE_BYTE }
299};
300
301tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END -
302        ANDROID_GEOMETRIC_INFO_START];
303
304tag_info_t android_color[ANDROID_COLOR_END -
305        ANDROID_COLOR_START] = {
306    TIDX(COLOR, MODE) =
307    { "mode",      TYPE_BYTE },
308    TIDX(COLOR, TRANSFORM) =
309    { "transform", TYPE_FLOAT }
310};
311
312tag_info_t android_color_info[ANDROID_COLOR_INFO_END -
313        ANDROID_COLOR_INFO_START] = {
314    TIIDX(COLOR, AVAILABLE_MODES) =
315    { "availableModes", TYPE_INT32 }
316};
317
318tag_info_t android_tonemap[ANDROID_TONEMAP_END -
319        ANDROID_TONEMAP_START] = {
320    TIDX(TONEMAP, MODE) =
321    { "mode",       TYPE_BYTE },
322    TIDX(TONEMAP, CURVE_RED) =
323    { "curveRed",   TYPE_FLOAT },
324    TIDX(TONEMAP, CURVE_GREEN) =
325    { "curveGreen", TYPE_FLOAT },
326    TIDX(TONEMAP, CURVE_BLUE) =
327    { "curveBlue",  TYPE_FLOAT }
328};
329
330tag_info_t android_tonemap_info[ANDROID_TONEMAP_INFO_END -
331        ANDROID_TONEMAP_INFO_START] = {
332    TIIDX(TONEMAP, MAX_CURVE_POINTS) =
333    { "maxCurvePoints", TYPE_INT32 }
334};
335
336tag_info_t android_edge[ANDROID_EDGE_END -
337        ANDROID_EDGE_START] = {
338    TIDX(EDGE, MODE) =
339    { "mode",          TYPE_BYTE },
340    TIDX(EDGE, STRENGTH) =
341    { "strength",      TYPE_BYTE }
342};
343
344tag_info_t android_edge_info[ANDROID_EDGE_INFO_END -
345        ANDROID_EDGE_INFO_START];
346
347tag_info_t android_scaler[ANDROID_SCALER_END -
348        ANDROID_SCALER_START] = {
349    TIDX(SCALER, SIZE) =
350    { "size",       TYPE_INT32 },
351    TIDX(SCALER, FORMAT) =
352    { "format",     TYPE_BYTE },
353    TIDX(SCALER, CROP_REGION) =
354    { "cropRegion", TYPE_INT32 },
355    TIDX(SCALER, ROTATION) =
356    { "rotation",   TYPE_INT32 },
357};
358
359tag_info_t android_scaler_info[ANDROID_SCALER_INFO_END -
360        ANDROID_SCALER_INFO_START] = {
361    TIIDX(SCALER, AVAILABLE_FORMATS) =
362    { "availableFormats",           TYPE_INT32 },
363    TIIDX(SCALER, AVAILABLE_SIZES_PER_FORMAT) =
364    { "availableSizesPerFormat",    TYPE_INT32 },
365    TIIDX(SCALER, AVAILABLE_SIZES) =
366    { "availableSizes",             TYPE_INT32 },
367    TIIDX(SCALER, AVAILABLE_MIN_FRAME_DURATIONS) =
368    { "availableMinFrameDurations", TYPE_INT64 },
369    TIIDX(SCALER, AVAILABLE_MAX_ZOOM) =
370    { "availableMaxDigitalZoom",    TYPE_INT32 }
371};
372
373tag_info_t android_jpeg[ANDROID_JPEG_END -
374        ANDROID_JPEG_START] = {
375    TIDX(JPEG, QUALITY) =
376    { "quality",             TYPE_INT32 },
377    TIDX(JPEG, THUMBNAIL_SIZE) =
378    { "thumbnailSize",       TYPE_INT32 },
379    TIDX(JPEG, THUMBNAIL_QUALITY) =
380    { "thumbnailQuality",    TYPE_INT32 },
381    TIDX(JPEG, GPS_COORDINATES) =
382    { "gpsCoordinates",      TYPE_DOUBLE },
383    TIDX(JPEG, GPS_PROCESSING_METHOD) =
384    { "gpsProcessingMethod", TYPE_BYTE },
385    TIDX(JPEG, GPS_TIMESTAMP) =
386    { "gpsTimestamp",        TYPE_INT64 },
387    TIDX(JPEG, ORIENTATION) =
388    { "orientation",         TYPE_INT32 }
389};
390
391tag_info_t android_jpeg_info[ANDROID_JPEG_INFO_END -
392        ANDROID_JPEG_INFO_START] = {
393    TIIDX(JPEG, AVAILABLE_THUMBNAIL_SIZES) =
394    { "availableThumbnailSizes", TYPE_INT32 }
395};
396
397tag_info_t android_stats[ANDROID_STATS_END -
398        ANDROID_STATS_START] = {
399    TIDX(STATS, FACE_DETECT_MODE) =
400    { "faceDetectMode",   TYPE_BYTE },
401    TIDX(STATS, FACE_RECTANGLES) =
402    { "faceRectangles",   TYPE_INT32 },
403    TIDX(STATS, FACE_SCORES) =
404    { "faceScores",       TYPE_BYTE },
405    TIDX(STATS, FACE_LANDMARKS) =
406    { "faceLandmarks",    TYPE_INT32 },
407    TIDX(STATS, FACE_IDS) =
408    { "faceIds",          TYPE_INT32 },
409    TIDX(STATS, HISTOGRAM_MODE) =
410    { "histogramMode",    TYPE_BYTE },
411    TIDX(STATS, HISTOGRAM) =
412    { "histogram",        TYPE_INT32 },
413    TIDX(STATS, SHARPNESS_MAP_MODE) =
414    { "sharpnessMapMode", TYPE_BYTE },
415    TIDX(STATS, SHARPNESS_MAP) =
416    { "sharpnessMap",     TYPE_INT32 }
417};
418
419tag_info_t android_stats_info[ANDROID_STATS_INFO_END -
420        ANDROID_STATS_INFO_START] = {
421    TIIDX(STATS, AVAILABLE_FACE_DETECT_MODES) =
422    { "availableFaceDetectModes", TYPE_BYTE },
423    TIIDX(STATS, MAX_FACE_COUNT) =
424    { "maxFaceCount",             TYPE_INT32 },
425    TIIDX(STATS, HISTOGRAM_BUCKET_COUNT) =
426    { "histogramBucketCount",     TYPE_INT32 },
427    TIIDX(STATS, MAX_HISTOGRAM_COUNT) =
428    { "maxHistogramCount",        TYPE_INT32 },
429    TIIDX(STATS, SHARPNESS_MAP_SIZE) =
430    { "sharpnessMapSize",         TYPE_INT32 },
431    TIIDX(STATS, MAX_SHARPNESS_MAP_VALUE) =
432    { "maxSharpnessMapValue",     TYPE_INT32 }
433};
434
435
436tag_info_t android_control[ANDROID_CONTROL_END -
437        ANDROID_CONTROL_START] = {
438    TIDX(CONTROL, MODE) =
439    { "mode",                        TYPE_BYTE },
440    TIDX(CONTROL, AE_MODE) =
441    { "aeMode",                      TYPE_BYTE },
442    TIDX(CONTROL, AE_REGIONS) =
443    { "aeRegions",                   TYPE_INT32 },
444    TIDX(CONTROL, AE_EXP_COMPENSATION) =
445    { "aeExposureCompensation",      TYPE_INT32 },
446    TIDX(CONTROL, AE_TARGET_FPS_RANGE) =
447    { "aeTargetFpsRange",            TYPE_INT32 },
448    TIDX(CONTROL, AE_ANTIBANDING_MODE) =
449    { "aeAntibandingMode",           TYPE_BYTE },
450    TIDX(CONTROL, AWB_MODE) =
451    { "awbMode",                     TYPE_BYTE },
452    TIDX(CONTROL, AWB_REGIONS) =
453    { "awbRegions",                  TYPE_INT32 },
454    TIDX(CONTROL, AF_MODE) =
455    { "afMode",                      TYPE_BYTE },
456    TIDX(CONTROL, AF_REGIONS) =
457    { "afRegions",                   TYPE_INT32 },
458    TIDX(CONTROL, AF_TRIGGER) =
459    { "afTrigger",                   TYPE_BYTE },
460    TIDX(CONTROL, AF_STATE) =
461    { "afState",                     TYPE_BYTE },
462    TIDX(CONTROL, VIDEO_STABILIZATION_MODE) =
463    { "videoStabilizationMode",      TYPE_BYTE }
464};
465
466tag_info_t android_control_info[ANDROID_CONTROL_INFO_END -
467        ANDROID_CONTROL_INFO_START] = {
468    TIIDX(CONTROL, AVAILABLE_MODES) =
469    { "availableModes",              TYPE_BYTE },
470    TIIDX(CONTROL, MAX_REGIONS) =
471    { "maxRegions",                  TYPE_INT32 },
472    TIIDX(CONTROL, AE_AVAILABLE_MODES) =
473    { "aeAvailableModes",            TYPE_BYTE },
474    TIIDX(CONTROL, AE_EXP_COMPENSATION_STEP) =
475    { "aeCompensationStep",          TYPE_RATIONAL },
476    TIIDX(CONTROL, AE_EXP_COMPENSATION_RANGE) =
477    { "aeCompensationRange",         TYPE_INT32 },
478    TIIDX(CONTROL, AE_AVAILABLE_TARGET_FPS_RANGES) =
479    { "aeAvailableTargetFpsRanges",  TYPE_INT32 },
480    TIIDX(CONTROL, AE_AVAILABLE_ANTIBANDING_MODES) =
481    { "aeAvailableAntibandingModes", TYPE_BYTE },
482    TIIDX(CONTROL, AWB_AVAILABLE_MODES) =
483    { "awbAvailableModes",           TYPE_BYTE },
484    TIIDX(CONTROL, AF_AVAILABLE_MODES) =
485    { "afAvailableModes",            TYPE_BYTE }
486};
487
488#undef TIDX
489#undef TIIDX
490
491tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
492    android_request,
493    android_lens,
494    android_lens_info,
495    android_sensor,
496    android_sensor_info,
497    android_flash,
498    android_flash_info,
499    android_hot_pixel,
500    android_hot_pixel_info,
501    android_demosaic,
502    android_demosaic_info,
503    android_noise,
504    android_noise_info,
505    android_shading,
506    android_shading_info,
507    android_geometric,
508    android_geometric_info,
509    android_color,
510    android_color_info,
511    android_tonemap,
512    android_tonemap_info,
513    android_edge,
514    android_edge_info,
515    android_scaler,
516    android_scaler_info,
517    android_jpeg,
518    android_jpeg_info,
519    android_stats,
520    android_stats_info,
521    android_control,
522    android_control_info
523};
524