From 623ff65afea34612498dcf33887ffaf8b194c281 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Wed, 11 Apr 2012 16:15:50 -0700 Subject: [PATCH] Make camera metadata tag definitions more robust to mismatches. Use array assignment-by-index syntax to make sure we match the desired index to the entry, so it's easier to keep the metadata header and the info structures in sync. Change-Id: I06d1ea3d52c651b447cc167cd551e907c8e001ab --- camera/include/system/camera_metadata_tags.h | 4 +- camera/src/camera_metadata.c | 3 +- camera/src/camera_metadata_tag_info.c | 465 ++++++++++++++++++--------- 3 files changed, 317 insertions(+), 155 deletions(-) diff --git a/camera/include/system/camera_metadata_tags.h b/camera/include/system/camera_metadata_tags.h index ce1319e3..bfb4fe32 100644 --- a/camera/include/system/camera_metadata_tags.h +++ b/camera/include/system/camera_metadata_tags.h @@ -245,13 +245,13 @@ enum { ANDROID_JPEG_INFO_END, ANDROID_STATS_FACE_DETECT_MODE = ANDROID_STATS_START, - ANDROID_STATS_HISTOGRAM_MODE, - ANDROID_STATS_SHARPNESS_MAP_MODE, ANDROID_STATS_FACE_RECTANGLES, ANDROID_STATS_FACE_SCORES, ANDROID_STATS_FACE_LANDMARKS, ANDROID_STATS_FACE_IDS, + ANDROID_STATS_HISTOGRAM_MODE, ANDROID_STATS_HISTOGRAM, + ANDROID_STATS_SHARPNESS_MAP_MODE, ANDROID_STATS_SHARPNESS_MAP, ANDROID_STATS_END, diff --git a/camera/src/camera_metadata.c b/camera/src/camera_metadata.c index c7121cac..1991835a 100644 --- a/camera/src/camera_metadata.c +++ b/camera/src/camera_metadata.c @@ -13,10 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#define _GNU_SOURCE // for fdprintf #include #include -#define _GNU_SOURCE // for fdprintf #include #include #include diff --git a/camera/src/camera_metadata_tag_info.c b/camera/src/camera_metadata_tag_info.c index fada37ea..0481eb58 100644 --- a/camera/src/camera_metadata_tag_info.c +++ b/camera/src/camera_metadata_tag_info.c @@ -19,185 +19,245 @@ * * It is logically a part of camera_metadata.c. It is broken out for ease of * maintaining the tag info. + * + * Array assignments are done using specified-index syntax to keep things in + * sync with camera_metadata_tags.h */ const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = { - "android.request", - "android.control", - "android.control.info", - "android.sensor", - "android.sensor.info", - "android.lens", - "android.lens.info", - "android.flash", - "android.flash.info", - "android.hotPixel", - "android.hotPixel.info", - "android.demosaic", - "android.demosaic.info", - "android.noiseReduction", - "android.noiseReduction.info", - "android.shadingCorrection", - "android.shadingCorrection.info", - "android.geometricCorrection", - "android.geometricCorrection.info", - "android.colorCorrection", - "android.colorCorrection.info", - "android.tonemap", - "android.tonemap.info", - "android.edge", - "android.edge.info", - "android.scaler", - "android.scaler.info", - "android.jpeg", - "android.jpeg.info", - "android.statistics", - "android.statistics.info" + [ANDROID_REQUEST] = "android.request", + [ANDROID_LENS] = "android.lens", + [ANDROID_LENS_INFO] = "android.lens.info", + [ANDROID_SENSOR] = "android.sensor", + [ANDROID_SENSOR_INFO] = "android.sensor.info", + [ANDROID_FLASH] = "android.flash", + [ANDROID_FLASH_INFO] = "android.flash.info", + [ANDROID_HOT_PIXEL] = "android.hotPixel", + [ANDROID_HOT_PIXEL_INFO] = "android.hotPixel.info", + [ANDROID_DEMOSAIC] = "android.demosaic", + [ANDROID_DEMOSAIC_INFO] = "android.demosaic.info", + [ANDROID_NOISE] = "android.noiseReduction", + [ANDROID_NOISE_INFO] = "android.noiseReduction.info", + [ANDROID_SHADING] = "android.shadingCorrection", + [ANDROID_SHADING_INFO] = "android.shadingCorrection.info", + [ANDROID_GEOMETRIC] = "android.geometricCorrection", + [ANDROID_GEOMETRIC_INFO] = "android.geometricCorrection.info", + [ANDROID_COLOR] = "android.colorCorrection", + [ANDROID_COLOR_INFO] = "android.colorCorrection.info", + [ANDROID_TONEMAP] = "android.tonemap", + [ANDROID_TONEMAP_INFO] = "android.tonemap.info", + [ANDROID_EDGE] = "android.edge", + [ANDROID_EDGE_INFO] = "android.edge.info", + [ANDROID_SCALER] = "android.scaler", + [ANDROID_SCALER_INFO] = "android.scaler.info", + [ANDROID_JPEG] = "android.jpeg", + [ANDROID_JPEG_INFO] = "android.jpeg.info", + [ANDROID_STATS] = "android.statistics", + [ANDROID_STATS_INFO] = "android.statistics.info", + [ANDROID_CONTROL] = "android.control", + [ANDROID_CONTROL_INFO] = "android.control.info" }; unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = { - { ANDROID_REQUEST_START, ANDROID_REQUEST_END }, - { ANDROID_LENS_START, ANDROID_LENS_END }, - { ANDROID_LENS_INFO_START, ANDROID_LENS_INFO_END }, - { ANDROID_SENSOR_START, ANDROID_SENSOR_END }, - { ANDROID_SENSOR_INFO_START, ANDROID_SENSOR_INFO_END }, - { ANDROID_FLASH_START, ANDROID_FLASH_END }, - { ANDROID_FLASH_INFO_START, ANDROID_FLASH_INFO_END }, - { ANDROID_HOT_PIXEL_START, ANDROID_HOT_PIXEL_END }, - { ANDROID_HOT_PIXEL_INFO_START, ANDROID_HOT_PIXEL_INFO_END }, - { ANDROID_DEMOSAIC_START, ANDROID_DEMOSAIC_END }, - { ANDROID_DEMOSAIC_INFO_START, ANDROID_DEMOSAIC_INFO_END }, - { ANDROID_NOISE_START, ANDROID_NOISE_END }, - { ANDROID_NOISE_INFO_START, ANDROID_NOISE_INFO_END }, - { ANDROID_SHADING_START, ANDROID_SHADING_END }, - { ANDROID_SHADING_INFO_START, ANDROID_SHADING_INFO_END }, - { ANDROID_GEOMETRIC_START, ANDROID_GEOMETRIC_END }, - { ANDROID_GEOMETRIC_INFO_START, ANDROID_GEOMETRIC_INFO_END }, - { ANDROID_COLOR_START, ANDROID_COLOR_END }, - { ANDROID_COLOR_INFO_START, ANDROID_COLOR_INFO_END }, - { ANDROID_TONEMAP_START, ANDROID_TONEMAP_END }, - { ANDROID_TONEMAP_INFO_START, ANDROID_TONEMAP_INFO_END }, - { ANDROID_EDGE_START, ANDROID_EDGE_END }, - { ANDROID_EDGE_INFO_START, ANDROID_EDGE_INFO_END }, - { ANDROID_SCALER_START, ANDROID_SCALER_END }, - { ANDROID_SCALER_INFO_START, ANDROID_SCALER_INFO_END }, - { ANDROID_JPEG_START, ANDROID_JPEG_END }, - { ANDROID_JPEG_INFO_START, ANDROID_JPEG_INFO_END }, - { ANDROID_STATS_START, ANDROID_STATS_END }, - { ANDROID_STATS_INFO_START, ANDROID_STATS_INFO_END }, - { ANDROID_CONTROL_START, ANDROID_CONTROL_END }, - { ANDROID_CONTROL_INFO_START, ANDROID_CONTROL_INFO_END } + [ANDROID_REQUEST] = { ANDROID_REQUEST_START, + ANDROID_REQUEST_END }, + [ANDROID_LENS] = { ANDROID_LENS_START, + ANDROID_LENS_END }, + [ANDROID_LENS_INFO] = { ANDROID_LENS_INFO_START, + ANDROID_LENS_INFO_END }, + [ANDROID_SENSOR] = { ANDROID_SENSOR_START, + ANDROID_SENSOR_END }, + [ANDROID_SENSOR_INFO] = { ANDROID_SENSOR_INFO_START, + ANDROID_SENSOR_INFO_END }, + [ANDROID_FLASH] = { ANDROID_FLASH_START, + ANDROID_FLASH_END }, + [ANDROID_FLASH_INFO] = { ANDROID_FLASH_INFO_START, + ANDROID_FLASH_INFO_END }, + [ANDROID_HOT_PIXEL] = { ANDROID_HOT_PIXEL_START, + ANDROID_HOT_PIXEL_END }, + [ANDROID_HOT_PIXEL_INFO] = { ANDROID_HOT_PIXEL_INFO_START, + ANDROID_HOT_PIXEL_INFO_END }, + [ANDROID_DEMOSAIC] = { ANDROID_DEMOSAIC_START, + ANDROID_DEMOSAIC_END }, + [ANDROID_DEMOSAIC_INFO] = { ANDROID_DEMOSAIC_INFO_START, + ANDROID_DEMOSAIC_INFO_END }, + [ANDROID_NOISE] = { ANDROID_NOISE_START, + ANDROID_NOISE_END }, + [ANDROID_NOISE_INFO] = { ANDROID_NOISE_INFO_START, + ANDROID_NOISE_INFO_END }, + [ANDROID_SHADING] = { ANDROID_SHADING_START, + ANDROID_SHADING_END }, + [ANDROID_SHADING_INFO] = { ANDROID_SHADING_INFO_START, + ANDROID_SHADING_INFO_END }, + [ANDROID_GEOMETRIC] = { ANDROID_GEOMETRIC_START, + ANDROID_GEOMETRIC_END }, + [ANDROID_GEOMETRIC_INFO] = { ANDROID_GEOMETRIC_INFO_START, + ANDROID_GEOMETRIC_INFO_END }, + [ANDROID_COLOR] = { ANDROID_COLOR_START, + ANDROID_COLOR_END }, + [ANDROID_COLOR_INFO] = { ANDROID_COLOR_INFO_START, + ANDROID_COLOR_INFO_END }, + [ANDROID_TONEMAP] = { ANDROID_TONEMAP_START, + ANDROID_TONEMAP_END }, + [ANDROID_TONEMAP_INFO] = { ANDROID_TONEMAP_INFO_START, + ANDROID_TONEMAP_INFO_END }, + [ANDROID_EDGE] = { ANDROID_EDGE_START, + ANDROID_EDGE_END }, + [ANDROID_EDGE_INFO] = { ANDROID_EDGE_INFO_START, + ANDROID_EDGE_INFO_END }, + [ANDROID_SCALER] = { ANDROID_SCALER_START, + ANDROID_SCALER_END }, + [ANDROID_SCALER_INFO] = { ANDROID_SCALER_INFO_START, + ANDROID_SCALER_INFO_END }, + [ANDROID_JPEG] = { ANDROID_JPEG_START, + ANDROID_JPEG_END }, + [ANDROID_JPEG_INFO] = { ANDROID_JPEG_INFO_START, + ANDROID_JPEG_INFO_END }, + [ANDROID_STATS] = { ANDROID_STATS_START, + ANDROID_STATS_END }, + [ANDROID_STATS_INFO] = { ANDROID_STATS_INFO_START, + ANDROID_STATS_INFO_END }, + [ANDROID_CONTROL] = { ANDROID_CONTROL_START, + ANDROID_CONTROL_END }, + [ANDROID_CONTROL_INFO] = { ANDROID_CONTROL_INFO_START, + ANDROID_CONTROL_INFO_END } }; +// Shortcut defines to make succint names for field definitions +#define TIDX(section, tag) \ + [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _START ] + +#define TIIDX(section, tag) \ + [ ANDROID_ ## section ## _ ## tag - ANDROID_ ## section ## _INFO_START ] + tag_info_t android_request[ANDROID_REQUEST_END - ANDROID_REQUEST_START] = { - { "id", TYPE_INT32 }, - { "metadataMode", TYPE_BYTE }, - { "outputStreams", TYPE_BYTE }, - { "frameCount", TYPE_INT32 } + TIDX(REQUEST, ID) = + { "id", TYPE_INT32 }, + TIDX(REQUEST, METADATA_MODE) = + { "metadataMode", TYPE_BYTE }, + TIDX(REQUEST, OUTPUT_STREAMS) = + { "outputStreams", TYPE_BYTE }, + TIDX(REQUEST, FRAME_COUNT) = + { "frameCount", TYPE_INT32 } }; -tag_info_t android_control[ANDROID_CONTROL_END - - ANDROID_CONTROL_START] = { - { "mode", TYPE_BYTE }, - { "aeMode", TYPE_BYTE }, - { "aeRegions", TYPE_INT32 }, - { "aeExposureCompensation", TYPE_INT32 }, - { "aeTargetFpsRange", TYPE_INT32 }, - { "aeAntibandingMode", TYPE_BYTE }, - { "awbMode", TYPE_BYTE }, - { "awbRegions", TYPE_INT32 }, - { "afMode", TYPE_BYTE }, - { "afRegions", TYPE_INT32 }, - { "afTrigger", TYPE_BYTE }, - { "afState", TYPE_BYTE }, - { "videoStabilizationMode", TYPE_BYTE } +tag_info_t android_lens[ANDROID_LENS_END - + ANDROID_LENS_START] = { + TIDX(LENS, FOCUS_DISTANCE) = + { "focusDistance", TYPE_FLOAT }, + TIDX(LENS, APERTURE) = + { "aperture", TYPE_FLOAT }, + TIDX(LENS, FOCAL_LENGTH) = + { "focalLength", TYPE_FLOAT }, + TIDX(LENS, FILTER_DENSITY) = + { "filterDensity", TYPE_FLOAT }, + TIDX(LENS, OPTICAL_STABILIZATION_MODE) = + { "opticalStabilizationMode", TYPE_BYTE }, + TIDX(LENS, FOCUS_RANGE) = + { "focusRange", TYPE_FLOAT } }; -tag_info_t android_control_info[ANDROID_CONTROL_INFO_END - - ANDROID_CONTROL_INFO_START] = { - { "availableModes", TYPE_BYTE }, - { "maxRegions", TYPE_INT32 }, - { "aeAvailableModes", TYPE_BYTE }, - { "aeCompensationStep", TYPE_RATIONAL }, - { "aeCompensationRange", TYPE_INT32 }, - { "aeAvailableTargetFpsRanges", TYPE_INT32 }, - { "aeAvailableAntibandingModes", TYPE_BYTE }, - { "awbAvailableModes", TYPE_BYTE }, - { "afAvailableModes", TYPE_BYTE } +tag_info_t android_lens_info[ANDROID_LENS_INFO_END - + ANDROID_LENS_INFO_START] = { + TIIDX(LENS, MINIMUM_FOCUS_DISTANCE) = + { "minimumFocusDistance", TYPE_FLOAT }, + TIIDX(LENS, AVAILABLE_FOCAL_LENGTHS) = + { "availableFocalLengths", TYPE_FLOAT }, + TIIDX(LENS, AVAILABLE_APERTURES) = + { "availableApertures", TYPE_FLOAT }, + TIIDX(LENS, AVAILABLE_FILTER_DENSITY) = + { "availableFilterDensities", TYPE_FLOAT }, + TIIDX(LENS, AVAILABLE_OPTICAL_STABILIZATION) = + { "availableOpticalStabilizationModes", TYPE_BYTE }, + TIIDX(LENS, SHADING_MAP) = + { "shadingMap", TYPE_FLOAT }, + TIIDX(LENS, GEOMETRIC_CORRECTION_MAP) = + { "geometricCorrectionMap", TYPE_FLOAT }, + TIIDX(LENS, FACING) = + { "facing", TYPE_BYTE }, + TIIDX(LENS, POSITION) = + { "position", TYPE_FLOAT } }; tag_info_t android_sensor[ANDROID_SENSOR_END - ANDROID_SENSOR_START] = { + TIDX(SENSOR, EXPOSURE_TIME) = { "exposureTime", TYPE_INT64 }, + TIDX(SENSOR, FRAME_DURATION) = { "frameDuration", TYPE_INT64 }, + TIDX(SENSOR, SENSITIVITY) = { "sensitivity", TYPE_INT32 }, + TIDX(SENSOR, TIMESTAMP) = { "timestamp", TYPE_INT64 } }; tag_info_t android_sensor_info[ANDROID_SENSOR_INFO_END - ANDROID_SENSOR_INFO_START] = { + TIIDX(SENSOR, EXPOSURE_TIME_RANGE) = { "exposureTimeRange", TYPE_INT64 }, + TIIDX(SENSOR, MAX_FRAME_DURATION) = { "maxFrameDuration", TYPE_INT64 }, + TIIDX(SENSOR, AVAILABLE_SENSITIVITIES) = { "availableSensitivities", TYPE_INT32 }, + TIIDX(SENSOR, COLOR_FILTER_ARRANGEMENT) = { "colorFilterArrangement", TYPE_BYTE }, + TIIDX(SENSOR, PIXEL_ARRAY_SIZE) = { "pixelArraySize", TYPE_INT32 }, + TIIDX(SENSOR, ACTIVE_ARRAY_SIZE) = { "activeArraySize", TYPE_INT32 }, + TIIDX(SENSOR, WHITE_LEVEL) = { "whiteLevel", TYPE_INT32 }, + TIIDX(SENSOR, BLACK_LEVEL_PATTERN) = { "blackLevelPattern", TYPE_INT32 }, + TIIDX(SENSOR, COLOR_TRANSFORM_1) = { "colorTransform1", TYPE_RATIONAL }, + TIIDX(SENSOR, COLOR_TRANSFORM_2) = { "colorTransform2", TYPE_RATIONAL }, + TIIDX(SENSOR, REFERENCE_ILLUMINANT_1) = { "referenceIlluminant1", TYPE_BYTE }, + TIIDX(SENSOR, REFERENCE_ILLUMINANT_2) = { "referenceIlluminant2", TYPE_BYTE }, + TIIDX(SENSOR, FORWARD_MATRIX_1) = { "forwardMatrix1", TYPE_RATIONAL }, + TIIDX(SENSOR, FORWARD_MATRIX_2) = { "forwardMatrix2", TYPE_RATIONAL }, + TIIDX(SENSOR, CALIBRATION_TRANSFORM_1) = { "calibrationTransform1", TYPE_RATIONAL }, + TIIDX(SENSOR, CALIBRATION_TRANSFORM_2) = { "calibrationTransform2", TYPE_RATIONAL }, + TIIDX(SENSOR, BASE_GAIN_FACTOR) = { "baseGainFactor", TYPE_RATIONAL }, + TIIDX(SENSOR, MAX_ANALOG_SENSITIVITY) = { "maxAnalogSensitivity", TYPE_INT32 }, + TIIDX(SENSOR, NOISE_MODEL_COEFFICIENTS) = { "noiseModelCoefficients", TYPE_FLOAT }, + TIIDX(SENSOR, ORIENTATION) = { "orientation", TYPE_INT32 } }; -tag_info_t android_lens[ANDROID_LENS_END - - ANDROID_LENS_START] = { - { "focusDistance", TYPE_FLOAT }, - { "aperture", TYPE_FLOAT }, - { "focalLength", TYPE_FLOAT }, - { "filterDensity", TYPE_FLOAT }, - { "opticalStabilizationMode", TYPE_BYTE }, - { "focusRange", TYPE_FLOAT } -}; - -tag_info_t android_lens_info[ANDROID_LENS_INFO_END - - ANDROID_LENS_INFO_START] = { - { "minimumFocusDistance", TYPE_FLOAT }, - { "availableFocalLengths", TYPE_FLOAT }, - { "availableApertures", TYPE_FLOAT }, - { "availableFilterDensities", TYPE_FLOAT }, - { "availableOpticalStabilizationModes", TYPE_BYTE }, - { "shadingMap", TYPE_FLOAT }, - { "geometricCorrectionMap", TYPE_FLOAT }, - { "facing", TYPE_BYTE }, - { "position", TYPE_FLOAT } -}; - tag_info_t android_flash[ANDROID_FLASH_END - ANDROID_FLASH_START] = { + TIDX(FLASH, MODE) = { "mode", TYPE_BYTE }, + TIDX(FLASH, FIRING_POWER) = { "firingPower", TYPE_BYTE }, + TIDX(FLASH, FIRING_TIME) = { "firingTime", TYPE_INT64 } }; tag_info_t android_flash_info[ANDROID_FLASH_INFO_END - ANDROID_FLASH_INFO_START] = { + TIIDX(FLASH, AVAILABLE_MODES) = { "available", TYPE_BYTE }, + TIIDX(FLASH, CHARGE_DURATION) = { "chargeDuration", TYPE_INT64 }, }; tag_info_t android_hot_pixel[ANDROID_HOT_PIXEL_END - ANDROID_HOT_PIXEL_START] = { - { "mode", TYPE_BYTE } + TIDX(HOT_PIXEL, MODE) = + { "mode", TYPE_BYTE } }; tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END - @@ -205,7 +265,8 @@ tag_info_t android_hot_pixel_info[ANDROID_HOT_PIXEL_INFO_END - tag_info_t android_demosaic[ANDROID_DEMOSAIC_END - ANDROID_DEMOSAIC_START] = { - { "mode", TYPE_BYTE } + TIDX(DEMOSAIC, MODE) = + { "mode", TYPE_BYTE } }; tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END - @@ -213,8 +274,10 @@ tag_info_t android_demosaic_info[ANDROID_DEMOSAIC_INFO_END - tag_info_t android_noise[ANDROID_NOISE_END - ANDROID_NOISE_START] = { - { "mode", TYPE_BYTE }, - { "strength", TYPE_BYTE } + TIDX(NOISE, MODE) = + { "mode", TYPE_BYTE }, + TIDX(NOISE, STRENGTH) = + { "strength", TYPE_BYTE } }; tag_info_t android_noise_info[ANDROID_NOISE_INFO_END - @@ -222,7 +285,8 @@ tag_info_t android_noise_info[ANDROID_NOISE_INFO_END - tag_info_t android_shading[ANDROID_SHADING_END - ANDROID_SHADING_START] = { - { "mode", TYPE_BYTE } + TIDX(SHADING, MODE) = + { "mode", TYPE_BYTE } }; tag_info_t android_shading_info[ANDROID_SHADING_INFO_END - @@ -230,7 +294,8 @@ tag_info_t android_shading_info[ANDROID_SHADING_INFO_END - tag_info_t android_geometric[ANDROID_GEOMETRIC_END - ANDROID_GEOMETRIC_START] = { - { "mode", TYPE_BYTE } + TIDX(GEOMETRIC, MODE) = + { "mode", TYPE_BYTE } }; tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END - @@ -238,31 +303,41 @@ tag_info_t android_geometric_info[ANDROID_GEOMETRIC_INFO_END - tag_info_t android_color[ANDROID_COLOR_END - ANDROID_COLOR_START] = { - { "mode", TYPE_BYTE }, - { "transform", TYPE_FLOAT } + TIDX(COLOR, MODE) = + { "mode", TYPE_BYTE }, + TIDX(COLOR, TRANSFORM) = + { "transform", TYPE_FLOAT } }; tag_info_t android_color_info[ANDROID_COLOR_INFO_END - ANDROID_COLOR_INFO_START] = { + TIIDX(COLOR, AVAILABLE_MODES) = { "availableModes", TYPE_INT32 } }; tag_info_t android_tonemap[ANDROID_TONEMAP_END - ANDROID_TONEMAP_START] = { - { "mode", TYPE_BYTE }, - { "curveRed", TYPE_FLOAT }, - { "curveGreen", TYPE_FLOAT }, - { "curveBlue", TYPE_FLOAT } + TIDX(TONEMAP, MODE) = + { "mode", TYPE_BYTE }, + TIDX(TONEMAP, CURVE_RED) = + { "curveRed", TYPE_FLOAT }, + TIDX(TONEMAP, CURVE_GREEN) = + { "curveGreen", TYPE_FLOAT }, + TIDX(TONEMAP, CURVE_BLUE) = + { "curveBlue", TYPE_FLOAT } }; tag_info_t android_tonemap_info[ANDROID_TONEMAP_INFO_END - ANDROID_TONEMAP_INFO_START] = { + TIIDX(TONEMAP, MAX_CURVE_POINTS) = { "maxCurvePoints", TYPE_INT32 } }; tag_info_t android_edge[ANDROID_EDGE_END - ANDROID_EDGE_START] = { + TIDX(EDGE, MODE) = { "mode", TYPE_BYTE }, + TIDX(EDGE, STRENGTH) = { "strength", TYPE_BYTE } }; @@ -271,60 +346,148 @@ tag_info_t android_edge_info[ANDROID_EDGE_INFO_END - tag_info_t android_scaler[ANDROID_SCALER_END - ANDROID_SCALER_START] = { - { "size", TYPE_INT32 }, - { "format", TYPE_BYTE }, - { "cropRegion", TYPE_INT32 }, - { "rotation", TYPE_INT32 }, + TIDX(SCALER, SIZE) = + { "size", TYPE_INT32 }, + TIDX(SCALER, FORMAT) = + { "format", TYPE_BYTE }, + TIDX(SCALER, CROP_REGION) = + { "cropRegion", TYPE_INT32 }, + TIDX(SCALER, ROTATION) = + { "rotation", TYPE_INT32 }, }; tag_info_t android_scaler_info[ANDROID_SCALER_INFO_END - ANDROID_SCALER_INFO_START] = { - { "availableFormats", TYPE_INT32 }, - { "availableSizesPerFormat", TYPE_INT32 }, - { "availableSizes", TYPE_INT32 }, - { "availableMinFrameDurations", TYPE_INT32 }, - { "availableMaxDigitalZoom", TYPE_INT32 } + TIIDX(SCALER, AVAILABLE_FORMATS) = + { "availableFormats", TYPE_INT32 }, + TIIDX(SCALER, AVAILABLE_SIZES_PER_FORMAT) = + { "availableSizesPerFormat", TYPE_INT32 }, + TIIDX(SCALER, AVAILABLE_SIZES) = + { "availableSizes", TYPE_INT32 }, + TIIDX(SCALER, AVAILABLE_MIN_FRAME_DURATIONS) = + { "availableMinFrameDurations", TYPE_INT64 }, + TIIDX(SCALER, AVAILABLE_MAX_ZOOM) = + { "availableMaxDigitalZoom", TYPE_INT32 } }; tag_info_t android_jpeg[ANDROID_JPEG_END - ANDROID_JPEG_START] = { + TIDX(JPEG, QUALITY) = { "quality", TYPE_INT32 }, + TIDX(JPEG, THUMBNAIL_SIZE) = { "thumbnailSize", TYPE_INT32 }, + TIDX(JPEG, THUMBNAIL_QUALITY) = { "thumbnailQuality", TYPE_INT32 }, + TIDX(JPEG, GPS_COORDINATES) = { "gpsCoordinates", TYPE_DOUBLE }, + TIDX(JPEG, GPS_PROCESSING_METHOD) = { "gpsProcessingMethod", TYPE_BYTE }, + TIDX(JPEG, GPS_TIMESTAMP) = { "gpsTimestamp", TYPE_INT64 }, + TIDX(JPEG, ORIENTATION) = { "orientation", TYPE_INT32 } }; tag_info_t android_jpeg_info[ANDROID_JPEG_INFO_END - ANDROID_JPEG_INFO_START] = { + TIIDX(JPEG, AVAILABLE_THUMBNAIL_SIZES) = { "availableThumbnailSizes", TYPE_INT32 } }; tag_info_t android_stats[ANDROID_STATS_END - ANDROID_STATS_START] = { - { "faceDetectMode", TYPE_BYTE }, - { "faceRectangles", TYPE_INT32 }, - { "faceScores", TYPE_BYTE }, - { "faceLandmarks", TYPE_INT32 }, - { "faceIds", TYPE_INT32 }, - { "histogramMode", TYPE_BYTE }, - { "histogram", TYPE_INT32 }, - { "sharpnessMapMode", TYPE_BYTE }, - { "sharpnessMap", TYPE_INT32 } + TIDX(STATS, FACE_DETECT_MODE) = + { "faceDetectMode", TYPE_BYTE }, + TIDX(STATS, FACE_RECTANGLES) = + { "faceRectangles", TYPE_INT32 }, + TIDX(STATS, FACE_SCORES) = + { "faceScores", TYPE_BYTE }, + TIDX(STATS, FACE_LANDMARKS) = + { "faceLandmarks", TYPE_INT32 }, + TIDX(STATS, FACE_IDS) = + { "faceIds", TYPE_INT32 }, + TIDX(STATS, HISTOGRAM_MODE) = + { "histogramMode", TYPE_BYTE }, + TIDX(STATS, HISTOGRAM) = + { "histogram", TYPE_INT32 }, + TIDX(STATS, SHARPNESS_MAP_MODE) = + { "sharpnessMapMode", TYPE_BYTE }, + TIDX(STATS, SHARPNESS_MAP) = + { "sharpnessMap", TYPE_INT32 } }; tag_info_t android_stats_info[ANDROID_STATS_INFO_END - ANDROID_STATS_INFO_START] = { - { "availableFaceDetectModes", TYPE_BYTE }, - { "maxFaceCount", TYPE_INT32 }, - { "histogramBucketCount", TYPE_INT32 }, - { "maxHistogramCount", TYPE_INT32 }, - { "sharpnessMapSize", TYPE_INT32 }, - { "maxSharpnessMapValue", TYPE_INT32 } + TIIDX(STATS, AVAILABLE_FACE_DETECT_MODES) = + { "availableFaceDetectModes", TYPE_BYTE }, + TIIDX(STATS, MAX_FACE_COUNT) = + { "maxFaceCount", TYPE_INT32 }, + TIIDX(STATS, HISTOGRAM_BUCKET_COUNT) = + { "histogramBucketCount", TYPE_INT32 }, + TIIDX(STATS, MAX_HISTOGRAM_COUNT) = + { "maxHistogramCount", TYPE_INT32 }, + TIIDX(STATS, SHARPNESS_MAP_SIZE) = + { "sharpnessMapSize", TYPE_INT32 }, + TIIDX(STATS, MAX_SHARPNESS_MAP_VALUE) = + { "maxSharpnessMapValue", TYPE_INT32 } }; + +tag_info_t android_control[ANDROID_CONTROL_END - + ANDROID_CONTROL_START] = { + TIDX(CONTROL, MODE) = + { "mode", TYPE_BYTE }, + TIDX(CONTROL, AE_MODE) = + { "aeMode", TYPE_BYTE }, + TIDX(CONTROL, AE_REGIONS) = + { "aeRegions", TYPE_INT32 }, + TIDX(CONTROL, AE_EXP_COMPENSATION) = + { "aeExposureCompensation", TYPE_INT32 }, + TIDX(CONTROL, AE_TARGET_FPS_RANGE) = + { "aeTargetFpsRange", TYPE_INT32 }, + TIDX(CONTROL, AE_ANTIBANDING_MODE) = + { "aeAntibandingMode", TYPE_BYTE }, + TIDX(CONTROL, AWB_MODE) = + { "awbMode", TYPE_BYTE }, + TIDX(CONTROL, AWB_REGIONS) = + { "awbRegions", TYPE_INT32 }, + TIDX(CONTROL, AF_MODE) = + { "afMode", TYPE_BYTE }, + TIDX(CONTROL, AF_REGIONS) = + { "afRegions", TYPE_INT32 }, + TIDX(CONTROL, AF_TRIGGER) = + { "afTrigger", TYPE_BYTE }, + TIDX(CONTROL, AF_STATE) = + { "afState", TYPE_BYTE }, + TIDX(CONTROL, VIDEO_STABILIZATION_MODE) = + { "videoStabilizationMode", TYPE_BYTE } +}; + +tag_info_t android_control_info[ANDROID_CONTROL_INFO_END - + ANDROID_CONTROL_INFO_START] = { + TIIDX(CONTROL, AVAILABLE_MODES) = + { "availableModes", TYPE_BYTE }, + TIIDX(CONTROL, MAX_REGIONS) = + { "maxRegions", TYPE_INT32 }, + TIIDX(CONTROL, AE_AVAILABLE_MODES) = + { "aeAvailableModes", TYPE_BYTE }, + TIIDX(CONTROL, AE_EXP_COMPENSATION_STEP) = + { "aeCompensationStep", TYPE_RATIONAL }, + TIIDX(CONTROL, AE_EXP_COMPENSATION_RANGE) = + { "aeCompensationRange", TYPE_INT32 }, + TIIDX(CONTROL, AE_AVAILABLE_TARGET_FPS_RANGES) = + { "aeAvailableTargetFpsRanges", TYPE_INT32 }, + TIIDX(CONTROL, AE_AVAILABLE_ANTIBANDING_MODES) = + { "aeAvailableAntibandingModes", TYPE_BYTE }, + TIIDX(CONTROL, AWB_AVAILABLE_MODES) = + { "awbAvailableModes", TYPE_BYTE }, + TIIDX(CONTROL, AF_AVAILABLE_MODES) = + { "afAvailableModes", TYPE_BYTE } +}; + +#undef TIDX +#undef TIIDX + tag_info_t *tag_info[ANDROID_SECTION_COUNT] = { android_request, android_lens, -- 2.11.0