OSDN Git Service

c547dfb720b1e6c6284fbb948f3d671efe8b5a8d
[android-x86/system-media.git] / camera / src / camera_metadata_tag_info.c
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
27 /**
28  * ! Do not edit this file directly !
29  *
30  * Generated automatically from camera_metadata_tag_info.mako
31  */
32
33 const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {
34     [ANDROID_COLOR_CORRECTION]     = "android.colorCorrection",
35     [ANDROID_CONTROL]              = "android.control",
36     [ANDROID_DEMOSAIC]             = "android.demosaic",
37     [ANDROID_EDGE]                 = "android.edge",
38     [ANDROID_FLASH]                = "android.flash",
39     [ANDROID_FLASH_INFO]           = "android.flash.info",
40     [ANDROID_GEOMETRIC]            = "android.geometric",
41     [ANDROID_HOT_PIXEL]            = "android.hotPixel",
42     [ANDROID_HOT_PIXEL_INFO]       = "android.hotPixel.info",
43     [ANDROID_JPEG]                 = "android.jpeg",
44     [ANDROID_LENS]                 = "android.lens",
45     [ANDROID_LENS_INFO]            = "android.lens.info",
46     [ANDROID_NOISE_REDUCTION]      = "android.noiseReduction",
47     [ANDROID_QUIRKS]               = "android.quirks",
48     [ANDROID_REQUEST]              = "android.request",
49     [ANDROID_SCALER]               = "android.scaler",
50     [ANDROID_SENSOR]               = "android.sensor",
51     [ANDROID_SENSOR_INFO]          = "android.sensor.info",
52     [ANDROID_SHADING]              = "android.shading",
53     [ANDROID_STATISTICS]           = "android.statistics",
54     [ANDROID_STATISTICS_INFO]      = "android.statistics.info",
55     [ANDROID_TONEMAP]              = "android.tonemap",
56     [ANDROID_LED]                  = "android.led",
57 };
58
59 unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
60     [ANDROID_COLOR_CORRECTION]     = { ANDROID_COLOR_CORRECTION_START,
61                                        ANDROID_COLOR_CORRECTION_END },
62     [ANDROID_CONTROL]              = { ANDROID_CONTROL_START,
63                                        ANDROID_CONTROL_END },
64     [ANDROID_DEMOSAIC]             = { ANDROID_DEMOSAIC_START,
65                                        ANDROID_DEMOSAIC_END },
66     [ANDROID_EDGE]                 = { ANDROID_EDGE_START,
67                                        ANDROID_EDGE_END },
68     [ANDROID_FLASH]                = { ANDROID_FLASH_START,
69                                        ANDROID_FLASH_END },
70     [ANDROID_FLASH_INFO]           = { ANDROID_FLASH_INFO_START,
71                                        ANDROID_FLASH_INFO_END },
72     [ANDROID_GEOMETRIC]            = { ANDROID_GEOMETRIC_START,
73                                        ANDROID_GEOMETRIC_END },
74     [ANDROID_HOT_PIXEL]            = { ANDROID_HOT_PIXEL_START,
75                                        ANDROID_HOT_PIXEL_END },
76     [ANDROID_HOT_PIXEL_INFO]       = { ANDROID_HOT_PIXEL_INFO_START,
77                                        ANDROID_HOT_PIXEL_INFO_END },
78     [ANDROID_JPEG]                 = { ANDROID_JPEG_START,
79                                        ANDROID_JPEG_END },
80     [ANDROID_LENS]                 = { ANDROID_LENS_START,
81                                        ANDROID_LENS_END },
82     [ANDROID_LENS_INFO]            = { ANDROID_LENS_INFO_START,
83                                        ANDROID_LENS_INFO_END },
84     [ANDROID_NOISE_REDUCTION]      = { ANDROID_NOISE_REDUCTION_START,
85                                        ANDROID_NOISE_REDUCTION_END },
86     [ANDROID_QUIRKS]               = { ANDROID_QUIRKS_START,
87                                        ANDROID_QUIRKS_END },
88     [ANDROID_REQUEST]              = { ANDROID_REQUEST_START,
89                                        ANDROID_REQUEST_END },
90     [ANDROID_SCALER]               = { ANDROID_SCALER_START,
91                                        ANDROID_SCALER_END },
92     [ANDROID_SENSOR]               = { ANDROID_SENSOR_START,
93                                        ANDROID_SENSOR_END },
94     [ANDROID_SENSOR_INFO]          = { ANDROID_SENSOR_INFO_START,
95                                        ANDROID_SENSOR_INFO_END },
96     [ANDROID_SHADING]              = { ANDROID_SHADING_START,
97                                        ANDROID_SHADING_END },
98     [ANDROID_STATISTICS]           = { ANDROID_STATISTICS_START,
99                                        ANDROID_STATISTICS_END },
100     [ANDROID_STATISTICS_INFO]      = { ANDROID_STATISTICS_INFO_START,
101                                        ANDROID_STATISTICS_INFO_END },
102     [ANDROID_TONEMAP]              = { ANDROID_TONEMAP_START,
103                                        ANDROID_TONEMAP_END },
104     [ANDROID_LED]                  = { ANDROID_LED_START,
105                                        ANDROID_LED_END },
106 };
107
108 static tag_info_t android_color_correction[ANDROID_COLOR_CORRECTION_END -
109         ANDROID_COLOR_CORRECTION_START] = {
110     [ ANDROID_COLOR_CORRECTION_MODE - ANDROID_COLOR_CORRECTION_START ] =
111     { "mode",                          TYPE_BYTE   },
112     [ ANDROID_COLOR_CORRECTION_TRANSFORM - ANDROID_COLOR_CORRECTION_START ] =
113     { "transform",                     TYPE_FLOAT  },
114 };
115
116 static tag_info_t android_control[ANDROID_CONTROL_END -
117         ANDROID_CONTROL_START] = {
118     [ ANDROID_CONTROL_AE_ANTIBANDING_MODE - ANDROID_CONTROL_START ] =
119     { "aeAntibandingMode",             TYPE_BYTE   },
120     [ ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION - ANDROID_CONTROL_START ] =
121     { "aeExposureCompensation",        TYPE_INT32  },
122     [ ANDROID_CONTROL_AE_LOCK - ANDROID_CONTROL_START ] =
123     { "aeLock",                        TYPE_BYTE   },
124     [ ANDROID_CONTROL_AE_MODE - ANDROID_CONTROL_START ] =
125     { "aeMode",                        TYPE_BYTE   },
126     [ ANDROID_CONTROL_AE_REGIONS - ANDROID_CONTROL_START ] =
127     { "aeRegions",                     TYPE_INT32  },
128     [ ANDROID_CONTROL_AE_TARGET_FPS_RANGE - ANDROID_CONTROL_START ] =
129     { "aeTargetFpsRange",              TYPE_INT32  },
130     [ ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER - ANDROID_CONTROL_START ] =
131     { "aePrecaptureTrigger",           TYPE_BYTE   },
132     [ ANDROID_CONTROL_AF_MODE - ANDROID_CONTROL_START ] =
133     { "afMode",                        TYPE_BYTE   },
134     [ ANDROID_CONTROL_AF_REGIONS - ANDROID_CONTROL_START ] =
135     { "afRegions",                     TYPE_INT32  },
136     [ ANDROID_CONTROL_AF_TRIGGER - ANDROID_CONTROL_START ] =
137     { "afTrigger",                     TYPE_BYTE   },
138     [ ANDROID_CONTROL_AWB_LOCK - ANDROID_CONTROL_START ] =
139     { "awbLock",                       TYPE_BYTE   },
140     [ ANDROID_CONTROL_AWB_MODE - ANDROID_CONTROL_START ] =
141     { "awbMode",                       TYPE_BYTE   },
142     [ ANDROID_CONTROL_AWB_REGIONS - ANDROID_CONTROL_START ] =
143     { "awbRegions",                    TYPE_INT32  },
144     [ ANDROID_CONTROL_CAPTURE_INTENT - ANDROID_CONTROL_START ] =
145     { "captureIntent",                 TYPE_BYTE   },
146     [ ANDROID_CONTROL_EFFECT_MODE - ANDROID_CONTROL_START ] =
147     { "effectMode",                    TYPE_BYTE   },
148     [ ANDROID_CONTROL_MODE - ANDROID_CONTROL_START ] =
149     { "mode",                          TYPE_BYTE   },
150     [ ANDROID_CONTROL_SCENE_MODE - ANDROID_CONTROL_START ] =
151     { "sceneMode",                     TYPE_BYTE   },
152     [ ANDROID_CONTROL_VIDEO_STABILIZATION_MODE - ANDROID_CONTROL_START ] =
153     { "videoStabilizationMode",        TYPE_BYTE   },
154     [ ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES - ANDROID_CONTROL_START ] =
155     { "aeAvailableAntibandingModes",   TYPE_BYTE   },
156     [ ANDROID_CONTROL_AE_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
157     { "aeAvailableModes",              TYPE_BYTE   },
158     [ ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES - ANDROID_CONTROL_START ] =
159     { "aeAvailableTargetFpsRanges",    TYPE_INT32  },
160     [ ANDROID_CONTROL_AE_COMPENSATION_RANGE - ANDROID_CONTROL_START ] =
161     { "aeCompensationRange",           TYPE_INT32  },
162     [ ANDROID_CONTROL_AE_COMPENSATION_STEP - ANDROID_CONTROL_START ] =
163     { "aeCompensationStep",            TYPE_RATIONAL
164                 },
165     [ ANDROID_CONTROL_AF_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
166     { "afAvailableModes",              TYPE_BYTE   },
167     [ ANDROID_CONTROL_AVAILABLE_EFFECTS - ANDROID_CONTROL_START ] =
168     { "availableEffects",              TYPE_BYTE   },
169     [ ANDROID_CONTROL_AVAILABLE_SCENE_MODES - ANDROID_CONTROL_START ] =
170     { "availableSceneModes",           TYPE_BYTE   },
171     [ ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES - ANDROID_CONTROL_START ] =
172     { "availableVideoStabilizationModes",
173                                         TYPE_BYTE   },
174     [ ANDROID_CONTROL_AWB_AVAILABLE_MODES - ANDROID_CONTROL_START ] =
175     { "awbAvailableModes",             TYPE_BYTE   },
176     [ ANDROID_CONTROL_MAX_REGIONS - ANDROID_CONTROL_START ] =
177     { "maxRegions",                    TYPE_INT32  },
178     [ ANDROID_CONTROL_SCENE_MODE_OVERRIDES - ANDROID_CONTROL_START ] =
179     { "sceneModeOverrides",            TYPE_BYTE   },
180     [ ANDROID_CONTROL_AE_PRECAPTURE_ID - ANDROID_CONTROL_START ] =
181     { "aePrecaptureId",                TYPE_INT32  },
182     [ ANDROID_CONTROL_AE_STATE - ANDROID_CONTROL_START ] =
183     { "aeState",                       TYPE_BYTE   },
184     [ ANDROID_CONTROL_AF_STATE - ANDROID_CONTROL_START ] =
185     { "afState",                       TYPE_BYTE   },
186     [ ANDROID_CONTROL_AF_TRIGGER_ID - ANDROID_CONTROL_START ] =
187     { "afTriggerId",                   TYPE_INT32  },
188     [ ANDROID_CONTROL_AWB_STATE - ANDROID_CONTROL_START ] =
189     { "awbState",                      TYPE_BYTE   },
190 };
191
192 static tag_info_t android_demosaic[ANDROID_DEMOSAIC_END -
193         ANDROID_DEMOSAIC_START] = {
194     [ ANDROID_DEMOSAIC_MODE - ANDROID_DEMOSAIC_START ] =
195     { "mode",                          TYPE_BYTE   },
196 };
197
198 static tag_info_t android_edge[ANDROID_EDGE_END -
199         ANDROID_EDGE_START] = {
200     [ ANDROID_EDGE_MODE - ANDROID_EDGE_START ] =
201     { "mode",                          TYPE_BYTE   },
202     [ ANDROID_EDGE_STRENGTH - ANDROID_EDGE_START ] =
203     { "strength",                      TYPE_BYTE   },
204 };
205
206 static tag_info_t android_flash[ANDROID_FLASH_END -
207         ANDROID_FLASH_START] = {
208     [ ANDROID_FLASH_FIRING_POWER - ANDROID_FLASH_START ] =
209     { "firingPower",                   TYPE_BYTE   },
210     [ ANDROID_FLASH_FIRING_TIME - ANDROID_FLASH_START ] =
211     { "firingTime",                    TYPE_INT64  },
212     [ ANDROID_FLASH_MODE - ANDROID_FLASH_START ] =
213     { "mode",                          TYPE_BYTE   },
214     [ ANDROID_FLASH_COLOR_TEMPERATURE - ANDROID_FLASH_START ] =
215     { "colorTemperature",              TYPE_BYTE   },
216     [ ANDROID_FLASH_MAX_ENERGY - ANDROID_FLASH_START ] =
217     { "maxEnergy",                     TYPE_BYTE   },
218     [ ANDROID_FLASH_STATE - ANDROID_FLASH_START ] =
219     { "state",                         TYPE_BYTE   },
220 };
221
222 static tag_info_t android_flash_info[ANDROID_FLASH_INFO_END -
223         ANDROID_FLASH_INFO_START] = {
224     [ ANDROID_FLASH_INFO_AVAILABLE - ANDROID_FLASH_INFO_START ] =
225     { "available",                     TYPE_BYTE   },
226     [ ANDROID_FLASH_INFO_CHARGE_DURATION - ANDROID_FLASH_INFO_START ] =
227     { "chargeDuration",                TYPE_INT64  },
228 };
229
230 static tag_info_t android_geometric[ANDROID_GEOMETRIC_END -
231         ANDROID_GEOMETRIC_START] = {
232     [ ANDROID_GEOMETRIC_MODE - ANDROID_GEOMETRIC_START ] =
233     { "mode",                          TYPE_BYTE   },
234     [ ANDROID_GEOMETRIC_STRENGTH - ANDROID_GEOMETRIC_START ] =
235     { "strength",                      TYPE_BYTE   },
236 };
237
238 static tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END -
239         ANDROID_HOT_PIXEL_START] = {
240     [ ANDROID_HOT_PIXEL_MODE - ANDROID_HOT_PIXEL_START ] =
241     { "mode",                          TYPE_BYTE   },
242 };
243
244 static tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END -
245         ANDROID_HOT_PIXEL_INFO_START] = {
246     [ ANDROID_HOT_PIXEL_INFO_MAP - ANDROID_HOT_PIXEL_INFO_START ] =
247     { "map",                           TYPE_INT32  },
248 };
249
250 static tag_info_t android_jpeg[ANDROID_JPEG_END -
251         ANDROID_JPEG_START] = {
252     [ ANDROID_JPEG_GPS_COORDINATES - ANDROID_JPEG_START ] =
253     { "gpsCoordinates",                TYPE_DOUBLE },
254     [ ANDROID_JPEG_GPS_PROCESSING_METHOD - ANDROID_JPEG_START ] =
255     { "gpsProcessingMethod",           TYPE_BYTE   },
256     [ ANDROID_JPEG_GPS_TIMESTAMP - ANDROID_JPEG_START ] =
257     { "gpsTimestamp",                  TYPE_INT64  },
258     [ ANDROID_JPEG_ORIENTATION - ANDROID_JPEG_START ] =
259     { "orientation",                   TYPE_INT32  },
260     [ ANDROID_JPEG_QUALITY - ANDROID_JPEG_START ] =
261     { "quality",                       TYPE_BYTE   },
262     [ ANDROID_JPEG_THUMBNAIL_QUALITY - ANDROID_JPEG_START ] =
263     { "thumbnailQuality",              TYPE_BYTE   },
264     [ ANDROID_JPEG_THUMBNAIL_SIZE - ANDROID_JPEG_START ] =
265     { "thumbnailSize",                 TYPE_INT32  },
266     [ ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES - ANDROID_JPEG_START ] =
267     { "availableThumbnailSizes",       TYPE_INT32  },
268     [ ANDROID_JPEG_MAX_SIZE - ANDROID_JPEG_START ] =
269     { "maxSize",                       TYPE_INT32  },
270     [ ANDROID_JPEG_SIZE - ANDROID_JPEG_START ] =
271     { "size",                          TYPE_INT32  },
272 };
273
274 static tag_info_t android_lens[ANDROID_LENS_END -
275         ANDROID_LENS_START] = {
276     [ ANDROID_LENS_APERTURE - ANDROID_LENS_START ] =
277     { "aperture",                      TYPE_FLOAT  },
278     [ ANDROID_LENS_FILTER_DENSITY - ANDROID_LENS_START ] =
279     { "filterDensity",                 TYPE_FLOAT  },
280     [ ANDROID_LENS_FOCAL_LENGTH - ANDROID_LENS_START ] =
281     { "focalLength",                   TYPE_FLOAT  },
282     [ ANDROID_LENS_FOCUS_DISTANCE - ANDROID_LENS_START ] =
283     { "focusDistance",                 TYPE_FLOAT  },
284     [ ANDROID_LENS_OPTICAL_STABILIZATION_MODE - ANDROID_LENS_START ] =
285     { "opticalStabilizationMode",      TYPE_BYTE   },
286     [ ANDROID_LENS_FACING - ANDROID_LENS_START ] =
287     { "facing",                        TYPE_BYTE   },
288     [ ANDROID_LENS_OPTICAL_AXIS_ANGLE - ANDROID_LENS_START ] =
289     { "opticalAxisAngle",              TYPE_FLOAT  },
290     [ ANDROID_LENS_POSITION - ANDROID_LENS_START ] =
291     { "position",                      TYPE_FLOAT  },
292     [ ANDROID_LENS_FOCUS_RANGE - ANDROID_LENS_START ] =
293     { "focusRange",                    TYPE_FLOAT  },
294     [ ANDROID_LENS_STATE - ANDROID_LENS_START ] =
295     { "state",                         TYPE_BYTE   },
296 };
297
298 static tag_info_t android_lens_info[ANDROID_LENS_INFO_END -
299         ANDROID_LENS_INFO_START] = {
300     [ ANDROID_LENS_INFO_AVAILABLE_APERTURES - ANDROID_LENS_INFO_START ] =
301     { "availableApertures",            TYPE_FLOAT  },
302     [ ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES - ANDROID_LENS_INFO_START ] =
303     { "availableFilterDensities",      TYPE_FLOAT  },
304     [ ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS - ANDROID_LENS_INFO_START ] =
305     { "availableFocalLengths",         TYPE_FLOAT  },
306     [ ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION - ANDROID_LENS_INFO_START ] =
307     { "availableOpticalStabilization", TYPE_BYTE   },
308     [ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP - ANDROID_LENS_INFO_START ] =
309     { "geometricCorrectionMap",        TYPE_FLOAT  },
310     [ ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE - ANDROID_LENS_INFO_START ] =
311     { "geometricCorrectionMapSize",    TYPE_INT32  },
312     [ ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE - ANDROID_LENS_INFO_START ] =
313     { "hyperfocalDistance",            TYPE_FLOAT  },
314     [ ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE - ANDROID_LENS_INFO_START ] =
315     { "minimumFocusDistance",          TYPE_FLOAT  },
316     [ ANDROID_LENS_INFO_SHADING_MAP - ANDROID_LENS_INFO_START ] =
317     { "shadingMap",                    TYPE_FLOAT  },
318     [ ANDROID_LENS_INFO_SHADING_MAP_SIZE - ANDROID_LENS_INFO_START ] =
319     { "shadingMapSize",                TYPE_INT32  },
320 };
321
322 static tag_info_t android_noise_reduction[ANDROID_NOISE_REDUCTION_END -
323         ANDROID_NOISE_REDUCTION_START] = {
324     [ ANDROID_NOISE_REDUCTION_MODE - ANDROID_NOISE_REDUCTION_START ] =
325     { "mode",                          TYPE_BYTE   },
326     [ ANDROID_NOISE_REDUCTION_STRENGTH - ANDROID_NOISE_REDUCTION_START ] =
327     { "strength",                      TYPE_BYTE   },
328 };
329
330 static tag_info_t android_quirks[ANDROID_QUIRKS_END -
331         ANDROID_QUIRKS_START] = {
332     [ ANDROID_QUIRKS_METERING_CROP_REGION - ANDROID_QUIRKS_START ] =
333     { "meteringCropRegion",            TYPE_BYTE   },
334     [ ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO - ANDROID_QUIRKS_START ] =
335     { "triggerAfWithAuto",             TYPE_BYTE   },
336     [ ANDROID_QUIRKS_USE_ZSL_FORMAT - ANDROID_QUIRKS_START ] =
337     { "useZslFormat",                  TYPE_BYTE   },
338 };
339
340 static tag_info_t android_request[ANDROID_REQUEST_END -
341         ANDROID_REQUEST_START] = {
342     [ ANDROID_REQUEST_FRAME_COUNT - ANDROID_REQUEST_START ] =
343     { "frameCount",                    TYPE_INT32  },
344     [ ANDROID_REQUEST_ID - ANDROID_REQUEST_START ] =
345     { "id",                            TYPE_INT32  },
346     [ ANDROID_REQUEST_INPUT_STREAMS - ANDROID_REQUEST_START ] =
347     { "inputStreams",                  TYPE_BYTE   },
348     [ ANDROID_REQUEST_METADATA_MODE - ANDROID_REQUEST_START ] =
349     { "metadataMode",                  TYPE_BYTE   },
350     [ ANDROID_REQUEST_OUTPUT_STREAMS - ANDROID_REQUEST_START ] =
351     { "outputStreams",                 TYPE_BYTE   },
352     [ ANDROID_REQUEST_TYPE - ANDROID_REQUEST_START ] =
353     { "type",                          TYPE_BYTE   },
354     [ ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS - ANDROID_REQUEST_START ] =
355     { "maxNumOutputStreams",           TYPE_INT32  },
356     [ ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS - ANDROID_REQUEST_START ] =
357     { "maxNumReprocessStreams",        TYPE_INT32  },
358 };
359
360 static tag_info_t android_scaler[ANDROID_SCALER_END -
361         ANDROID_SCALER_START] = {
362     [ ANDROID_SCALER_CROP_REGION - ANDROID_SCALER_START ] =
363     { "cropRegion",                    TYPE_INT32  },
364     [ ANDROID_SCALER_AVAILABLE_FORMATS - ANDROID_SCALER_START ] =
365     { "availableFormats",              TYPE_INT32  },
366     [ ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS - ANDROID_SCALER_START ] =
367     { "availableJpegMinDurations",     TYPE_INT64  },
368     [ ANDROID_SCALER_AVAILABLE_JPEG_SIZES - ANDROID_SCALER_START ] =
369     { "availableJpegSizes",            TYPE_INT32  },
370     [ ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM - ANDROID_SCALER_START ] =
371     { "availableMaxDigitalZoom",       TYPE_INT32  },
372     [ ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS - ANDROID_SCALER_START ] =
373     { "availableProcessedMinDurations",
374                                         TYPE_INT64  },
375     [ ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES - ANDROID_SCALER_START ] =
376     { "availableProcessedSizes",       TYPE_INT32  },
377     [ ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS - ANDROID_SCALER_START ] =
378     { "availableRawMinDurations",      TYPE_INT64  },
379     [ ANDROID_SCALER_AVAILABLE_RAW_SIZES - ANDROID_SCALER_START ] =
380     { "availableRawSizes",             TYPE_INT32  },
381     [ ANDROID_SCALER_MAX_DIGITAL_ZOOM - ANDROID_SCALER_START ] =
382     { "maxDigitalZoom",                TYPE_FLOAT  },
383 };
384
385 static tag_info_t android_sensor[ANDROID_SENSOR_END -
386         ANDROID_SENSOR_START] = {
387     [ ANDROID_SENSOR_EXPOSURE_TIME - ANDROID_SENSOR_START ] =
388     { "exposureTime",                  TYPE_INT64  },
389     [ ANDROID_SENSOR_FRAME_DURATION - ANDROID_SENSOR_START ] =
390     { "frameDuration",                 TYPE_INT64  },
391     [ ANDROID_SENSOR_SENSITIVITY - ANDROID_SENSOR_START ] =
392     { "sensitivity",                   TYPE_INT32  },
393     [ ANDROID_SENSOR_BASE_GAIN_FACTOR - ANDROID_SENSOR_START ] =
394     { "baseGainFactor",                TYPE_RATIONAL
395                 },
396     [ ANDROID_SENSOR_BLACK_LEVEL_PATTERN - ANDROID_SENSOR_START ] =
397     { "blackLevelPattern",             TYPE_INT32  },
398     [ ANDROID_SENSOR_CALIBRATION_TRANSFORM1 - ANDROID_SENSOR_START ] =
399     { "calibrationTransform1",         TYPE_RATIONAL
400                 },
401     [ ANDROID_SENSOR_CALIBRATION_TRANSFORM2 - ANDROID_SENSOR_START ] =
402     { "calibrationTransform2",         TYPE_RATIONAL
403                 },
404     [ ANDROID_SENSOR_COLOR_TRANSFORM1 - ANDROID_SENSOR_START ] =
405     { "colorTransform1",               TYPE_RATIONAL
406                 },
407     [ ANDROID_SENSOR_COLOR_TRANSFORM2 - ANDROID_SENSOR_START ] =
408     { "colorTransform2",               TYPE_RATIONAL
409                 },
410     [ ANDROID_SENSOR_FORWARD_MATRIX1 - ANDROID_SENSOR_START ] =
411     { "forwardMatrix1",                TYPE_RATIONAL
412                 },
413     [ ANDROID_SENSOR_FORWARD_MATRIX2 - ANDROID_SENSOR_START ] =
414     { "forwardMatrix2",                TYPE_RATIONAL
415                 },
416     [ ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY - ANDROID_SENSOR_START ] =
417     { "maxAnalogSensitivity",          TYPE_INT32  },
418     [ ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS - ANDROID_SENSOR_START ] =
419     { "noiseModelCoefficients",        TYPE_FLOAT  },
420     [ ANDROID_SENSOR_ORIENTATION - ANDROID_SENSOR_START ] =
421     { "orientation",                   TYPE_INT32  },
422     [ ANDROID_SENSOR_REFERENCE_ILLUMINANT1 - ANDROID_SENSOR_START ] =
423     { "referenceIlluminant1",          TYPE_BYTE   },
424     [ ANDROID_SENSOR_REFERENCE_ILLUMINANT2 - ANDROID_SENSOR_START ] =
425     { "referenceIlluminant2",          TYPE_BYTE   },
426     [ ANDROID_SENSOR_TIMESTAMP - ANDROID_SENSOR_START ] =
427     { "timestamp",                     TYPE_INT64  },
428 };
429
430 static tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END -
431         ANDROID_SENSOR_INFO_START] = {
432     [ ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE - ANDROID_SENSOR_INFO_START ] =
433     { "activeArraySize",               TYPE_INT32  },
434     [ ANDROID_SENSOR_INFO_AVAILABLE_SENSITIVITIES - ANDROID_SENSOR_INFO_START ] =
435     { "availableSensitivities",        TYPE_INT32  },
436     [ ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT - ANDROID_SENSOR_INFO_START ] =
437     { "colorFilterArrangement",        TYPE_BYTE   },
438     [ ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE - ANDROID_SENSOR_INFO_START ] =
439     { "exposureTimeRange",             TYPE_INT64  },
440     [ ANDROID_SENSOR_INFO_MAX_FRAME_DURATION - ANDROID_SENSOR_INFO_START ] =
441     { "maxFrameDuration",              TYPE_INT64  },
442     [ ANDROID_SENSOR_INFO_PHYSICAL_SIZE - ANDROID_SENSOR_INFO_START ] =
443     { "physicalSize",                  TYPE_FLOAT  },
444     [ ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE - ANDROID_SENSOR_INFO_START ] =
445     { "pixelArraySize",                TYPE_INT32  },
446     [ ANDROID_SENSOR_INFO_WHITE_LEVEL - ANDROID_SENSOR_INFO_START ] =
447     { "whiteLevel",                    TYPE_INT32  },
448 };
449
450 static tag_info_t android_shading[ANDROID_SHADING_END -
451         ANDROID_SHADING_START] = {
452     [ ANDROID_SHADING_MODE - ANDROID_SHADING_START ] =
453     { "mode",                          TYPE_BYTE   },
454     [ ANDROID_SHADING_STRENGTH - ANDROID_SHADING_START ] =
455     { "strength",                      TYPE_BYTE   },
456 };
457
458 static tag_info_t android_statistics[ANDROID_STATISTICS_END -
459         ANDROID_STATISTICS_START] = {
460     [ ANDROID_STATISTICS_FACE_DETECT_MODE - ANDROID_STATISTICS_START ] =
461     { "faceDetectMode",                TYPE_BYTE   },
462     [ ANDROID_STATISTICS_HISTOGRAM_MODE - ANDROID_STATISTICS_START ] =
463     { "histogramMode",                 TYPE_BYTE   },
464     [ ANDROID_STATISTICS_SHARPNESS_MAP_MODE - ANDROID_STATISTICS_START ] =
465     { "sharpnessMapMode",              TYPE_BYTE   },
466     [ ANDROID_STATISTICS_FACE_IDS - ANDROID_STATISTICS_START ] =
467     { "faceIds",                       TYPE_INT32  },
468     [ ANDROID_STATISTICS_FACE_LANDMARKS - ANDROID_STATISTICS_START ] =
469     { "faceLandmarks",                 TYPE_INT32  },
470     [ ANDROID_STATISTICS_FACE_RECTANGLES - ANDROID_STATISTICS_START ] =
471     { "faceRectangles",                TYPE_INT32  },
472     [ ANDROID_STATISTICS_FACE_SCORES - ANDROID_STATISTICS_START ] =
473     { "faceScores",                    TYPE_BYTE   },
474     [ ANDROID_STATISTICS_HISTOGRAM - ANDROID_STATISTICS_START ] =
475     { "histogram",                     TYPE_INT32  },
476     [ ANDROID_STATISTICS_SHARPNESS_MAP - ANDROID_STATISTICS_START ] =
477     { "sharpnessMap",                  TYPE_INT32  },
478 };
479
480 static tag_info_t android_statistics_info[ANDROID_STATISTICS_INFO_END -
481         ANDROID_STATISTICS_INFO_START] = {
482     [ ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES - ANDROID_STATISTICS_INFO_START ] =
483     { "availableFaceDetectModes",      TYPE_BYTE   },
484     [ ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT - ANDROID_STATISTICS_INFO_START ] =
485     { "histogramBucketCount",          TYPE_INT32  },
486     [ ANDROID_STATISTICS_INFO_MAX_FACE_COUNT - ANDROID_STATISTICS_INFO_START ] =
487     { "maxFaceCount",                  TYPE_INT32  },
488     [ ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT - ANDROID_STATISTICS_INFO_START ] =
489     { "maxHistogramCount",             TYPE_INT32  },
490     [ ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE - ANDROID_STATISTICS_INFO_START ] =
491     { "maxSharpnessMapValue",          TYPE_INT32  },
492     [ ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE - ANDROID_STATISTICS_INFO_START ] =
493     { "sharpnessMapSize",              TYPE_INT32  },
494 };
495
496 static tag_info_t android_tonemap[ANDROID_TONEMAP_END -
497         ANDROID_TONEMAP_START] = {
498     [ ANDROID_TONEMAP_CURVE_BLUE - ANDROID_TONEMAP_START ] =
499     { "curveBlue",                     TYPE_FLOAT  },
500     [ ANDROID_TONEMAP_CURVE_GREEN - ANDROID_TONEMAP_START ] =
501     { "curveGreen",                    TYPE_FLOAT  },
502     [ ANDROID_TONEMAP_CURVE_RED - ANDROID_TONEMAP_START ] =
503     { "curveRed",                      TYPE_FLOAT  },
504     [ ANDROID_TONEMAP_MODE - ANDROID_TONEMAP_START ] =
505     { "mode",                          TYPE_BYTE   },
506     [ ANDROID_TONEMAP_MAX_CURVE_POINTS - ANDROID_TONEMAP_START ] =
507     { "maxCurvePoints",                TYPE_INT32  },
508 };
509
510 static tag_info_t android_led[ANDROID_LED_END -
511         ANDROID_LED_START] = {
512     [ ANDROID_LED_TRANSMIT - ANDROID_LED_START ] =
513     { "transmit",                      TYPE_BYTE   },
514     [ ANDROID_LED_AVAILABLE_LEDS - ANDROID_LED_START ] =
515     { "availableLeds",                 TYPE_BYTE   },
516 };
517
518
519 tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
520     android_color_correction,
521     android_control,
522     android_demosaic,
523     android_edge,
524     android_flash,
525     android_flash_info,
526     android_geometric,
527     android_hot_pixel,
528     android_hot_pixel_info,
529     android_jpeg,
530     android_lens,
531     android_lens_info,
532     android_noise_reduction,
533     android_quirks,
534     android_request,
535     android_scaler,
536     android_sensor,
537     android_sensor_info,
538     android_shading,
539     android_statistics,
540     android_statistics_info,
541     android_tonemap,
542     android_led,
543 };
544
545 int camera_metadata_enum_snprint(uint32_t tag,
546                                  uint32_t value,
547                                  char *dst,
548                                  size_t size) {
549     const char *msg = "error: not an enum";
550     int ret = -1;
551
552     switch(tag) {
553         case ANDROID_COLOR_CORRECTION_MODE: {
554             switch (value) {
555                 case ANDROID_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX:
556                     msg = "TRANSFORM_MATRIX";
557                     ret = 0;
558                     break;
559                 case ANDROID_COLOR_CORRECTION_MODE_FAST:
560                     msg = "FAST";
561                     ret = 0;
562                     break;
563                 case ANDROID_COLOR_CORRECTION_MODE_HIGH_QUALITY:
564                     msg = "HIGH_QUALITY";
565                     ret = 0;
566                     break;
567                 default:
568                     msg = "error: enum value out of range";
569             }
570             break;
571         }
572         case ANDROID_COLOR_CORRECTION_TRANSFORM: {
573             break;
574         }
575
576         case ANDROID_CONTROL_AE_ANTIBANDING_MODE: {
577             switch (value) {
578                 case ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF:
579                     msg = "OFF";
580                     ret = 0;
581                     break;
582                 case ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ:
583                     msg = "50HZ";
584                     ret = 0;
585                     break;
586                 case ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ:
587                     msg = "60HZ";
588                     ret = 0;
589                     break;
590                 case ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO:
591                     msg = "AUTO";
592                     ret = 0;
593                     break;
594                 default:
595                     msg = "error: enum value out of range";
596             }
597             break;
598         }
599         case ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION: {
600             break;
601         }
602         case ANDROID_CONTROL_AE_LOCK: {
603             switch (value) {
604                 case ANDROID_CONTROL_AE_LOCK_OFF:
605                     msg = "OFF";
606                     ret = 0;
607                     break;
608                 case ANDROID_CONTROL_AE_LOCK_ON:
609                     msg = "ON";
610                     ret = 0;
611                     break;
612                 default:
613                     msg = "error: enum value out of range";
614             }
615             break;
616         }
617         case ANDROID_CONTROL_AE_MODE: {
618             switch (value) {
619                 case ANDROID_CONTROL_AE_MODE_OFF:
620                     msg = "OFF";
621                     ret = 0;
622                     break;
623                 case ANDROID_CONTROL_AE_MODE_ON:
624                     msg = "ON";
625                     ret = 0;
626                     break;
627                 case ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH:
628                     msg = "ON_AUTO_FLASH";
629                     ret = 0;
630                     break;
631                 case ANDROID_CONTROL_AE_MODE_ON_ALWAYS_FLASH:
632                     msg = "ON_ALWAYS_FLASH";
633                     ret = 0;
634                     break;
635                 case ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE:
636                     msg = "ON_AUTO_FLASH_REDEYE";
637                     ret = 0;
638                     break;
639                 default:
640                     msg = "error: enum value out of range";
641             }
642             break;
643         }
644         case ANDROID_CONTROL_AE_REGIONS: {
645             break;
646         }
647         case ANDROID_CONTROL_AE_TARGET_FPS_RANGE: {
648             break;
649         }
650         case ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER: {
651             switch (value) {
652                 case ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE:
653                     msg = "IDLE";
654                     ret = 0;
655                     break;
656                 case ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START:
657                     msg = "START";
658                     ret = 0;
659                     break;
660                 default:
661                     msg = "error: enum value out of range";
662             }
663             break;
664         }
665         case ANDROID_CONTROL_AF_MODE: {
666             switch (value) {
667                 case ANDROID_CONTROL_AF_MODE_OFF:
668                     msg = "OFF";
669                     ret = 0;
670                     break;
671                 case ANDROID_CONTROL_AF_MODE_AUTO:
672                     msg = "AUTO";
673                     ret = 0;
674                     break;
675                 case ANDROID_CONTROL_AF_MODE_MACRO:
676                     msg = "MACRO";
677                     ret = 0;
678                     break;
679                 case ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO:
680                     msg = "CONTINUOUS_VIDEO";
681                     ret = 0;
682                     break;
683                 case ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE:
684                     msg = "CONTINUOUS_PICTURE";
685                     ret = 0;
686                     break;
687                 case ANDROID_CONTROL_AF_MODE_EDOF:
688                     msg = "EDOF";
689                     ret = 0;
690                     break;
691                 default:
692                     msg = "error: enum value out of range";
693             }
694             break;
695         }
696         case ANDROID_CONTROL_AF_REGIONS: {
697             break;
698         }
699         case ANDROID_CONTROL_AF_TRIGGER: {
700             switch (value) {
701                 case ANDROID_CONTROL_AF_TRIGGER_IDLE:
702                     msg = "IDLE";
703                     ret = 0;
704                     break;
705                 case ANDROID_CONTROL_AF_TRIGGER_START:
706                     msg = "START";
707                     ret = 0;
708                     break;
709                 case ANDROID_CONTROL_AF_TRIGGER_CANCEL:
710                     msg = "CANCEL";
711                     ret = 0;
712                     break;
713                 default:
714                     msg = "error: enum value out of range";
715             }
716             break;
717         }
718         case ANDROID_CONTROL_AWB_LOCK: {
719             switch (value) {
720                 case ANDROID_CONTROL_AWB_LOCK_OFF:
721                     msg = "OFF";
722                     ret = 0;
723                     break;
724                 case ANDROID_CONTROL_AWB_LOCK_ON:
725                     msg = "ON";
726                     ret = 0;
727                     break;
728                 default:
729                     msg = "error: enum value out of range";
730             }
731             break;
732         }
733         case ANDROID_CONTROL_AWB_MODE: {
734             switch (value) {
735                 case ANDROID_CONTROL_AWB_MODE_OFF:
736                     msg = "OFF";
737                     ret = 0;
738                     break;
739                 case ANDROID_CONTROL_AWB_MODE_AUTO:
740                     msg = "AUTO";
741                     ret = 0;
742                     break;
743                 case ANDROID_CONTROL_AWB_MODE_INCANDESCENT:
744                     msg = "INCANDESCENT";
745                     ret = 0;
746                     break;
747                 case ANDROID_CONTROL_AWB_MODE_FLUORESCENT:
748                     msg = "FLUORESCENT";
749                     ret = 0;
750                     break;
751                 case ANDROID_CONTROL_AWB_MODE_WARM_FLUORESCENT:
752                     msg = "WARM_FLUORESCENT";
753                     ret = 0;
754                     break;
755                 case ANDROID_CONTROL_AWB_MODE_DAYLIGHT:
756                     msg = "DAYLIGHT";
757                     ret = 0;
758                     break;
759                 case ANDROID_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT:
760                     msg = "CLOUDY_DAYLIGHT";
761                     ret = 0;
762                     break;
763                 case ANDROID_CONTROL_AWB_MODE_TWILIGHT:
764                     msg = "TWILIGHT";
765                     ret = 0;
766                     break;
767                 case ANDROID_CONTROL_AWB_MODE_SHADE:
768                     msg = "SHADE";
769                     ret = 0;
770                     break;
771                 default:
772                     msg = "error: enum value out of range";
773             }
774             break;
775         }
776         case ANDROID_CONTROL_AWB_REGIONS: {
777             break;
778         }
779         case ANDROID_CONTROL_CAPTURE_INTENT: {
780             switch (value) {
781                 case ANDROID_CONTROL_CAPTURE_INTENT_CUSTOM:
782                     msg = "CUSTOM";
783                     ret = 0;
784                     break;
785                 case ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW:
786                     msg = "PREVIEW";
787                     ret = 0;
788                     break;
789                 case ANDROID_CONTROL_CAPTURE_INTENT_STILL_CAPTURE:
790                     msg = "STILL_CAPTURE";
791                     ret = 0;
792                     break;
793                 case ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_RECORD:
794                     msg = "VIDEO_RECORD";
795                     ret = 0;
796                     break;
797                 case ANDROID_CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT:
798                     msg = "VIDEO_SNAPSHOT";
799                     ret = 0;
800                     break;
801                 case ANDROID_CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG:
802                     msg = "ZERO_SHUTTER_LAG";
803                     ret = 0;
804                     break;
805                 default:
806                     msg = "error: enum value out of range";
807             }
808             break;
809         }
810         case ANDROID_CONTROL_EFFECT_MODE: {
811             switch (value) {
812                 case ANDROID_CONTROL_EFFECT_MODE_OFF:
813                     msg = "OFF";
814                     ret = 0;
815                     break;
816                 case ANDROID_CONTROL_EFFECT_MODE_MONO:
817                     msg = "MONO";
818                     ret = 0;
819                     break;
820                 case ANDROID_CONTROL_EFFECT_MODE_NEGATIVE:
821                     msg = "NEGATIVE";
822                     ret = 0;
823                     break;
824                 case ANDROID_CONTROL_EFFECT_MODE_SOLARIZE:
825                     msg = "SOLARIZE";
826                     ret = 0;
827                     break;
828                 case ANDROID_CONTROL_EFFECT_MODE_SEPIA:
829                     msg = "SEPIA";
830                     ret = 0;
831                     break;
832                 case ANDROID_CONTROL_EFFECT_MODE_POSTERIZE:
833                     msg = "POSTERIZE";
834                     ret = 0;
835                     break;
836                 case ANDROID_CONTROL_EFFECT_MODE_WHITEBOARD:
837                     msg = "WHITEBOARD";
838                     ret = 0;
839                     break;
840                 case ANDROID_CONTROL_EFFECT_MODE_BLACKBOARD:
841                     msg = "BLACKBOARD";
842                     ret = 0;
843                     break;
844                 case ANDROID_CONTROL_EFFECT_MODE_AQUA:
845                     msg = "AQUA";
846                     ret = 0;
847                     break;
848                 default:
849                     msg = "error: enum value out of range";
850             }
851             break;
852         }
853         case ANDROID_CONTROL_MODE: {
854             switch (value) {
855                 case ANDROID_CONTROL_MODE_OFF:
856                     msg = "OFF";
857                     ret = 0;
858                     break;
859                 case ANDROID_CONTROL_MODE_AUTO:
860                     msg = "AUTO";
861                     ret = 0;
862                     break;
863                 case ANDROID_CONTROL_MODE_USE_SCENE_MODE:
864                     msg = "USE_SCENE_MODE";
865                     ret = 0;
866                     break;
867                 default:
868                     msg = "error: enum value out of range";
869             }
870             break;
871         }
872         case ANDROID_CONTROL_SCENE_MODE: {
873             switch (value) {
874                 case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED:
875                     msg = "UNSUPPORTED";
876                     ret = 0;
877                     break;
878                 case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY:
879                     msg = "FACE_PRIORITY";
880                     ret = 0;
881                     break;
882                 case ANDROID_CONTROL_SCENE_MODE_ACTION:
883                     msg = "ACTION";
884                     ret = 0;
885                     break;
886                 case ANDROID_CONTROL_SCENE_MODE_PORTRAIT:
887                     msg = "PORTRAIT";
888                     ret = 0;
889                     break;
890                 case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE:
891                     msg = "LANDSCAPE";
892                     ret = 0;
893                     break;
894                 case ANDROID_CONTROL_SCENE_MODE_NIGHT:
895                     msg = "NIGHT";
896                     ret = 0;
897                     break;
898                 case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT:
899                     msg = "NIGHT_PORTRAIT";
900                     ret = 0;
901                     break;
902                 case ANDROID_CONTROL_SCENE_MODE_THEATRE:
903                     msg = "THEATRE";
904                     ret = 0;
905                     break;
906                 case ANDROID_CONTROL_SCENE_MODE_BEACH:
907                     msg = "BEACH";
908                     ret = 0;
909                     break;
910                 case ANDROID_CONTROL_SCENE_MODE_SNOW:
911                     msg = "SNOW";
912                     ret = 0;
913                     break;
914                 case ANDROID_CONTROL_SCENE_MODE_SUNSET:
915                     msg = "SUNSET";
916                     ret = 0;
917                     break;
918                 case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO:
919                     msg = "STEADYPHOTO";
920                     ret = 0;
921                     break;
922                 case ANDROID_CONTROL_SCENE_MODE_FIREWORKS:
923                     msg = "FIREWORKS";
924                     ret = 0;
925                     break;
926                 case ANDROID_CONTROL_SCENE_MODE_SPORTS:
927                     msg = "SPORTS";
928                     ret = 0;
929                     break;
930                 case ANDROID_CONTROL_SCENE_MODE_PARTY:
931                     msg = "PARTY";
932                     ret = 0;
933                     break;
934                 case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT:
935                     msg = "CANDLELIGHT";
936                     ret = 0;
937                     break;
938                 case ANDROID_CONTROL_SCENE_MODE_BARCODE:
939                     msg = "BARCODE";
940                     ret = 0;
941                     break;
942                 default:
943                     msg = "error: enum value out of range";
944             }
945             break;
946         }
947         case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE: {
948             switch (value) {
949                 case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF:
950                     msg = "OFF";
951                     ret = 0;
952                     break;
953                 case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_ON:
954                     msg = "ON";
955                     ret = 0;
956                     break;
957                 default:
958                     msg = "error: enum value out of range";
959             }
960             break;
961         }
962         case ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES: {
963             break;
964         }
965         case ANDROID_CONTROL_AE_AVAILABLE_MODES: {
966             break;
967         }
968         case ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES: {
969             break;
970         }
971         case ANDROID_CONTROL_AE_COMPENSATION_RANGE: {
972             break;
973         }
974         case ANDROID_CONTROL_AE_COMPENSATION_STEP: {
975             break;
976         }
977         case ANDROID_CONTROL_AF_AVAILABLE_MODES: {
978             break;
979         }
980         case ANDROID_CONTROL_AVAILABLE_EFFECTS: {
981             break;
982         }
983         case ANDROID_CONTROL_AVAILABLE_SCENE_MODES: {
984             break;
985         }
986         case ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES: {
987             break;
988         }
989         case ANDROID_CONTROL_AWB_AVAILABLE_MODES: {
990             break;
991         }
992         case ANDROID_CONTROL_MAX_REGIONS: {
993             break;
994         }
995         case ANDROID_CONTROL_SCENE_MODE_OVERRIDES: {
996             break;
997         }
998         case ANDROID_CONTROL_AE_PRECAPTURE_ID: {
999             break;
1000         }
1001         case ANDROID_CONTROL_AE_STATE: {
1002             switch (value) {
1003                 case ANDROID_CONTROL_AE_STATE_INACTIVE:
1004                     msg = "INACTIVE";
1005                     ret = 0;
1006                     break;
1007                 case ANDROID_CONTROL_AE_STATE_SEARCHING:
1008                     msg = "SEARCHING";
1009                     ret = 0;
1010                     break;
1011                 case ANDROID_CONTROL_AE_STATE_CONVERGED:
1012                     msg = "CONVERGED";
1013                     ret = 0;
1014                     break;
1015                 case ANDROID_CONTROL_AE_STATE_LOCKED:
1016                     msg = "LOCKED";
1017                     ret = 0;
1018                     break;
1019                 case ANDROID_CONTROL_AE_STATE_FLASH_REQUIRED:
1020                     msg = "FLASH_REQUIRED";
1021                     ret = 0;
1022                     break;
1023                 case ANDROID_CONTROL_AE_STATE_PRECAPTURE:
1024                     msg = "PRECAPTURE";
1025                     ret = 0;
1026                     break;
1027                 default:
1028                     msg = "error: enum value out of range";
1029             }
1030             break;
1031         }
1032         case ANDROID_CONTROL_AF_STATE: {
1033             switch (value) {
1034                 case ANDROID_CONTROL_AF_STATE_INACTIVE:
1035                     msg = "INACTIVE";
1036                     ret = 0;
1037                     break;
1038                 case ANDROID_CONTROL_AF_STATE_PASSIVE_SCAN:
1039                     msg = "PASSIVE_SCAN";
1040                     ret = 0;
1041                     break;
1042                 case ANDROID_CONTROL_AF_STATE_PASSIVE_FOCUSED:
1043                     msg = "PASSIVE_FOCUSED";
1044                     ret = 0;
1045                     break;
1046                 case ANDROID_CONTROL_AF_STATE_ACTIVE_SCAN:
1047                     msg = "ACTIVE_SCAN";
1048                     ret = 0;
1049                     break;
1050                 case ANDROID_CONTROL_AF_STATE_FOCUSED_LOCKED:
1051                     msg = "FOCUSED_LOCKED";
1052                     ret = 0;
1053                     break;
1054                 case ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED:
1055                     msg = "NOT_FOCUSED_LOCKED";
1056                     ret = 0;
1057                     break;
1058                 default:
1059                     msg = "error: enum value out of range";
1060             }
1061             break;
1062         }
1063         case ANDROID_CONTROL_AF_TRIGGER_ID: {
1064             break;
1065         }
1066         case ANDROID_CONTROL_AWB_STATE: {
1067             switch (value) {
1068                 case ANDROID_CONTROL_AWB_STATE_INACTIVE:
1069                     msg = "INACTIVE";
1070                     ret = 0;
1071                     break;
1072                 case ANDROID_CONTROL_AWB_STATE_SEARCHING:
1073                     msg = "SEARCHING";
1074                     ret = 0;
1075                     break;
1076                 case ANDROID_CONTROL_AWB_STATE_CONVERGED:
1077                     msg = "CONVERGED";
1078                     ret = 0;
1079                     break;
1080                 case ANDROID_CONTROL_AWB_STATE_LOCKED:
1081                     msg = "LOCKED";
1082                     ret = 0;
1083                     break;
1084                 default:
1085                     msg = "error: enum value out of range";
1086             }
1087             break;
1088         }
1089
1090         case ANDROID_DEMOSAIC_MODE: {
1091             switch (value) {
1092                 case ANDROID_DEMOSAIC_MODE_FAST:
1093                     msg = "FAST";
1094                     ret = 0;
1095                     break;
1096                 case ANDROID_DEMOSAIC_MODE_HIGH_QUALITY:
1097                     msg = "HIGH_QUALITY";
1098                     ret = 0;
1099                     break;
1100                 default:
1101                     msg = "error: enum value out of range";
1102             }
1103             break;
1104         }
1105
1106         case ANDROID_EDGE_MODE: {
1107             switch (value) {
1108                 case ANDROID_EDGE_MODE_OFF:
1109                     msg = "OFF";
1110                     ret = 0;
1111                     break;
1112                 case ANDROID_EDGE_MODE_FAST:
1113                     msg = "FAST";
1114                     ret = 0;
1115                     break;
1116                 case ANDROID_EDGE_MODE_HIGH_QUALITY:
1117                     msg = "HIGH_QUALITY";
1118                     ret = 0;
1119                     break;
1120                 default:
1121                     msg = "error: enum value out of range";
1122             }
1123             break;
1124         }
1125         case ANDROID_EDGE_STRENGTH: {
1126             break;
1127         }
1128
1129         case ANDROID_FLASH_FIRING_POWER: {
1130             break;
1131         }
1132         case ANDROID_FLASH_FIRING_TIME: {
1133             break;
1134         }
1135         case ANDROID_FLASH_MODE: {
1136             switch (value) {
1137                 case ANDROID_FLASH_MODE_OFF:
1138                     msg = "OFF";
1139                     ret = 0;
1140                     break;
1141                 case ANDROID_FLASH_MODE_SINGLE:
1142                     msg = "SINGLE";
1143                     ret = 0;
1144                     break;
1145                 case ANDROID_FLASH_MODE_TORCH:
1146                     msg = "TORCH";
1147                     ret = 0;
1148                     break;
1149                 default:
1150                     msg = "error: enum value out of range";
1151             }
1152             break;
1153         }
1154         case ANDROID_FLASH_COLOR_TEMPERATURE: {
1155             break;
1156         }
1157         case ANDROID_FLASH_MAX_ENERGY: {
1158             break;
1159         }
1160         case ANDROID_FLASH_STATE: {
1161             switch (value) {
1162                 case ANDROID_FLASH_STATE_UNAVAILABLE:
1163                     msg = "UNAVAILABLE";
1164                     ret = 0;
1165                     break;
1166                 case ANDROID_FLASH_STATE_CHARGING:
1167                     msg = "CHARGING";
1168                     ret = 0;
1169                     break;
1170                 case ANDROID_FLASH_STATE_READY:
1171                     msg = "READY";
1172                     ret = 0;
1173                     break;
1174                 case ANDROID_FLASH_STATE_FIRED:
1175                     msg = "FIRED";
1176                     ret = 0;
1177                     break;
1178                 default:
1179                     msg = "error: enum value out of range";
1180             }
1181             break;
1182         }
1183
1184         case ANDROID_FLASH_INFO_AVAILABLE: {
1185             break;
1186         }
1187         case ANDROID_FLASH_INFO_CHARGE_DURATION: {
1188             break;
1189         }
1190
1191         case ANDROID_GEOMETRIC_MODE: {
1192             switch (value) {
1193                 case ANDROID_GEOMETRIC_MODE_OFF:
1194                     msg = "OFF";
1195                     ret = 0;
1196                     break;
1197                 case ANDROID_GEOMETRIC_MODE_FAST:
1198                     msg = "FAST";
1199                     ret = 0;
1200                     break;
1201                 case ANDROID_GEOMETRIC_MODE_HIGH_QUALITY:
1202                     msg = "HIGH_QUALITY";
1203                     ret = 0;
1204                     break;
1205                 default:
1206                     msg = "error: enum value out of range";
1207             }
1208             break;
1209         }
1210         case ANDROID_GEOMETRIC_STRENGTH: {
1211             break;
1212         }
1213
1214         case ANDROID_HOT_PIXEL_MODE: {
1215             switch (value) {
1216                 case ANDROID_HOT_PIXEL_MODE_OFF:
1217                     msg = "OFF";
1218                     ret = 0;
1219                     break;
1220                 case ANDROID_HOT_PIXEL_MODE_FAST:
1221                     msg = "FAST";
1222                     ret = 0;
1223                     break;
1224                 case ANDROID_HOT_PIXEL_MODE_HIGH_QUALITY:
1225                     msg = "HIGH_QUALITY";
1226                     ret = 0;
1227                     break;
1228                 default:
1229                     msg = "error: enum value out of range";
1230             }
1231             break;
1232         }
1233
1234         case ANDROID_HOT_PIXEL_INFO_MAP: {
1235             break;
1236         }
1237
1238         case ANDROID_JPEG_GPS_COORDINATES: {
1239             break;
1240         }
1241         case ANDROID_JPEG_GPS_PROCESSING_METHOD: {
1242             break;
1243         }
1244         case ANDROID_JPEG_GPS_TIMESTAMP: {
1245             break;
1246         }
1247         case ANDROID_JPEG_ORIENTATION: {
1248             break;
1249         }
1250         case ANDROID_JPEG_QUALITY: {
1251             break;
1252         }
1253         case ANDROID_JPEG_THUMBNAIL_QUALITY: {
1254             break;
1255         }
1256         case ANDROID_JPEG_THUMBNAIL_SIZE: {
1257             break;
1258         }
1259         case ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES: {
1260             break;
1261         }
1262         case ANDROID_JPEG_MAX_SIZE: {
1263             break;
1264         }
1265         case ANDROID_JPEG_SIZE: {
1266             break;
1267         }
1268
1269         case ANDROID_LENS_APERTURE: {
1270             break;
1271         }
1272         case ANDROID_LENS_FILTER_DENSITY: {
1273             break;
1274         }
1275         case ANDROID_LENS_FOCAL_LENGTH: {
1276             break;
1277         }
1278         case ANDROID_LENS_FOCUS_DISTANCE: {
1279             break;
1280         }
1281         case ANDROID_LENS_OPTICAL_STABILIZATION_MODE: {
1282             switch (value) {
1283                 case ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF:
1284                     msg = "OFF";
1285                     ret = 0;
1286                     break;
1287                 case ANDROID_LENS_OPTICAL_STABILIZATION_MODE_ON:
1288                     msg = "ON";
1289                     ret = 0;
1290                     break;
1291                 default:
1292                     msg = "error: enum value out of range";
1293             }
1294             break;
1295         }
1296         case ANDROID_LENS_FACING: {
1297             switch (value) {
1298                 case ANDROID_LENS_FACING_FRONT:
1299                     msg = "FRONT";
1300                     ret = 0;
1301                     break;
1302                 case ANDROID_LENS_FACING_BACK:
1303                     msg = "BACK";
1304                     ret = 0;
1305                     break;
1306                 default:
1307                     msg = "error: enum value out of range";
1308             }
1309             break;
1310         }
1311         case ANDROID_LENS_OPTICAL_AXIS_ANGLE: {
1312             break;
1313         }
1314         case ANDROID_LENS_POSITION: {
1315             break;
1316         }
1317         case ANDROID_LENS_FOCUS_RANGE: {
1318             break;
1319         }
1320         case ANDROID_LENS_STATE: {
1321             switch (value) {
1322                 case ANDROID_LENS_STATE_STATIONARY:
1323                     msg = "STATIONARY";
1324                     ret = 0;
1325                     break;
1326                 default:
1327                     msg = "error: enum value out of range";
1328             }
1329             break;
1330         }
1331
1332         case ANDROID_LENS_INFO_AVAILABLE_APERTURES: {
1333             break;
1334         }
1335         case ANDROID_LENS_INFO_AVAILABLE_FILTER_DENSITIES: {
1336             break;
1337         }
1338         case ANDROID_LENS_INFO_AVAILABLE_FOCAL_LENGTHS: {
1339             break;
1340         }
1341         case ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION: {
1342             break;
1343         }
1344         case ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP: {
1345             break;
1346         }
1347         case ANDROID_LENS_INFO_GEOMETRIC_CORRECTION_MAP_SIZE: {
1348             break;
1349         }
1350         case ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE: {
1351             break;
1352         }
1353         case ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE: {
1354             break;
1355         }
1356         case ANDROID_LENS_INFO_SHADING_MAP: {
1357             break;
1358         }
1359         case ANDROID_LENS_INFO_SHADING_MAP_SIZE: {
1360             break;
1361         }
1362
1363         case ANDROID_NOISE_REDUCTION_MODE: {
1364             switch (value) {
1365                 case ANDROID_NOISE_REDUCTION_MODE_OFF:
1366                     msg = "OFF";
1367                     ret = 0;
1368                     break;
1369                 case ANDROID_NOISE_REDUCTION_MODE_FAST:
1370                     msg = "FAST";
1371                     ret = 0;
1372                     break;
1373                 case ANDROID_NOISE_REDUCTION_MODE_HIGH_QUALITY:
1374                     msg = "HIGH_QUALITY";
1375                     ret = 0;
1376                     break;
1377                 default:
1378                     msg = "error: enum value out of range";
1379             }
1380             break;
1381         }
1382         case ANDROID_NOISE_REDUCTION_STRENGTH: {
1383             break;
1384         }
1385
1386         case ANDROID_QUIRKS_METERING_CROP_REGION: {
1387             break;
1388         }
1389         case ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO: {
1390             break;
1391         }
1392         case ANDROID_QUIRKS_USE_ZSL_FORMAT: {
1393             break;
1394         }
1395
1396         case ANDROID_REQUEST_FRAME_COUNT: {
1397             break;
1398         }
1399         case ANDROID_REQUEST_ID: {
1400             break;
1401         }
1402         case ANDROID_REQUEST_INPUT_STREAMS: {
1403             break;
1404         }
1405         case ANDROID_REQUEST_METADATA_MODE: {
1406             switch (value) {
1407                 case ANDROID_REQUEST_METADATA_MODE_NONE:
1408                     msg = "NONE";
1409                     ret = 0;
1410                     break;
1411                 case ANDROID_REQUEST_METADATA_MODE_FULL:
1412                     msg = "FULL";
1413                     ret = 0;
1414                     break;
1415                 default:
1416                     msg = "error: enum value out of range";
1417             }
1418             break;
1419         }
1420         case ANDROID_REQUEST_OUTPUT_STREAMS: {
1421             break;
1422         }
1423         case ANDROID_REQUEST_TYPE: {
1424             switch (value) {
1425                 case ANDROID_REQUEST_TYPE_CAPTURE:
1426                     msg = "CAPTURE";
1427                     ret = 0;
1428                     break;
1429                 case ANDROID_REQUEST_TYPE_REPROCESS:
1430                     msg = "REPROCESS";
1431                     ret = 0;
1432                     break;
1433                 default:
1434                     msg = "error: enum value out of range";
1435             }
1436             break;
1437         }
1438         case ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS: {
1439             break;
1440         }
1441         case ANDROID_REQUEST_MAX_NUM_REPROCESS_STREAMS: {
1442             break;
1443         }
1444
1445         case ANDROID_SCALER_CROP_REGION: {
1446             break;
1447         }
1448         case ANDROID_SCALER_AVAILABLE_FORMATS: {
1449             switch (value) {
1450                 case ANDROID_SCALER_AVAILABLE_FORMATS_RAW_SENSOR:
1451                     msg = "RAW_SENSOR";
1452                     ret = 0;
1453                     break;
1454                 case ANDROID_SCALER_AVAILABLE_FORMATS_YV12:
1455                     msg = "YV12";
1456                     ret = 0;
1457                     break;
1458                 case ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_SP:
1459                     msg = "YCbCr_420_SP";
1460                     ret = 0;
1461                     break;
1462                 case ANDROID_SCALER_AVAILABLE_FORMATS_JPEG:
1463                     msg = "JPEG";
1464                     ret = 0;
1465                     break;
1466                 default:
1467                     msg = "error: enum value out of range";
1468             }
1469             break;
1470         }
1471         case ANDROID_SCALER_AVAILABLE_JPEG_MIN_DURATIONS: {
1472             break;
1473         }
1474         case ANDROID_SCALER_AVAILABLE_JPEG_SIZES: {
1475             break;
1476         }
1477         case ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM: {
1478             break;
1479         }
1480         case ANDROID_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS: {
1481             break;
1482         }
1483         case ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES: {
1484             break;
1485         }
1486         case ANDROID_SCALER_AVAILABLE_RAW_MIN_DURATIONS: {
1487             break;
1488         }
1489         case ANDROID_SCALER_AVAILABLE_RAW_SIZES: {
1490             break;
1491         }
1492         case ANDROID_SCALER_MAX_DIGITAL_ZOOM: {
1493             break;
1494         }
1495
1496         case ANDROID_SENSOR_EXPOSURE_TIME: {
1497             break;
1498         }
1499         case ANDROID_SENSOR_FRAME_DURATION: {
1500             break;
1501         }
1502         case ANDROID_SENSOR_SENSITIVITY: {
1503             break;
1504         }
1505         case ANDROID_SENSOR_BASE_GAIN_FACTOR: {
1506             break;
1507         }
1508         case ANDROID_SENSOR_BLACK_LEVEL_PATTERN: {
1509             break;
1510         }
1511         case ANDROID_SENSOR_CALIBRATION_TRANSFORM1: {
1512             break;
1513         }
1514         case ANDROID_SENSOR_CALIBRATION_TRANSFORM2: {
1515             break;
1516         }
1517         case ANDROID_SENSOR_COLOR_TRANSFORM1: {
1518             break;
1519         }
1520         case ANDROID_SENSOR_COLOR_TRANSFORM2: {
1521             break;
1522         }
1523         case ANDROID_SENSOR_FORWARD_MATRIX1: {
1524             break;
1525         }
1526         case ANDROID_SENSOR_FORWARD_MATRIX2: {
1527             break;
1528         }
1529         case ANDROID_SENSOR_MAX_ANALOG_SENSITIVITY: {
1530             break;
1531         }
1532         case ANDROID_SENSOR_NOISE_MODEL_COEFFICIENTS: {
1533             break;
1534         }
1535         case ANDROID_SENSOR_ORIENTATION: {
1536             break;
1537         }
1538         case ANDROID_SENSOR_REFERENCE_ILLUMINANT1: {
1539             switch (value) {
1540                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT:
1541                     msg = "DAYLIGHT";
1542                     ret = 0;
1543                     break;
1544                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT:
1545                     msg = "FLUORESCENT";
1546                     ret = 0;
1547                     break;
1548                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN:
1549                     msg = "TUNGSTEN";
1550                     ret = 0;
1551                     break;
1552                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FLASH:
1553                     msg = "FLASH";
1554                     ret = 0;
1555                     break;
1556                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER:
1557                     msg = "FINE_WEATHER";
1558                     ret = 0;
1559                     break;
1560                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER:
1561                     msg = "CLOUDY_WEATHER";
1562                     ret = 0;
1563                     break;
1564                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_SHADE:
1565                     msg = "SHADE";
1566                     ret = 0;
1567                     break;
1568                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT:
1569                     msg = "DAYLIGHT_FLUORESCENT";
1570                     ret = 0;
1571                     break;
1572                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT:
1573                     msg = "DAY_WHITE_FLUORESCENT";
1574                     ret = 0;
1575                     break;
1576                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT:
1577                     msg = "COOL_WHITE_FLUORESCENT";
1578                     ret = 0;
1579                     break;
1580                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT:
1581                     msg = "WHITE_FLUORESCENT";
1582                     ret = 0;
1583                     break;
1584                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A:
1585                     msg = "STANDARD_A";
1586                     ret = 0;
1587                     break;
1588                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B:
1589                     msg = "STANDARD_B";
1590                     ret = 0;
1591                     break;
1592                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C:
1593                     msg = "STANDARD_C";
1594                     ret = 0;
1595                     break;
1596                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D55:
1597                     msg = "D55";
1598                     ret = 0;
1599                     break;
1600                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D65:
1601                     msg = "D65";
1602                     ret = 0;
1603                     break;
1604                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D75:
1605                     msg = "D75";
1606                     ret = 0;
1607                     break;
1608                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_D50:
1609                     msg = "D50";
1610                     ret = 0;
1611                     break;
1612                 case ANDROID_SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN:
1613                     msg = "ISO_STUDIO_TUNGSTEN";
1614                     ret = 0;
1615                     break;
1616                 default:
1617                     msg = "error: enum value out of range";
1618             }
1619             break;
1620         }
1621         case ANDROID_SENSOR_REFERENCE_ILLUMINANT2: {
1622             break;
1623         }
1624         case ANDROID_SENSOR_TIMESTAMP: {
1625             break;
1626         }
1627
1628         case ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE: {
1629             break;
1630         }
1631         case ANDROID_SENSOR_INFO_AVAILABLE_SENSITIVITIES: {
1632             break;
1633         }
1634         case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT: {
1635             switch (value) {
1636                 case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB:
1637                     msg = "RGGB";
1638                     ret = 0;
1639                     break;
1640                 case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG:
1641                     msg = "GRBG";
1642                     ret = 0;
1643                     break;
1644                 case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG:
1645                     msg = "GBRG";
1646                     ret = 0;
1647                     break;
1648                 case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR:
1649                     msg = "BGGR";
1650                     ret = 0;
1651                     break;
1652                 case ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB:
1653                     msg = "RGB";
1654                     ret = 0;
1655                     break;
1656                 default:
1657                     msg = "error: enum value out of range";
1658             }
1659             break;
1660         }
1661         case ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGE: {
1662             break;
1663         }
1664         case ANDROID_SENSOR_INFO_MAX_FRAME_DURATION: {
1665             break;
1666         }
1667         case ANDROID_SENSOR_INFO_PHYSICAL_SIZE: {
1668             break;
1669         }
1670         case ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE: {
1671             break;
1672         }
1673         case ANDROID_SENSOR_INFO_WHITE_LEVEL: {
1674             break;
1675         }
1676
1677         case ANDROID_SHADING_MODE: {
1678             switch (value) {
1679                 case ANDROID_SHADING_MODE_OFF:
1680                     msg = "OFF";
1681                     ret = 0;
1682                     break;
1683                 case ANDROID_SHADING_MODE_FAST:
1684                     msg = "FAST";
1685                     ret = 0;
1686                     break;
1687                 case ANDROID_SHADING_MODE_HIGH_QUALITY:
1688                     msg = "HIGH_QUALITY";
1689                     ret = 0;
1690                     break;
1691                 default:
1692                     msg = "error: enum value out of range";
1693             }
1694             break;
1695         }
1696         case ANDROID_SHADING_STRENGTH: {
1697             break;
1698         }
1699
1700         case ANDROID_STATISTICS_FACE_DETECT_MODE: {
1701             switch (value) {
1702                 case ANDROID_STATISTICS_FACE_DETECT_MODE_OFF:
1703                     msg = "OFF";
1704                     ret = 0;
1705                     break;
1706                 case ANDROID_STATISTICS_FACE_DETECT_MODE_SIMPLE:
1707                     msg = "SIMPLE";
1708                     ret = 0;
1709                     break;
1710                 case ANDROID_STATISTICS_FACE_DETECT_MODE_FULL:
1711                     msg = "FULL";
1712                     ret = 0;
1713                     break;
1714                 default:
1715                     msg = "error: enum value out of range";
1716             }
1717             break;
1718         }
1719         case ANDROID_STATISTICS_HISTOGRAM_MODE: {
1720             switch (value) {
1721                 case ANDROID_STATISTICS_HISTOGRAM_MODE_OFF:
1722                     msg = "OFF";
1723                     ret = 0;
1724                     break;
1725                 case ANDROID_STATISTICS_HISTOGRAM_MODE_ON:
1726                     msg = "ON";
1727                     ret = 0;
1728                     break;
1729                 default:
1730                     msg = "error: enum value out of range";
1731             }
1732             break;
1733         }
1734         case ANDROID_STATISTICS_SHARPNESS_MAP_MODE: {
1735             switch (value) {
1736                 case ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF:
1737                     msg = "OFF";
1738                     ret = 0;
1739                     break;
1740                 case ANDROID_STATISTICS_SHARPNESS_MAP_MODE_ON:
1741                     msg = "ON";
1742                     ret = 0;
1743                     break;
1744                 default:
1745                     msg = "error: enum value out of range";
1746             }
1747             break;
1748         }
1749         case ANDROID_STATISTICS_FACE_IDS: {
1750             break;
1751         }
1752         case ANDROID_STATISTICS_FACE_LANDMARKS: {
1753             break;
1754         }
1755         case ANDROID_STATISTICS_FACE_RECTANGLES: {
1756             break;
1757         }
1758         case ANDROID_STATISTICS_FACE_SCORES: {
1759             break;
1760         }
1761         case ANDROID_STATISTICS_HISTOGRAM: {
1762             break;
1763         }
1764         case ANDROID_STATISTICS_SHARPNESS_MAP: {
1765             break;
1766         }
1767
1768         case ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES: {
1769             break;
1770         }
1771         case ANDROID_STATISTICS_INFO_HISTOGRAM_BUCKET_COUNT: {
1772             break;
1773         }
1774         case ANDROID_STATISTICS_INFO_MAX_FACE_COUNT: {
1775             break;
1776         }
1777         case ANDROID_STATISTICS_INFO_MAX_HISTOGRAM_COUNT: {
1778             break;
1779         }
1780         case ANDROID_STATISTICS_INFO_MAX_SHARPNESS_MAP_VALUE: {
1781             break;
1782         }
1783         case ANDROID_STATISTICS_INFO_SHARPNESS_MAP_SIZE: {
1784             break;
1785         }
1786
1787         case ANDROID_TONEMAP_CURVE_BLUE: {
1788             break;
1789         }
1790         case ANDROID_TONEMAP_CURVE_GREEN: {
1791             break;
1792         }
1793         case ANDROID_TONEMAP_CURVE_RED: {
1794             break;
1795         }
1796         case ANDROID_TONEMAP_MODE: {
1797             switch (value) {
1798                 case ANDROID_TONEMAP_MODE_CONTRAST_CURVE:
1799                     msg = "CONTRAST_CURVE";
1800                     ret = 0;
1801                     break;
1802                 case ANDROID_TONEMAP_MODE_FAST:
1803                     msg = "FAST";
1804                     ret = 0;
1805                     break;
1806                 case ANDROID_TONEMAP_MODE_HIGH_QUALITY:
1807                     msg = "HIGH_QUALITY";
1808                     ret = 0;
1809                     break;
1810                 default:
1811                     msg = "error: enum value out of range";
1812             }
1813             break;
1814         }
1815         case ANDROID_TONEMAP_MAX_CURVE_POINTS: {
1816             break;
1817         }
1818
1819         case ANDROID_LED_TRANSMIT: {
1820             switch (value) {
1821                 case ANDROID_LED_TRANSMIT_OFF:
1822                     msg = "OFF";
1823                     ret = 0;
1824                     break;
1825                 case ANDROID_LED_TRANSMIT_ON:
1826                     msg = "ON";
1827                     ret = 0;
1828                     break;
1829                 default:
1830                     msg = "error: enum value out of range";
1831             }
1832             break;
1833         }
1834         case ANDROID_LED_AVAILABLE_LEDS: {
1835             switch (value) {
1836                 case ANDROID_LED_AVAILABLE_LEDS_TRANSMIT:
1837                     msg = "TRANSMIT";
1838                     ret = 0;
1839                     break;
1840                 default:
1841                     msg = "error: enum value out of range";
1842             }
1843             break;
1844         }
1845
1846     }
1847
1848     strncpy(dst, msg, size - 1);
1849     dst[size - 1] = '\0';
1850
1851     return ret;
1852 }
1853
1854
1855 #define CAMERA_METADATA_ENUM_STRING_MAX_SIZE 23