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