camera_metadata_tag_info.c revision 4589e489353e5062fb9285c0b872629ca6454dad
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, HYPERFOCAL_DISTANCE) =
166    { "hyperfocalDistance",                 TYPE_FLOAT },
167    TIIDX(LENS, AVAILABLE_FOCAL_LENGTHS) =
168    { "availableFocalLengths",              TYPE_FLOAT },
169    TIIDX(LENS, AVAILABLE_APERTURES) =
170    { "availableApertures",                 TYPE_FLOAT },
171    TIIDX(LENS, AVAILABLE_FILTER_DENSITY) =
172    { "availableFilterDensities",           TYPE_FLOAT },
173    TIIDX(LENS, AVAILABLE_OPTICAL_STABILIZATION) =
174    { "availableOpticalStabilizationModes", TYPE_BYTE },
175    TIIDX(LENS, SHADING_MAP_SIZE) =
176    { "shadingMapSize",                     TYPE_INT32 },
177    TIIDX(LENS, SHADING_MAP) =
178    { "shadingMap",                         TYPE_FLOAT },
179    TIIDX(LENS, GEOMETRIC_CORRECTION_MAP_SIZE) =
180    { "geometricCorrectionMapSize",         TYPE_INT32 },
181    TIIDX(LENS, GEOMETRIC_CORRECTION_MAP) =
182    { "geometricCorrectionMap",             TYPE_FLOAT },
183    TIIDX(LENS, FACING) =
184    { "facing",                             TYPE_BYTE },
185    TIIDX(LENS, POSITION) =
186    { "position",                           TYPE_FLOAT }
187};
188
189tag_info_t android_sensor[ANDROID_SENSOR_END -
190        ANDROID_SENSOR_START] = {
191    TIDX(SENSOR, EXPOSURE_TIME) =
192    { "exposureTime",  TYPE_INT64 },
193    TIDX(SENSOR, FRAME_DURATION) =
194    { "frameDuration", TYPE_INT64 },
195    TIDX(SENSOR, SENSITIVITY) =
196    { "sensitivity",   TYPE_INT32 },
197    TIDX(SENSOR, TIMESTAMP) =
198    { "timestamp",     TYPE_INT64 }
199};
200
201tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
202        ANDROID_SENSOR_INFO_START] = {
203    TIIDX(SENSOR, EXPOSURE_TIME_RANGE) =
204    { "exposureTimeRange",      TYPE_INT64 },
205    TIIDX(SENSOR, MAX_FRAME_DURATION) =
206    { "maxFrameDuration",       TYPE_INT64 },
207    TIIDX(SENSOR, AVAILABLE_SENSITIVITIES) =
208    { "availableSensitivities", TYPE_INT32 },
209    TIIDX(SENSOR, COLOR_FILTER_ARRANGEMENT) =
210    { "colorFilterArrangement", TYPE_BYTE },
211    TIIDX(SENSOR, PHYSICAL_SIZE) =
212    { "physicalSize",           TYPE_FLOAT },
213    TIIDX(SENSOR, PIXEL_ARRAY_SIZE) =
214    { "pixelArraySize",         TYPE_INT32 },
215    TIIDX(SENSOR, ACTIVE_ARRAY_SIZE) =
216    { "activeArraySize",        TYPE_INT32 },
217    TIIDX(SENSOR, WHITE_LEVEL) =
218    { "whiteLevel",             TYPE_INT32 },
219    TIIDX(SENSOR, BLACK_LEVEL_PATTERN) =
220    { "blackLevelPattern",      TYPE_INT32 },
221    TIIDX(SENSOR, COLOR_TRANSFORM_1) =
222    { "colorTransform1",        TYPE_RATIONAL },
223    TIIDX(SENSOR, COLOR_TRANSFORM_2) =
224    { "colorTransform2",        TYPE_RATIONAL },
225    TIIDX(SENSOR, REFERENCE_ILLUMINANT_1) =
226    { "referenceIlluminant1",   TYPE_BYTE },
227    TIIDX(SENSOR, REFERENCE_ILLUMINANT_2) =
228    { "referenceIlluminant2",   TYPE_BYTE },
229    TIIDX(SENSOR, FORWARD_MATRIX_1) =
230    { "forwardMatrix1",         TYPE_RATIONAL },
231    TIIDX(SENSOR, FORWARD_MATRIX_2) =
232    { "forwardMatrix2",         TYPE_RATIONAL },
233    TIIDX(SENSOR, CALIBRATION_TRANSFORM_1) =
234    { "calibrationTransform1",  TYPE_RATIONAL },
235    TIIDX(SENSOR, CALIBRATION_TRANSFORM_2) =
236    { "calibrationTransform2",  TYPE_RATIONAL },
237    TIIDX(SENSOR, BASE_GAIN_FACTOR) =
238    { "baseGainFactor",         TYPE_RATIONAL },
239    TIIDX(SENSOR, MAX_ANALOG_SENSITIVITY) =
240    { "maxAnalogSensitivity",   TYPE_INT32 },
241    TIIDX(SENSOR, NOISE_MODEL_COEFFICIENTS) =
242    { "noiseModelCoefficients", TYPE_FLOAT },
243    TIIDX(SENSOR, ORIENTATION) =
244    { "orientation",            TYPE_INT32 }
245};
246
247tag_info_t android_flash[ANDROID_FLASH_END -
248        ANDROID_FLASH_START] = {
249    TIDX(FLASH, MODE) =
250    { "mode",          TYPE_BYTE },
251    TIDX(FLASH, FIRING_POWER) =
252    { "firingPower",   TYPE_BYTE },
253    TIDX(FLASH, FIRING_TIME) =
254    { "firingTime",    TYPE_INT64 }
255};
256
257tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
258        ANDROID_FLASH_INFO_START] = {
259    TIIDX(FLASH, AVAILABLE) =
260    { "available",      TYPE_BYTE },
261    TIIDX(FLASH, CHARGE_DURATION) =
262    { "chargeDuration", TYPE_INT64 },
263};
264
265tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
266        ANDROID_HOT_PIXEL_START] = {
267    TIDX(HOT_PIXEL, MODE) =
268    { "mode", TYPE_BYTE }
269};
270
271tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
272        ANDROID_HOT_PIXEL_INFO_START];
273
274tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
275        ANDROID_DEMOSAIC_START] = {
276    TIDX(DEMOSAIC, MODE) =
277    { "mode", TYPE_BYTE }
278};
279
280tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END -
281        ANDROID_DEMOSAIC_INFO_START];
282
283tag_info_t android_noise[ANDROID_NOISE_END -
284        ANDROID_NOISE_START] = {
285    TIDX(NOISE, MODE) =
286    { "mode",     TYPE_BYTE },
287    TIDX(NOISE, STRENGTH) =
288    { "strength", TYPE_BYTE }
289};
290
291tag_info_t android_noise_info[ANDROID_NOISE_INFO_END -
292        ANDROID_NOISE_INFO_START];
293
294tag_info_t android_shading[ANDROID_SHADING_END -
295        ANDROID_SHADING_START] = {
296    TIDX(SHADING, MODE) =
297    { "mode", TYPE_BYTE }
298};
299
300tag_info_t android_shading_info[ANDROID_SHADING_INFO_END -
301        ANDROID_SHADING_INFO_START];
302
303tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
304        ANDROID_GEOMETRIC_START] = {
305    TIDX(GEOMETRIC, MODE) =
306    { "mode", TYPE_BYTE }
307};
308
309tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END -
310        ANDROID_GEOMETRIC_INFO_START];
311
312tag_info_t android_color[ANDROID_COLOR_END -
313        ANDROID_COLOR_START] = {
314    TIDX(COLOR, MODE) =
315    { "mode",      TYPE_BYTE },
316    TIDX(COLOR, TRANSFORM) =
317    { "transform", TYPE_FLOAT }
318};
319
320tag_info_t android_color_info[ANDROID_COLOR_INFO_END -
321        ANDROID_COLOR_INFO_START];
322
323tag_info_t android_tonemap[ANDROID_TONEMAP_END -
324        ANDROID_TONEMAP_START] = {
325    TIDX(TONEMAP, MODE) =
326    { "mode",       TYPE_BYTE },
327    TIDX(TONEMAP, CURVE_RED) =
328    { "curveRed",   TYPE_FLOAT },
329    TIDX(TONEMAP, CURVE_GREEN) =
330    { "curveGreen", TYPE_FLOAT },
331    TIDX(TONEMAP, CURVE_BLUE) =
332    { "curveBlue",  TYPE_FLOAT }
333};
334
335tag_info_t android_tonemap_info[ANDROID_TONEMAP_INFO_END -
336        ANDROID_TONEMAP_INFO_START] = {
337    TIIDX(TONEMAP, MAX_CURVE_POINTS) =
338    { "maxCurvePoints", TYPE_INT32 }
339};
340
341tag_info_t android_edge[ANDROID_EDGE_END -
342        ANDROID_EDGE_START] = {
343    TIDX(EDGE, MODE) =
344    { "mode",          TYPE_BYTE },
345    TIDX(EDGE, STRENGTH) =
346    { "strength",      TYPE_BYTE }
347};
348
349tag_info_t android_edge_info[ANDROID_EDGE_INFO_END -
350        ANDROID_EDGE_INFO_START];
351
352tag_info_t android_scaler[ANDROID_SCALER_END -
353        ANDROID_SCALER_START] = {
354    TIDX(SCALER, CROP_REGION) =
355    { "cropRegion", TYPE_INT32 }
356};
357
358tag_info_t android_scaler_info[ANDROID_SCALER_INFO_END -
359        ANDROID_SCALER_INFO_START] = {
360    TIIDX(SCALER, AVAILABLE_FORMATS) =
361    { "availableFormats",          TYPE_INT32 },
362    TIIDX(SCALER, AVAILABLE_RAW_SIZES) =
363    { "availableRawSizes",         TYPE_INT32 },
364    TIIDX(SCALER, AVAILABLE_RAW_MIN_DURATIONS) =
365    { "availableRawMinDurations",  TYPE_INT64 },
366    TIIDX(SCALER, AVAILABLE_PROCESSED_SIZES) =
367    { "availableProcessedSizes",   TYPE_INT32 },
368    TIIDX(SCALER, AVAILABLE_PROCESSED_MIN_DURATIONS) =
369    { "availableProcessedMinDurations", TYPE_INT64 },
370    TIIDX(SCALER, AVAILABLE_JPEG_SIZES) =
371    { "availableJpegSizes",        TYPE_INT32 },
372    TIIDX(SCALER, AVAILABLE_JPEG_MIN_DURATIONS) =
373    { "availableJpegMinDurations", TYPE_INT64 },
374    TIIDX(SCALER, AVAILABLE_MAX_ZOOM) =
375    { "availableMaxDigitalZoom",   TYPE_INT32 }
376};
377
378tag_info_t android_jpeg[ANDROID_JPEG_END -
379        ANDROID_JPEG_START] = {
380    TIDX(JPEG, QUALITY) =
381    { "quality",             TYPE_INT32 },
382    TIDX(JPEG, THUMBNAIL_SIZE) =
383    { "thumbnailSize",       TYPE_INT32 },
384    TIDX(JPEG, THUMBNAIL_QUALITY) =
385    { "thumbnailQuality",    TYPE_INT32 },
386    TIDX(JPEG, GPS_COORDINATES) =
387    { "gpsCoordinates",      TYPE_DOUBLE },
388    TIDX(JPEG, GPS_PROCESSING_METHOD) =
389    { "gpsProcessingMethod", TYPE_BYTE },
390    TIDX(JPEG, GPS_TIMESTAMP) =
391    { "gpsTimestamp",        TYPE_INT64 },
392    TIDX(JPEG, ORIENTATION) =
393    { "orientation",         TYPE_INT32 }
394};
395
396tag_info_t android_jpeg_info[ANDROID_JPEG_INFO_END -
397        ANDROID_JPEG_INFO_START] = {
398    TIIDX(JPEG, AVAILABLE_THUMBNAIL_SIZES) =
399    { "availableThumbnailSizes", TYPE_INT32 },
400    TIIDX(JPEG, MAX_SIZE) =
401    { "maxSize", TYPE_INT32 }
402};
403
404tag_info_t android_stats[ANDROID_STATS_END -
405        ANDROID_STATS_START] = {
406    TIDX(STATS, FACE_DETECT_MODE) =
407    { "faceDetectMode",   TYPE_BYTE },
408    TIDX(STATS, FACE_RECTANGLES) =
409    { "faceRectangles",   TYPE_INT32 },
410    TIDX(STATS, FACE_SCORES) =
411    { "faceScores",       TYPE_BYTE },
412    TIDX(STATS, FACE_LANDMARKS) =
413    { "faceLandmarks",    TYPE_INT32 },
414    TIDX(STATS, FACE_IDS) =
415    { "faceIds",          TYPE_INT32 },
416    TIDX(STATS, HISTOGRAM_MODE) =
417    { "histogramMode",    TYPE_BYTE },
418    TIDX(STATS, HISTOGRAM) =
419    { "histogram",        TYPE_INT32 },
420    TIDX(STATS, SHARPNESS_MAP_MODE) =
421    { "sharpnessMapMode", TYPE_BYTE },
422    TIDX(STATS, SHARPNESS_MAP) =
423    { "sharpnessMap",     TYPE_INT32 }
424};
425
426tag_info_t android_stats_info[ANDROID_STATS_INFO_END -
427        ANDROID_STATS_INFO_START] = {
428    TIIDX(STATS, AVAILABLE_FACE_DETECT_MODES) =
429    { "availableFaceDetectModes", TYPE_BYTE },
430    TIIDX(STATS, MAX_FACE_COUNT) =
431    { "maxFaceCount",             TYPE_INT32 },
432    TIIDX(STATS, HISTOGRAM_BUCKET_COUNT) =
433    { "histogramBucketCount",     TYPE_INT32 },
434    TIIDX(STATS, MAX_HISTOGRAM_COUNT) =
435    { "maxHistogramCount",        TYPE_INT32 },
436    TIIDX(STATS, SHARPNESS_MAP_SIZE) =
437    { "sharpnessMapSize",         TYPE_INT32 },
438    TIIDX(STATS, MAX_SHARPNESS_MAP_VALUE) =
439    { "maxSharpnessMapValue",     TYPE_INT32 }
440};
441
442
443tag_info_t android_control[ANDROID_CONTROL_END -
444        ANDROID_CONTROL_START] = {
445    TIDX(CONTROL, CAPTURE_INTENT) =
446    { "captureIntent",               TYPE_BYTE },
447    TIDX(CONTROL, MODE) =
448    { "mode",                        TYPE_BYTE },
449    TIDX(CONTROL, EFFECT_MODE) =
450    { "effectMode",                  TYPE_BYTE },
451    TIDX(CONTROL, SCENE_MODE) =
452    { "sceneMode",                   TYPE_BYTE },
453    TIDX(CONTROL, VIDEO_STABILIZATION_MODE) =
454    { "videoStabilizationMode",      TYPE_BYTE },
455    TIDX(CONTROL, AE_MODE) =
456    { "aeMode",                      TYPE_BYTE },
457    TIDX(CONTROL, AE_REGIONS) =
458    { "aeRegions",                   TYPE_INT32 },
459    TIDX(CONTROL, AE_EXP_COMPENSATION) =
460    { "aeExposureCompensation",      TYPE_INT32 },
461    TIDX(CONTROL, AE_TARGET_FPS_RANGE) =
462    { "aeTargetFpsRange",            TYPE_INT32 },
463    TIDX(CONTROL, AE_ANTIBANDING_MODE) =
464    { "aeAntibandingMode",           TYPE_BYTE },
465    TIDX(CONTROL, AE_STATE) =
466    { "aeState",                     TYPE_BYTE },
467    TIDX(CONTROL, AE_PRECAPTURE_ID) =
468    { "aePrecaptureId",              TYPE_INT32},
469    TIDX(CONTROL, AWB_MODE) =
470    { "awbMode",                     TYPE_BYTE },
471    TIDX(CONTROL, AWB_REGIONS) =
472    { "awbRegions",                  TYPE_INT32 },
473    TIDX(CONTROL, AWB_STATE) =
474    { "awbState",                    TYPE_BYTE },
475    TIDX(CONTROL, AF_MODE) =
476    { "afMode",                      TYPE_BYTE },
477    TIDX(CONTROL, AF_REGIONS) =
478    { "afRegions",                   TYPE_INT32 },
479    TIDX(CONTROL, AF_STATE) =
480    { "afState",                     TYPE_BYTE },
481    TIDX(CONTROL, AF_TRIGGER_ID) =
482    { "afTriggerId",                 TYPE_INT32 }
483};
484
485tag_info_t android_control_info[ANDROID_CONTROL_INFO_END -
486        ANDROID_CONTROL_INFO_START] = {
487    TIIDX(CONTROL, AVAILABLE_SCENE_MODES) =
488    { "availableSceneModes",         TYPE_BYTE },
489    TIIDX(CONTROL, AVAILABLE_EFFECTS) =
490    { "availableEffects",            TYPE_BYTE },
491    TIIDX(CONTROL, MAX_REGIONS) =
492    { "maxRegions",                  TYPE_INT32 },
493    TIIDX(CONTROL, AE_AVAILABLE_MODES) =
494    { "aeAvailableModes",            TYPE_BYTE },
495    TIIDX(CONTROL, AE_EXP_COMPENSATION_STEP) =
496    { "aeCompensationStep",          TYPE_RATIONAL },
497    TIIDX(CONTROL, AE_EXP_COMPENSATION_RANGE) =
498    { "aeCompensationRange",         TYPE_INT32 },
499    TIIDX(CONTROL, AE_AVAILABLE_TARGET_FPS_RANGES) =
500    { "aeAvailableTargetFpsRanges",  TYPE_INT32 },
501    TIIDX(CONTROL, AE_AVAILABLE_ANTIBANDING_MODES) =
502    { "aeAvailableAntibandingModes", TYPE_BYTE },
503    TIIDX(CONTROL, AWB_AVAILABLE_MODES) =
504    { "awbAvailableModes",           TYPE_BYTE },
505    TIIDX(CONTROL, AF_AVAILABLE_MODES) =
506    { "afAvailableModes",            TYPE_BYTE },
507    TIIDX(CONTROL, AVAILABLE_VIDEO_STABILIZATION_MODES) =
508    { "availableVideoStabilizationModes", TYPE_BYTE }
509};
510
511#undef TIDX
512#undef TIIDX
513
514tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
515    android_request,
516    android_lens,
517    android_lens_info,
518    android_sensor,
519    android_sensor_info,
520    android_flash,
521    android_flash_info,
522    android_hot_pixel,
523    android_hot_pixel_info,
524    android_demosaic,
525    android_demosaic_info,
526    android_noise,
527    android_noise_info,
528    android_shading,
529    android_shading_info,
530    android_geometric,
531    android_geometric_info,
532    android_color,
533    android_color_info,
534    android_tonemap,
535    android_tonemap_info,
536    android_edge,
537    android_edge_info,
538    android_scaler,
539    android_scaler_info,
540    android_jpeg,
541    android_jpeg_info,
542    android_stats,
543    android_stats_info,
544    android_control,
545    android_control_info
546};
547