码迷,mamicode.com
首页 > Web开发 > 详细

CameraMetaData

时间:2021-02-08 12:34:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:generate   hat   信息   char   session   methods   mil   摄像头   dde   

一、camera_metadata简介

  Camera API2/HAL3架构下使用了全新的CameraMetadata结构取代了之前的SetParameter/Paramters等操作,实现了Java到native到HAL3的参数传递。引入了管道的概念将安卓设备和摄像头之间联系起来,系统向摄像头发送 Capture 请求,而摄像头会返回 CameraMetadata,这一切建立在一个叫作 CameraCaptureSession 的会话中。和Camera_metadata数据结构相关的主要有以下几个文件:

system/media/camera/include/system/camera_metadata_tags.h(不允许直接引用该头文件,如需引用,可以引用camera_metadata.h)
system/media/camera/include/system/camera_metadata.h
system/media/camera/include/system/camera_vendor_tags.h(给各个芯片厂商扩展的tag)
system/media/camera/src/camera_metadata_tag_info.c(不允许直接调用该文件中的函数,如需调用,调用camera_metadata.c中包装函数)
system/media/camera/src/camera_metadata.c
framework/av/camera/CameraMetadata.cpp
framework/av/include/camera/CameraMetadata.h
frameworks/base/core/jni/android_hardware_camera2_CameraMetadata.cpp

二、Framework到HAL层的转换

  Camera2Client 使用 API1 传递参数采用的逻辑是还是在Java层预留了setParameters接口,只是当Parameter在设置时比起CameraClient而言,是将这个Parameter根据不同的TAG形式直接绑定到CameraMetadata mPreviewRequest/mRecordRequest/mCaptureRequest中,这些数据会由Capture_Request转为camera3_capture_request中的camera_metadata_t settings完成参数从Java到native到HAL3的传递。

  但是在Camera API2下,不再需要那么复杂的转换过程,在Java层中直接对参数进行设置并将其封装到Capture_Request即可,即参数控制由Java层来完成。这也体现了API2中Request和Result在APP中就大量存在的原因。对此为了和Framework Native层相关TAG数据的统一,在Java层中大量出现的参数设置是通过Section Tag的name来交由Native完成转换生成在Java层的TAG。

(1)Java层对应代码位置:frameworks/base/core/java/android/hardware/camera2/impl/CameraMetadataNative.java

 1     private <T> T getBase(Key<T> key) {
 2         int tag = nativeGetTagFromKeyLocal(key.getName());
 3         byte[] values = readValues(tag);
 4         if (values == null) {
 5             // If the key returns null, use the fallback key if exists.
 6             // This is to support old key names for the newly published keys.
 7             if (key.mFallbackName == null) {
 8                 return null;
 9             }
10             tag = nativeGetTagFromKeyLocal(key.mFallbackName);
11             values = readValues(tag);
12             if (values == null) {
13                 return null;
14             }
15         }
16 
17         int nativeType = nativeGetTypeFromTagLocal(tag);
18         Marshaler<T> marshaler = getMarshalerForKey(key, nativeType);
19         ByteBuffer buffer = ByteBuffer.wrap(values).order(ByteOrder.nativeOrder());
20         return marshaler.unmarshal(buffer);
21     }

(2)Native层对应代码位置:frameworks/base/core/jni/android_hardware_camera2_CameraMetadata.cpp

 1 static const JNINativeMethod gCameraMetadataMethods[] = {
 2 // static methods
 3   { "nativeGetTagFromKey",
 4     "(Ljava/lang/String;J)I",
 5     (void *)CameraMetadata_getTagFromKey },
 6   { "nativeGetTypeFromTag",
 7     "(IJ)I",
 8     (void *)CameraMetadata_getTypeFromTag },
 9   { "nativeSetupGlobalVendorTagDescriptor",
10     "()I",
11     (void*)CameraMetadata_setupGlobalVendorTagDescriptor },
12 // instance methods
13   { "nativeAllocate",
14     "()J",
15     (void*)CameraMetadata_allocate },
16   { "nativeAllocateCopy",
17     "(L" CAMERA_METADATA_CLASS_NAME ";)J",
18     (void *)CameraMetadata_allocateCopy },
19   { "nativeIsEmpty",
20     "()Z",
21     (void*)CameraMetadata_isEmpty },
22   { "nativeGetEntryCount",
23     "()I",
24     (void*)CameraMetadata_getEntryCount },
25   { "nativeClose",
26     "()V",
27     (void*)CameraMetadata_close },
28   { "nativeSwap",
29     "(L" CAMERA_METADATA_CLASS_NAME ";)V",
30     (void *)CameraMetadata_swap },
31   { "nativeGetTagFromKeyLocal",
32     "(Ljava/lang/String;)I",
33     (void *)CameraMetadata_getTagFromKeyLocal },
34   { "nativeGetTypeFromTagLocal",
35     "(I)I",
36     (void *)CameraMetadata_getTypeFromTagLocal },
37 ...
38 };

其中CameraMetadata_getTagFromKey是实现将一个Java层的string转为一个tag的值,如:android.control.mode。对比最初不同的Section name就可以发现前面两个x.y的字符串就是代表是Section name.而后面mode即是在该section下的tag数值,所以通过对这个string的分析可知,就可以定位对应的section以及tag值,这样返回到Java层的就是key相应的tag值了。继续追踪到 \system\media\camera\src\camera_metadata.c:

 1 // Declared in system/media/private/camera/include/camera_metadata_hidden.h
 2 const char *get_local_camera_metadata_tag_name_vendor_id(uint32_t tag,
 3         metadata_vendor_id_t id) {
 4     uint32_t tag_section = tag >> 16;
 5     if (tag_section >= VENDOR_SECTION && vendor_cache_ops != NULL &&
 6                 id != CAMERA_METADATA_INVALID_VENDOR_ID) {
 7             return vendor_cache_ops->get_tag_name(tag, id);
 8     } else  if (tag_section >= VENDOR_SECTION && vendor_tag_ops != NULL) {
 9         return vendor_tag_ops->get_tag_name(
10             vendor_tag_ops,
11             tag);
12     }
13     if (tag_section >= ANDROID_SECTION_COUNT ||
14         tag >= camera_metadata_section_bounds[tag_section][1] ) {  // 关键是camera_metadata_section_bounds这个数组,保存了各个tag的绑定信息
15         return NULL;
16     }
17     uint32_t tag_index = tag & 0xFFFF;
18     return tag_info[tag_section][tag_index].tag_name;
19 }

相关文件调用关系如下:

技术图片

其中 camera_metadata_tags.h 包含了所有的基本宏,每一个section的大小是64K(每个section_start 由section偏移16位,也就是2^16=65536,即64K)。tag也就是又section_start偏移而来,比如android.control.mode,由camera_metadata_section--->ANDROID_CONTROL找到对应的camera_metadata_section_start--->ANDROID_CONTROL_START,然后在camera_metadata_tag找到对应的ANDROID_CONTROL_MODE,也就是tag值。

  1 /**
  2  * !! Do not include this file directly !!
  3  *
  4  * Include camera_metadata.h instead.
  5  */
  6 
  7 /**
  8  * ! Do not edit this file directly !
  9  *
 10  * Generated automatically from camera_metadata_tags.mako
 11  */
 12 
 13 /** TODO: Nearly every enum in this file needs a description */
 14 
 15 /**
 16  * Top level hierarchy definitions for camera metadata. *_INFO sections are for
 17  * the static metadata that can be retrived without opening the camera device.
 18  * New sections must be added right before ANDROID_SECTION_COUNT to maintain
 19  * existing enumerations.
 20  */
 21 typedef enum camera_metadata_section {
 22     ANDROID_COLOR_CORRECTION,
 23     ANDROID_CONTROL,
 24     ANDROID_DEMOSAIC,
 25     ANDROID_EDGE,
 26     ANDROID_FLASH,
 27     ANDROID_FLASH_INFO,
 28     ANDROID_HOT_PIXEL,
 29     ANDROID_JPEG,
 30     ANDROID_LENS,
 31     ANDROID_LENS_INFO,
 32     ANDROID_NOISE_REDUCTION,
 33     ANDROID_QUIRKS,
 34     ANDROID_REQUEST,
 35     ANDROID_SCALER,
 36     ANDROID_SENSOR,
 37     ANDROID_SENSOR_INFO,
 38     ANDROID_SHADING,
 39     ANDROID_STATISTICS,
 40     ANDROID_STATISTICS_INFO,
 41     ANDROID_TONEMAP,
 42     ANDROID_LED,
 43     ANDROID_INFO,
 44     ANDROID_BLACK_LEVEL,
 45     ANDROID_SYNC,
 46     ANDROID_REPROCESS,
 47     ANDROID_DEPTH,
 48     ANDROID_LOGICAL_MULTI_CAMERA,
 49     ANDROID_DISTORTION_CORRECTION,
 50     ANDROID_HEIC,
 51     ANDROID_HEIC_INFO,
 52     ANDROID_H264,
 53     ANDROID_H265,
 54     ANDROID_SECTION_COUNT,
 55 
 56     VENDOR_SECTION = 0x8000
 57 } camera_metadata_section_t;
 58 
 59 /**
 60  * Hierarchy positions in enum space. All vendor extension tags must be
 61  * defined with tag >= VENDOR_SECTION_START
 62  */
 63 typedef enum camera_metadata_section_start {
 64     ANDROID_COLOR_CORRECTION_START = ANDROID_COLOR_CORRECTION  << 16,
 65     ANDROID_CONTROL_START          = ANDROID_CONTROL           << 16,
 66     ANDROID_DEMOSAIC_START         = ANDROID_DEMOSAIC          << 16,
 67     ANDROID_EDGE_START             = ANDROID_EDGE              << 16,
 68     ANDROID_FLASH_START            = ANDROID_FLASH             << 16,
 69     ANDROID_FLASH_INFO_START       = ANDROID_FLASH_INFO        << 16,
 70     ANDROID_HOT_PIXEL_START        = ANDROID_HOT_PIXEL         << 16,
 71     ANDROID_JPEG_START             = ANDROID_JPEG              << 16,
 72     ANDROID_LENS_START             = ANDROID_LENS              << 16,
 73     ANDROID_LENS_INFO_START        = ANDROID_LENS_INFO         << 16,
 74     ANDROID_NOISE_REDUCTION_START  = ANDROID_NOISE_REDUCTION   << 16,
 75     ANDROID_QUIRKS_START           = ANDROID_QUIRKS            << 16,
 76     ANDROID_REQUEST_START          = ANDROID_REQUEST           << 16,
 77     ANDROID_SCALER_START           = ANDROID_SCALER            << 16,
 78     ANDROID_SENSOR_START           = ANDROID_SENSOR            << 16,
 79     ANDROID_SENSOR_INFO_START      = ANDROID_SENSOR_INFO       << 16,
 80     ANDROID_SHADING_START          = ANDROID_SHADING           << 16,
 81     ANDROID_STATISTICS_START       = ANDROID_STATISTICS        << 16,
 82     ANDROID_STATISTICS_INFO_START  = ANDROID_STATISTICS_INFO   << 16,
 83     ANDROID_TONEMAP_START          = ANDROID_TONEMAP           << 16,
 84     ANDROID_LED_START              = ANDROID_LED               << 16,
 85     ANDROID_INFO_START             = ANDROID_INFO              << 16,
 86     ANDROID_BLACK_LEVEL_START      = ANDROID_BLACK_LEVEL       << 16,
 87     ANDROID_SYNC_START             = ANDROID_SYNC              << 16,
 88     ANDROID_REPROCESS_START        = ANDROID_REPROCESS         << 16,
 89     ANDROID_DEPTH_START            = ANDROID_DEPTH             << 16,
 90     ANDROID_LOGICAL_MULTI_CAMERA_START
 91                                    = ANDROID_LOGICAL_MULTI_CAMERA
 92                                                                 << 16,
 93     ANDROID_DISTORTION_CORRECTION_START
 94                                    = ANDROID_DISTORTION_CORRECTION
 95                                                                 << 16,
 96     ANDROID_HEIC_START             = ANDROID_HEIC              << 16,
 97     ANDROID_HEIC_INFO_START        = ANDROID_HEIC_INFO         << 16,
 98     ANDROID_H264_START             = ANDROID_H264              << 16,
 99     ANDROID_H265_START             = ANDROID_H265              << 16,
100     VENDOR_SECTION_START           = VENDOR_SECTION            << 16
101 } camera_metadata_section_start_t;

 

 

 1 /**
 2  * Main enum for defining camera metadata tags.  New entries must always go
 3  * before the section _END tag to preserve existing enumeration values.  In
 4  * addition, the name and type of the tag needs to be added to
 5  * system/media/camera/src/camera_metadata_tag_info.c
 6  */
 7 typedef enum camera_metadata_tag {
 8     ANDROID_COLOR_CORRECTION_MODE =                   // enum         | public       | HIDL v3.2
 9             ANDROID_COLOR_CORRECTION_START,
10     ANDROID_COLOR_CORRECTION_TRANSFORM,               // rational[]   | public       | HIDL v3.2
11     ANDROID_COLOR_CORRECTION_GAINS,                   // float[]      | public       | HIDL v3.2
12     ANDROID_COLOR_CORRECTION_ABERRATION_MODE,         // enum         | public       | HIDL v3.2
13     ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
14                                                       // byte[]       | public       | HIDL v3.2
15     ANDROID_COLOR_CORRECTION_END,
16 
17     ANDROID_CONTROL_AE_ANTIBANDING_MODE =             // enum         | public       | HIDL v3.2
18             ANDROID_CONTROL_START,
19     ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,         // int32        | public       | HIDL v3.2
20     ANDROID_CONTROL_AE_LOCK,                          // enum         | public       | HIDL v3.2
21     ANDROID_CONTROL_AE_MODE,                          // enum         | public       | HIDL v3.2
22     ANDROID_CONTROL_AE_REGIONS,                       // int32[]      | public       | HIDL v3.2
23     ANDROID_CONTROL_AE_TARGET_FPS_RANGE,              // int32[]      | public       | HIDL v3.2
24     ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER,            // enum         | public       | HIDL v3.2
25     ANDROID_CONTROL_AF_MODE,                          // enum         | public       | HIDL v3.2
26     ANDROID_CONTROL_AF_REGIONS,                       // int32[]      | public       | HIDL v3.2
27     ANDROID_CONTROL_AF_TRIGGER,                       // enum         | public       | HIDL v3.2
28     ANDROID_CONTROL_AWB_LOCK,                         // enum         | public       | HIDL v3.2
29     ANDROID_CONTROL_AWB_MODE,                         // enum         | public       | HIDL v3.2
30     ANDROID_CONTROL_AWB_REGIONS,                      // int32[]      | public       | HIDL v3.2
31     ANDROID_CONTROL_CAPTURE_INTENT,                   // enum         | public       | HIDL v3.2
32     ANDROID_CONTROL_EFFECT_MODE,                      // enum         | public       | HIDL v3.2
33     ANDROID_CONTROL_MODE,                             // enum         | public       | HIDL v3.2
34     ANDROID_CONTROL_SCENE_MODE,                       // enum         | public       | HIDL v3.2
35     ANDROID_CONTROL_VIDEO_STABILIZATION_MODE,         // enum         | public       | HIDL v3.2
36     ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,   // byte[]       | public       | HIDL v3.2
37     ANDROID_CONTROL_AE_AVAILABLE_MODES,               // byte[]       | public       | HIDL v3.2
38     ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES,   // int32[]      | public       | HIDL v3.2
39     ANDROID_CONTROL_AE_COMPENSATION_RANGE,            // int32[]      | public       | HIDL v3.2
40     ANDROID_CONTROL_AE_COMPENSATION_STEP,             // rational     | public       | HIDL v3.2
41     ANDROID_CONTROL_AF_AVAILABLE_MODES,               // byte[]       | public       | HIDL v3.2
42     ANDROID_CONTROL_AVAILABLE_EFFECTS,                // byte[]       | public       | HIDL v3.2
43     ANDROID_CONTROL_AVAILABLE_SCENE_MODES,            // byte[]       | public       | HIDL v3.2
44     ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
45                                                       // byte[]       | public       | HIDL v3.2
46     ANDROID_CONTROL_AWB_AVAILABLE_MODES,              // byte[]       | public       | HIDL v3.2
47     ANDROID_CONTROL_MAX_REGIONS,                      // int32[]      | ndk_public   | HIDL v3.2
48     ANDROID_CONTROL_SCENE_MODE_OVERRIDES,             // byte[]       | system       | HIDL v3.2
49     ANDROID_CONTROL_AE_PRECAPTURE_ID,                 // int32        | system       | HIDL v3.2
50     ANDROID_CONTROL_AE_STATE,                         // enum         | public       | HIDL v3.2
51     ANDROID_CONTROL_AF_STATE,                         // enum         | public       | HIDL v3.2
52     ANDROID_CONTROL_AF_TRIGGER_ID,                    // int32        | system       | HIDL v3.2
53     ANDROID_CONTROL_AWB_STATE,                        // enum         | public       | HIDL v3.2
54     ANDROID_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS,
55                                                       // int32[]      | hidden       | HIDL v3.2
56     ANDROID_CONTROL_AE_LOCK_AVAILABLE,                // enum         | public       | HIDL v3.2
57     ANDROID_CONTROL_AWB_LOCK_AVAILABLE,               // enum         | public       | HIDL v3.2
58     ANDROID_CONTROL_AVAILABLE_MODES,                  // byte[]       | public       | HIDL v3.2
59     ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE, // int32[]      | public       | HIDL v3.2
60     ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,       // int32        | public       | HIDL v3.2
61     ANDROID_CONTROL_ENABLE_ZSL,                       // enum         | public       | HIDL v3.2
62     ANDROID_CONTROL_AF_SCENE_CHANGE,                  // enum         | public       | HIDL v3.3
63     ANDROID_CONTROL_END,
64   
65   ......

对应关系如图所示:

技术图片

 

 然后在 camera_metadata_tag_info.c 中进行了映射和绑定,前面Native层CameraMetadata_getTagFromKey--->getTagFromName--->camera_metadata_section_bounds调用的camera_metadata_section_bounds实现在这里:

 1 /**
 2  * ! Do not edit this file directly !
 3  *
 4  * Generated automatically from camera_metadata_tag_info.mako
 5  */
 6 
 7 const char *camera_metadata_section_names[ANDROID_SECTION_COUNT] = {
 8     [ANDROID_COLOR_CORRECTION]     = "android.colorCorrection",
 9     [ANDROID_CONTROL]              = "android.control",
10     [ANDROID_DEMOSAIC]             = "android.demosaic",
11     [ANDROID_EDGE]                 = "android.edge",
12     [ANDROID_FLASH]                = "android.flash",
13     [ANDROID_FLASH_INFO]           = "android.flash.info",
14     [ANDROID_HOT_PIXEL]            = "android.hotPixel",
15     [ANDROID_JPEG]                 = "android.jpeg",
16     [ANDROID_LENS]                 = "android.lens",
17     [ANDROID_LENS_INFO]            = "android.lens.info",
18     [ANDROID_NOISE_REDUCTION]      = "android.noiseReduction",
19     [ANDROID_QUIRKS]               = "android.quirks",
20     [ANDROID_REQUEST]              = "android.request",
21     [ANDROID_SCALER]               = "android.scaler",
22     [ANDROID_SENSOR]               = "android.sensor",
23     [ANDROID_SENSOR_INFO]          = "android.sensor.info",
24     [ANDROID_SHADING]              = "android.shading",
25     [ANDROID_STATISTICS]           = "android.statistics",
26     [ANDROID_STATISTICS_INFO]      = "android.statistics.info",
27     [ANDROID_TONEMAP]              = "android.tonemap",
28     [ANDROID_LED]                  = "android.led",
29     [ANDROID_INFO]                 = "android.info",
30     [ANDROID_BLACK_LEVEL]          = "android.blackLevel",
31     [ANDROID_SYNC]                 = "android.sync",
32     [ANDROID_REPROCESS]            = "android.reprocess",
33     [ANDROID_DEPTH]                = "android.depth",
34     [ANDROID_LOGICAL_MULTI_CAMERA] = "android.logicalMultiCamera",
35     [ANDROID_DISTORTION_CORRECTION]
36                                     = "android.distortionCorrection",
37 };
38 
39 unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2] = {
40     [ANDROID_COLOR_CORRECTION]     = { ANDROID_COLOR_CORRECTION_START,
41                                        ANDROID_COLOR_CORRECTION_END },
42     [ANDROID_CONTROL]              = { ANDROID_CONTROL_START,
43                                        ANDROID_CONTROL_END },
44     [ANDROID_DEMOSAIC]             = { ANDROID_DEMOSAIC_START,
45                                        ANDROID_DEMOSAIC_END },
46     [ANDROID_EDGE]                 = { ANDROID_EDGE_START,
47                                        ANDROID_EDGE_END },
48     [ANDROID_FLASH]                = { ANDROID_FLASH_START,
49                                        ANDROID_FLASH_END },
50     [ANDROID_FLASH_INFO]           = { ANDROID_FLASH_INFO_START,
51                                        ANDROID_FLASH_INFO_END },
52     [ANDROID_HOT_PIXEL]            = { ANDROID_HOT_PIXEL_START,
53                                        ANDROID_HOT_PIXEL_END },
54     [ANDROID_JPEG]                 = { ANDROID_JPEG_START,
55                                        ANDROID_JPEG_END },
56     [ANDROID_LENS]                 = { ANDROID_LENS_START,
57                                        ANDROID_LENS_END },
58     [ANDROID_LENS_INFO]            = { ANDROID_LENS_INFO_START,
59                                        ANDROID_LENS_INFO_END },
60     [ANDROID_NOISE_REDUCTION]      = { ANDROID_NOISE_REDUCTION_START,
61                                        ANDROID_NOISE_REDUCTION_END },
62     [ANDROID_QUIRKS]               = { ANDROID_QUIRKS_START,
63                                        ANDROID_QUIRKS_END },
64     [ANDROID_REQUEST]              = { ANDROID_REQUEST_START,
65                                        ANDROID_REQUEST_END },
66     [ANDROID_SCALER]               = { ANDROID_SCALER_START,
67                                        ANDROID_SCALER_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_SHADING]              = { ANDROID_SHADING_START,
73                                        ANDROID_SHADING_END },
74     [ANDROID_STATISTICS]           = { ANDROID_STATISTICS_START,
75                                        ANDROID_STATISTICS_END },
76     [ANDROID_STATISTICS_INFO]      = { ANDROID_STATISTICS_INFO_START,
77                                        ANDROID_STATISTICS_INFO_END },
78     [ANDROID_TONEMAP]              = { ANDROID_TONEMAP_START,
79                                        ANDROID_TONEMAP_END },
80     [ANDROID_LED]                  = { ANDROID_LED_START,
81                                        ANDROID_LED_END },
82     [ANDROID_INFO]                 = { ANDROID_INFO_START,
83                                        ANDROID_INFO_END },
84     [ANDROID_BLACK_LEVEL]          = { ANDROID_BLACK_LEVEL_START,
85                                        ANDROID_BLACK_LEVEL_END },
86     [ANDROID_SYNC]                 = { ANDROID_SYNC_START,
87                                        ANDROID_SYNC_END },
88     [ANDROID_REPROCESS]            = { ANDROID_REPROCESS_START,
89                                        ANDROID_REPROCESS_END },
90     [ANDROID_DEPTH]                = { ANDROID_DEPTH_START,
91                                        ANDROID_DEPTH_END },
92     [ANDROID_LOGICAL_MULTI_CAMERA] = { ANDROID_LOGICAL_MULTI_CAMERA_START,
93                                        ANDROID_LOGICAL_MULTI_CAMERA_END },
94     [ANDROID_DISTORTION_CORRECTION]
95                                     = { ANDROID_DISTORTION_CORRECTION_START,
96                                        ANDROID_DISTORTION_CORRECTION_END },
97 };

由 tag_info 结构体统一管理:

 1 static tag_info_t android_color_correction[ANDROID_COLOR_CORRECTION_END -
 2         ANDROID_COLOR_CORRECTION_START] = {
 3     [ ANDROID_COLOR_CORRECTION_MODE - ANDROID_COLOR_CORRECTION_START ] =
 4     { "mode",                          TYPE_BYTE   },
 5     [ ANDROID_COLOR_CORRECTION_TRANSFORM - ANDROID_COLOR_CORRECTION_START ] =
 6     { "transform",                     TYPE_RATIONAL
 7                 },
 8     [ ANDROID_COLOR_CORRECTION_GAINS - ANDROID_COLOR_CORRECTION_START ] =
 9     { "gains",                         TYPE_FLOAT  },
10     [ ANDROID_COLOR_CORRECTION_ABERRATION_MODE - ANDROID_COLOR_CORRECTION_START ] =
11     { "aberrationMode",                TYPE_BYTE   },
12     [ ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES - ANDROID_COLOR_CORRECTION_START ] =
13     { "availableAberrationModes",      TYPE_BYTE   },
14 };
15 
16 -------------------------------------------------------------
17 
18 tag_info_t *tag_info[ANDROID_SECTION_COUNT] = {
19     android_color_correction,
20     android_control,
21     android_demosaic,
22     android_edge,
23     android_flash,
24     android_flash_info,
25     android_hot_pixel,
26     android_jpeg,
27     android_lens,
28     android_lens_info,
29     android_noise_reduction,
30     android_quirks,
31     android_request,
32     android_scaler,
33     android_sensor,
34     android_sensor_info,
35     android_shading,
36     android_statistics,
37     android_statistics_info,
38     android_tonemap,
39     android_led,
40     android_info,
41     android_black_level,
42     android_sync,
43     android_reprocess,
44     android_depth,
45     android_logical_multi_camera,
46     android_distortion_correction,
47 };

下图是Camera Metadata对不同section以及相应section下不同tag的布局图,以最常见的android.control Section为例进行描述:

技术图片

 

CameraMetaData

标签:generate   hat   信息   char   session   methods   mil   摄像头   dde   

原文地址:https://www.cnblogs.com/SaraMoring/p/14385967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!