1 /* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 *     * Redistributions of source code must retain the above copyright
7 *       notice, this list of conditions and the following disclaimer.
8 *     * Redistributions in binary form must reproduce the above
9 *       copyright notice, this list of conditions and the following
10 *       disclaimer in the documentation and/or other materials provided
11 *       with the distribution.
12 *     * Neither the name of The Linux Foundation nor the names of its
13 *       contributors may be used to endorse or promote products derived
14 *       from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29 
30 #ifndef __QCAMERA3VENDORTAGS_H__
31 #define __QCAMERA3VENDORTAGS_H__
32 
33 // Camera dependencies
34 #include "system/camera_metadata.h"
35 #include "system/camera_vendor_tags.h"
36 
37 namespace qcamera {
38 
39 #define TANGO_SECTION_OFFSET  0x4000
40 
41 enum qcamera3_ext_section {
42     QCAMERA3_PRIVATEDATA = VENDOR_SECTION,
43     QCAMERA3_CDS,
44     QCAMERA3_OPAQUE_RAW,
45     QCAMERA3_CROP,
46     QCAMERA3_TUNING_META_DATA,
47     QCAMERA3_TEMPORAL_DENOISE,
48     QCAMERA3_ISO_EXP_PRIORITY,
49     QCAMERA3_SATURATION,
50     QCAMERA3_EXPOSURE_METERING_MODE,
51     QCAMERA3_AV_TIMER,
52     QCAMERA3_SENSOR_META_DATA,
53     QCAMERA3_DUALCAM_LINK_META_DATA,
54     QCAMERA3_DUALCAM_CALIB_META_DATA,
55     QCAMERA3_HAL_PRIVATEDATA,
56     QCAMERA3_JPEG_ENCODE_CROP,
57     QCAMERA3_VIDEO_HDR,
58     QCAMERA3_IR,
59     QCAMERA3_AEC_CONVERGENCE,
60     QCAMERA3_AWB_CONVERGENCE,
61     QCAMERA3_INSTANT_AEC,
62     NEXUS_EXPERIMENTAL_2016,
63     QCAMERA3_SHARPNESS_DATA,
64     QCAMERA3_HISTOGRAM,
65     QCAMERA3_BINNING_CORRECTION,
66     QCAMERA3_STATS,
67     NEXUS_EXPERIMENTAL_2017,
68     QCAMERA3_SECTIONS_END,
69 
70     //This value is hardcoded in NDK clients and hence enum value is
71     //assigned to ensure this value does not go off sync
72     TANGO_SECTIONS_START = VENDOR_SECTION + TANGO_SECTION_OFFSET,
73     TANGO_MODE_DATA = TANGO_SECTIONS_START,
74     TANGO_SECTIONS_END
75 };
76 
77 enum qcamera3_ext_section_ranges {
78     QCAMERA3_PRIVATEDATA_START = QCAMERA3_PRIVATEDATA << 16,
79     QCAMERA3_CDS_START = QCAMERA3_CDS << 16,
80     QCAMERA3_OPAQUE_RAW_START = QCAMERA3_OPAQUE_RAW << 16,
81     QCAMERA3_CROP_START = QCAMERA3_CROP << 16,
82     QCAMERA3_TUNING_META_DATA_START = QCAMERA3_TUNING_META_DATA << 16,
83     QCAMERA3_TEMPORAL_DENOISE_START = QCAMERA3_TEMPORAL_DENOISE << 16,
84     QCAMERA3_ISO_EXP_PRIORITY_START = QCAMERA3_ISO_EXP_PRIORITY << 16,
85     QCAMERA3_SATURATION_START = QCAMERA3_SATURATION << 16,
86     QCAMERA3_EXPOSURE_METER_START = QCAMERA3_EXPOSURE_METERING_MODE << 16,
87     QCAMERA3_AV_TIMER_START = QCAMERA3_AV_TIMER << 16,
88     QCAMERA3_SENSOR_META_DATA_START = QCAMERA3_SENSOR_META_DATA << 16,
89     QCAMERA3_DUALCAM_LINK_META_DATA_START = QCAMERA3_DUALCAM_LINK_META_DATA << 16,
90     QCAMERA3_DUALCAM_CALIB_META_DATA_START = QCAMERA3_DUALCAM_CALIB_META_DATA << 16,
91     QCAMERA3_HAL_PRIVATEDATA_START = QCAMERA3_HAL_PRIVATEDATA << 16,
92     QCAMERA3_JPEG_ENCODE_CROP_START = QCAMERA3_JPEG_ENCODE_CROP << 16,
93     QCAMERA3_VIDEO_HDR_START = QCAMERA3_VIDEO_HDR << 16,
94     QCAMERA3_IR_START = QCAMERA3_IR << 16,
95     QCAMERA3_AEC_CONVERGENCE_SPEED_START = QCAMERA3_AEC_CONVERGENCE << 16,
96     QCAMERA3_AWB_CONVERGENCE_SPEED_START = QCAMERA3_AWB_CONVERGENCE << 16,
97     QCAMERA3_INSTANT_AEC_START = QCAMERA3_INSTANT_AEC << 16,
98     NEXUS_EXPERIMENTAL_2016_START = NEXUS_EXPERIMENTAL_2016 <<16,
99     QCAMERA3_SHARPNESS_START = QCAMERA3_SHARPNESS_DATA << 16,
100     QCAMERA3_HISTOGRAM_START = QCAMERA3_HISTOGRAM << 16,
101     QCAMERA3_BINNING_CORRECTION_START = QCAMERA3_BINNING_CORRECTION << 16,
102     QCAMERA3_STATS_START = QCAMERA3_STATS << 16,
103     NEXUS_EXPERIMENTAL_2017_START = NEXUS_EXPERIMENTAL_2017 << 16,
104     TANGO_MODE_DATA_START = TANGO_MODE_DATA << 16,
105 };
106 
107 enum qcamera3_ext_tags {
108     QCAMERA3_PRIVATEDATA_REPROCESS = QCAMERA3_PRIVATEDATA_START,
109     QCAMERA3_PRIVATEDATA_END,
110     QCAMERA3_CDS_MODE = QCAMERA3_CDS_START,
111     QCAMERA3_CDS_INFO,
112     QCAMERA3_CDS_END,
113 
114     //Property Name:  org.codeaurora.qcamera3.opaque_raw.opaque_raw_strides
115     //
116     //Type: int32 * n * 3 [public]
117     //
118     //Description: Distance in bytes from the beginning of one row of opaque
119     //raw image data to the beginning of next row.
120     //
121     //Details: The strides are listed as (raw_width, raw_height, stride)
122     //triplets. For each supported raw size, there will be a stride associated
123     //with it.
124     QCAMERA3_OPAQUE_RAW_STRIDES = QCAMERA3_OPAQUE_RAW_START,
125 
126     //Property Name: org.codeaurora.qcamera3.opaque_raw.opaque_raw_format
127     //
128     //Type: byte(enum) [public]
129     //  * LEGACY - The legacy raw format where 8, 10, or 12-bit
130     //    raw data is packed into a 64-bit word.
131     //  * MIPI - raw format matching the data packing described
132     //    in MIPI CSI-2 specification. In memory, the data
133     //    is constructed by packing sequentially received pixels
134     //    into least significant parts of the words first.
135     //    Within each pixel, the least significant bits are also
136     //    placed towards the least significant part of the word.
137     //
138     //Details: Lay out of opaque raw data in memory is decided by two factors:
139     //         opaque_raw_format and bit depth (implied by whiteLevel). Below
140     //         list illustrates their relationship:
141     //  LEGACY8:  P7(7:0) P6(7:0) P5(7:0) P4(7:0) P3(7:0) P2(7:0) P1(7:0) P0(7:0)
142     //            8 pixels occupy 8 bytes, no padding needed
143     //            min_stride = CEILING8(raw_width)
144     // LEGACY10:  0000 P5(9:0) P4(9:0) P3(9:0) P2(9:0) P1(9:0) P0(9:0)
145     //            6 pixels occupy 8 bytes, 4 bits padding at MSB
146     //            min_stride = (raw_width+5)/6 * 8
147     // LEGACY12:  0000 P4(11:0) P3(11:0) P2(11:0) P1(11:0) P0(11:0)
148     //            5 pixels occupy 8 bytes, 4 bits padding at MSB
149     //            min_stride = (raw_width+4)/5 * 8
150     //    MIPI8:  P0(7:0)
151     //            1 pixel occupy 1 byte
152     //            min_stride = raw_width
153     //   MIPI10:  P3(1:0) P2(1:0) P1(1:0) P0(1:0) P3(9:2) P2(9:2) P1(9:2) P0(9:2)
154     //            4 pixels occupy 5 bytes
155     //            min_stride = (raw_width+3)/4 * 5
156     //   MIPI12:  P1(3:0) P0(3:0) P1(11:4) P0(11:4)
157     //            2 pixels occupy 3 bytes
158     //            min_stride = (raw_width+1)/2 * 3
159     //Note that opaque_raw_stride needs to be at least the required minimum
160     //stride from the table above. ISP hardware may need more generous stride
161     //setting. For example, for LEGACY8, the actual stride may be
162     //CEILING16(raw_width) due to bus burst length requirement.
163     QCAMERA3_OPAQUE_RAW_FORMAT,
164     QCAMERA3_OPAQUE_RAW_END,
165 
166     QCAMERA3_CROP_COUNT_REPROCESS = QCAMERA3_CROP_START,
167     QCAMERA3_CROP_REPROCESS,
168     QCAMERA3_CROP_ROI_MAP_REPROCESS,
169     QCAMERA3_CROP_END,
170 
171     QCAMERA3_TUNING_META_DATA_BLOB = QCAMERA3_TUNING_META_DATA_START,
172     QCAMERA3_TUNING_META_DATA_END,
173 
174     QCAMERA3_TEMPORAL_DENOISE_ENABLE = QCAMERA3_TEMPORAL_DENOISE_START,
175     QCAMERA3_TEMPORAL_DENOISE_PROCESS_TYPE,
176     QCAMERA3_TEMPORAL_DENOISE_END,
177 
178     QCAMERA3_USE_ISO_EXP_PRIORITY = QCAMERA3_ISO_EXP_PRIORITY_START,
179     QCAMERA3_SELECT_PRIORITY,
180     /* Property Name:  org.codeaurora.qcamera3.iso_exp_priority.iso_available_modes
181        Type: int32[8]
182        Description: Available iso mode values
183        iso_available_modes[0] = 0 (auto)
184        iso_available_modes[1] = 1 (deblur)
185        iso_available_modes[2] = 2 (100)
186        iso_available_modes[3] = 3 (200)
187        iso_available_modes[4] = 4 (400)
188        iso_available_modes[5] = 5 (800)
189        iso_available_modes[6] = 6 (1600)
190        iso_available_modes[7] = 7 (3200)
191     */
192     QCAMERA3_ISO_AVAILABLE_MODES,
193     /* Property Name:  org.codeaurora.qcamera3.iso_exp_priority.exposure_time_range
194        Type: int64[2]
195        Description: Min/max exposure time values (ns)
196        exposure_time_range[0] = min
197        exposure_time_range[1] = max
198     */
199     QCAMERA3_EXP_TIME_RANGE,
200     QCAMERA3_ISO_EXP_PRIORITY_END,
201 
202     QCAMERA3_USE_SATURATION = QCAMERA3_SATURATION_START,
203     /* Property Name:  org.codeaurora.qcamera3.saturation.range
204        Type: int32[4]
205        Description: Range of possible saturation values
206        range[0] = min
207        range[1] = max
208        range[2] = default
209        range[3] = step
210     */
211     QCAMERA3_SATURATION_RANGE,
212     QCAMERA3_SATURATION_END,
213 
214     QCAMERA3_EXPOSURE_METER = QCAMERA3_EXPOSURE_METER_START,
215     /* Property Name:  org.codeaurora.qcamera3.exposure_metering.available_modes
216        Type: int32[7]
217        Description: Available exposure metering mode values
218        available_modes[0] = 0 (FRAME_AVERAGE)
219        available_modes[1] = 1 (CENTER_WEIGHTED)
220        available_modes[2] = 2 (SPOT_METERING)
221        available_modes[3] = 3 (SMART_METERING)
222        available_modes[4] = 4 (USER_METERING)
223        available_modes[5] = 5 (SPOT_METERING_ADV)
224        available_modes[6] = 6 (CENTER_WEIGHTED_ADV)
225     */
226     QCAMERA3_EXPOSURE_METER_AVAILABLE_MODES,
227     QCAMERA3_EXPOSURE_METER_END,
228 
229     QCAMERA3_USE_AV_TIMER = QCAMERA3_AV_TIMER_START,
230     QCAMERA3_AV_TIMER_END,
231 
232     QCAMERA3_SENSOR_DYNAMIC_BLACK_LEVEL_PATTERN = QCAMERA3_SENSOR_META_DATA_START,
233     QCAMERA3_SENSOR_IS_MONO_ONLY,
234     QCAMERA3_SENSOR_META_DATA_END,
235 
236     QCAMERA3_DUALCAM_LINK_ENABLE = QCAMERA3_DUALCAM_LINK_META_DATA_START,
237     QCAMERA3_DUALCAM_LINK_IS_MAIN,
238     QCAMERA3_DUALCAM_LINK_RELATED_CAMERA_ID,
239     QCAMERA3_DUALCAM_LINK_META_DATA_END,
240 
241     QCAMERA3_DUALCAM_CALIB_META_DATA_BLOB = QCAMERA3_DUALCAM_CALIB_META_DATA_START,
242     QCAMERA3_DUALCAM_CALIB_META_DATA_END,
243 
244     QCAMERA3_HAL_PRIVATEDATA_REPROCESS_FLAGS = QCAMERA3_HAL_PRIVATEDATA_START,
245     QCAMERA3_HAL_PRIVATEDATA_REPROCESS_DATA_BLOB,
246     QCAMERA3_HAL_PRIVATEDATA_EXIF_DEBUG_DATA_BLOB,
247 
248     QCAMERA3_HAL_PRIVATEDATA_END,
249 
250     /* Property Name:  org.codeaurora.qcamera3.jpeg_encode_crop.enable
251        Type: byte
252        Description: If JPEG crop is enable
253     */
254     QCAMERA3_JPEG_ENCODE_CROP_ENABLE = QCAMERA3_JPEG_ENCODE_CROP_START,
255     /* Property Name:  org.codeaurora.qcamera3.jpeg_encode_crop.rect
256        Type: int32[4]
257        Description: Crop image into size width x height
258                     from [left, top] coordinate
259        rect[0] = left
260        rect[1] = top
261        rect[2] = width
262        rect[3] = height
263     */
264     QCAMERA3_JPEG_ENCODE_CROP_RECT,
265     /* Property Name:  org.codeaurora.qcamera3.jpeg_encode_crop.roi
266        Type: int32[4]
267        Description: Scale the crop image into size width x height
268                     from [left, top] coordinate.
269        roi[0] = left
270        roi[1] = top
271        roi[2] = width
272        roi[3] = height
273     */
274     QCAMERA3_JPEG_ENCODE_CROP_ROI,
275     QCAMERA3_JPEG_ENCODE_CROP_END,
276 
277     QCAMERA3_VIDEO_HDR_MODE = QCAMERA3_VIDEO_HDR_START,
278     QCAMERA3_AVAILABLE_VIDEO_HDR_MODES,
279     QCAMERA3_VIDEO_HDR_END,
280 
281     QCAMERA3_IR_MODE = QCAMERA3_IR_START,
282     QCAMERA3_IR_AVAILABLE_MODES,
283     QCAMERA3_IR_END,
284 
285     QCAMERA3_AEC_CONVERGENCE_SPEED = QCAMERA3_AEC_CONVERGENCE_SPEED_START,
286     QCAMERA3_AEC_CONVERGENCE_SPEED_END,
287 
288     QCAMERA3_AWB_CONVERGENCE_SPEED = QCAMERA3_AWB_CONVERGENCE_SPEED_START,
289     QCAMERA3_AWB_CONVERGENCE_SPEED_END,
290 
291     QCAMERA3_INSTANT_AEC_MODE = QCAMERA3_INSTANT_AEC_START,
292     QCAMERA3_INSTANT_AEC_AVAILABLE_MODES,
293     QCAMERA3_INSTANT_AEC_END,
294 
295     NEXUS_EXPERIMENTAL_2016_HYBRID_AE_ENABLE = NEXUS_EXPERIMENTAL_2016_START,
296     NEXUS_EXPERIMENTAL_2016_AF_SCENE_CHANGE,
297     // DEVCAMDEBUG
298     DEVCAMDEBUG_META_ENABLE,
299     // DEVCAMDEBUG AF
300     DEVCAMDEBUG_AF_LENS_POSITION,
301     DEVCAMDEBUG_AF_TOF_CONFIDENCE,
302     DEVCAMDEBUG_AF_TOF_DISTANCE,
303     DEVCAMDEBUG_AF_LUMA,
304     DEVCAMDEBUG_AF_HAF_STATE,
305     DEVCAMDEBUG_AF_MONITOR_PDAF_TARGET_POS,
306     DEVCAMDEBUG_AF_MONITOR_PDAF_CONFIDENCE,
307     DEVCAMDEBUG_AF_MONITOR_PDAF_REFOCUS,
308     DEVCAMDEBUG_AF_MONITOR_TOF_TARGET_POS,
309     DEVCAMDEBUG_AF_MONITOR_TOF_CONFIDENCE,
310     DEVCAMDEBUG_AF_MONITOR_TOF_REFOCUS,
311     DEVCAMDEBUG_AF_MONITOR_TYPE_SELECT,
312     DEVCAMDEBUG_AF_MONITOR_REFOCUS,
313     DEVCAMDEBUG_AF_MONITOR_TARGET_POS,
314     DEVCAMDEBUG_AF_SEARCH_PDAF_TARGET_POS,
315     DEVCAMDEBUG_AF_SEARCH_PDAF_NEXT_POS,
316     DEVCAMDEBUG_AF_SEARCH_PDAF_NEAR_POS,
317     DEVCAMDEBUG_AF_SEARCH_PDAF_FAR_POS,
318     DEVCAMDEBUG_AF_SEARCH_PDAF_CONFIDENCE,
319     DEVCAMDEBUG_AF_SEARCH_TOF_TARGET_POS,
320     DEVCAMDEBUG_AF_SEARCH_TOF_NEXT_POS,
321     DEVCAMDEBUG_AF_SEARCH_TOF_NEAR_POS,
322     DEVCAMDEBUG_AF_SEARCH_TOF_FAR_POS,
323     DEVCAMDEBUG_AF_SEARCH_TOF_CONFIDENCE,
324     DEVCAMDEBUG_AF_SEARCH_TYPE_SELECT,
325     DEVCAMDEBUG_AF_SEARCH_NEXT_POS,
326     DEVCAMDEBUG_AF_SEARCH_TARGET_POS,
327     // DEVCAMDEBUG AEC
328     DEVCAMDEBUG_AEC_TARGET_LUMA,
329     DEVCAMDEBUG_AEC_COMP_LUMA,
330     DEVCAMDEBUG_AEC_AVG_LUMA,
331     DEVCAMDEBUG_AEC_CUR_LUMA,
332     DEVCAMDEBUG_AEC_LINECOUNT,
333     DEVCAMDEBUG_AEC_REAL_GAIN,
334     DEVCAMDEBUG_AEC_EXP_INDEX,
335     DEVCAMDEBUG_AEC_LUX_IDX,
336     // DEVCAMDEBUG zzHDR
337     DEVCAMDEBUG_AEC_L_REAL_GAIN,
338     DEVCAMDEBUG_AEC_L_LINECOUNT,
339     DEVCAMDEBUG_AEC_S_REAL_GAIN,
340     DEVCAMDEBUG_AEC_S_LINECOUNT,
341     DEVCAMDEBUG_AEC_HDR_SENSITIVITY_RATIO,
342     DEVCAMDEBUG_AEC_HDR_EXP_TIME_RATIO,
343     // DEVCAMDEBUG ADRC
344     DEVCAMDEBUG_AEC_TOTAL_DRC_GAIN,
345     DEVCAMDEBUG_AEC_COLOR_DRC_GAIN,
346     DEVCAMDEBUG_AEC_GTM_RATIO,
347     DEVCAMDEBUG_AEC_LTM_RATIO,
348     DEVCAMDEBUG_AEC_LA_RATIO,
349     DEVCAMDEBUG_AEC_GAMMA_RATIO,
350     // DEVCAMDEBUG AEC MOTION
351     DEVCAMDEBUG_AEC_CAMERA_MOTION_DX,
352     DEVCAMDEBUG_AEC_CAMERA_MOTION_DY,
353     DEVCAMDEBUG_AEC_SUBJECT_MOTION,
354     // DEVCAMDEBUG AWB
355     DEVCAMDEBUG_AWB_R_GAIN,
356     DEVCAMDEBUG_AWB_G_GAIN,
357     DEVCAMDEBUG_AWB_B_GAIN,
358     DEVCAMDEBUG_AWB_CCT,
359     DEVCAMDEBUG_AWB_DECISION,
360     // DEVCAMDEBUG END
361     NEXUS_EXPERIMENTAL_2016_END,
362 
363     QCAMERA3_SHARPNESS_STRENGTH = QCAMERA3_SHARPNESS_START,
364     QCAMERA3_SHARPNESS_RANGE,
365     QCAMERA3_SHARPNESS_END,
366 
367     QCAMERA3_HISTOGRAM_MODE = QCAMERA3_HISTOGRAM_START,
368     QCAMERA3_HISTOGRAM_BUCKETS,
369     QCAMERA3_HISTOGRAM_MAX_COUNT,
370     QCAMERA3_HISTOGRAM_STATS,
371     QCAMERA3_HISTOGRAM_END,
372 
373     QCAMERA3_BINNING_CORRECTION_MODE = QCAMERA3_BINNING_CORRECTION_START,
374     QCAMERA3_AVAILABLE_BINNING_CORRECTION_MODES,
375     QCAMERA3_BINNING_CORRECTION_END,
376 
377     QCAMERA3_STATS_IS_HDR_SCENE = QCAMERA3_STATS_START,
378     /* Property Name:  org.codeaurora.qcamera3.stats.is_hdr_scene_values
379        Type: byte[2]
380        Description: Possible values for is_hdr_scene
381        roi[0] = 0 (false)
382        roi[1] = 1 (true)
383     */
384     QCAMERA3_STATS_IS_HDR_SCENE_VALUES,
385     QCAMERA3_STATS_IS_HDR_SCENE_CONFIDENCE,
386     /* Property Name:  org.codeaurora.qcamera3.stats.is_hdr_scene_confidence_range
387        Type: float[2]
388        Description: Range of values for is_hdr_scene_confidence
389        roi[0] = 0.0 (min)
390        roi[1] = 1.0 (max)
391     */
392     QCAMERA3_STATS_IS_HDR_SCENE_CONFIDENCE_RANGE,
393     QCAMERA3_STATS_BSGC_AVAILABLE,
394     QCAMERA3_STATS_BLINK_DETECTED,
395     /* Property Name:  org.codeaurora.qcamera3.stats.blink_degree
396        Type: int8[2]
397        Description: Blink degree
398        blink_degree[0] = left
399        blink_degree[1] = right
400     */
401     QCAMERA3_STATS_BLINK_DEGREE,
402     QCAMERA3_STATS_SMILE_DEGREE,
403     QCAMERA3_STATS_SMILE_CONFIDENCE,
404     QCAMERA3_STATS_GAZE_ANGLE,
405     /* Property Name:  org.codeaurora.qcamera3.stats.gaze_direction
406        Type: int32[3]
407        Description: Gaze direction
408        gaze_direction[0] = up-down
409        gaze_direction[1] = left-right
410        gaze_direction[2] = roll
411     */
412     QCAMERA3_STATS_GAZE_DIRECTION,
413     /* Property Name:  org.codeaurora.qcamera3.stats.gaze_degree
414        Type: int8[2]
415        Description: Gaze degree
416        gaze_degree[0] = left-right
417        gaze_degree[1] = top-bottom
418     */
419     QCAMERA3_STATS_GAZE_DEGREE,
420     QCAMERA3_STATS_END,
421 
422     /* Histogram */
423     NEXUS_EXPERIMENTAL_2017_HISTOGRAM_ENABLE = NEXUS_EXPERIMENTAL_2017_START,
424     NEXUS_EXPERIMENTAL_2017_HISTOGRAM_SUPPORTED_BINS,
425     NEXUS_EXPERIMENTAL_2017_HISTOGRAM_BINS,
426     NEXUS_EXPERIMENTAL_2017_HISTOGRAM,
427 
428     /* EEPROM Version Information */
429     NEXUS_EXPERIMENTAL_2017_EEPROM_VERSION_INFO,
430 
431     /* EEPROM PDAF calibration data */
432     NEXUS_EXPERIMENTAL_2017_EEPROM_PDAF_CALIB_RIGHT_GAINS,
433     NEXUS_EXPERIMENTAL_2017_EEPROM_PDAF_CALIB_LEFT_GAINS,
434     NEXUS_EXPERIMENTAL_2017_EEPROM_PDAF_CALIB_CONV_COEFF,
435 
436     /* EEPROM WB calibration data */
437     NEXUS_EXPERIMENTAL_2017_EEPROM_WB_CALIB_NUM_LIGHTS,
438     NEXUS_EXPERIMENTAL_2017_EEPROM_WB_CALIB_R_OVER_G_RATIOS,
439     NEXUS_EXPERIMENTAL_2017_EEPROM_WB_CALIB_B_OVER_G_RATIOS,
440     NEXUS_EXPERIMENTAL_2017_EEPROM_WB_CALIB_GR_OVER_GB_RATIO,
441 
442     /* Tracking AF */
443     NEXUS_EXPERIMENTAL_2017_TRACKING_AF_TRIGGER,
444     NEXUS_EXPERIMENTAL_2017_AF_REGIONS_CONFIDENCE,
445     /* OIS data */
446     NEXUS_EXPERIMENTAL_2017_OIS_FRAME_TIMESTAMP_VSYNC,
447     NEXUS_EXPERIMENTAL_2017_OIS_FRAME_TIMESTAMP_BOOTTIME,
448     NEXUS_EXPERIMENTAL_2017_OIS_TIMESTAMPS_BOOTTIME,
449     NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_X,
450     NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_Y,
451     NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_PIXEL_X,
452     NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_PIXEL_Y,
453     /* PD plumbing */
454     NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
455     NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
456     /* Exposure time boost */
457     NEXUS_EXPERIMENTAL_2017_EXP_TIME_BOOST,
458     /* EASEL HDR+ */
459     NEXUS_EXPERIMENTAL_2017_EXIF_MAKERNOTE,
460     NEXUS_EXPERIMENTAL_2017_NEXT_STILL_INTENT_REQUEST_READY,
461     NEXUS_EXPERIMENTAL_2017_POSTVIEW,
462     NEXUS_EXPERIMENTAL_2017_POSTVIEW_CONFIG,
463     NEXUS_EXPERIMENTAL_2017_POSTVIEW_DATA,
464     NEXUS_EXPERIMENTAL_2017_CONTINUOUS_ZSL_CAPTURE,
465     NEXUS_EXPERIMENTAL_2017_DISABLE_HDRPLUS,
466     NEXUS_EXPERIMENTAL_2017_SCENE_DISTANCE,
467 
468     /* Motion detection */
469     NEXUS_EXPERIMENTAL_2017_MOTION_DETECTION_ENABLE,
470     NEXUS_EXPERIMENTAL_2017_CAMERA_MOTION_X,
471     NEXUS_EXPERIMENTAL_2017_CAMERA_MOTION_Y,
472     NEXUS_EXPERIMENTAL_2017_SUBJECT_MOTION,
473 
474     NEXUS_EXPERIMENTAL_2017_END,
475 
476     /* Select sensor mode for tango */
477     TANGO_MODE_DATA_MODE = TANGO_MODE_DATA_START, //Unused. Reserved for backward compatibility
478     TANGO_MODE_DATA_SENSOR_FULLFOV,
479     TANGO_MODE_DATA_END,
480 };
481 
482 // QCAMERA3_OPAQUE_RAW_FORMAT
483 typedef enum qcamera3_ext_opaque_raw_format {
484     QCAMERA3_OPAQUE_RAW_FORMAT_LEGACY,
485     QCAMERA3_OPAQUE_RAW_FORMAT_MIPI
486 } qcamera3_ext_opaque_raw_format_t;
487 
488 // QCAMERA3_VIDEO_HDR_MODE
489 typedef enum camera_metadata_enum_android_video_hdr_mode {
490     QCAMERA3_VIDEO_HDR_MODE_OFF,
491     QCAMERA3_VIDEO_HDR_MODE_ON
492 } camera_metadata_enum_android_video_hdr_mode_t;
493 
494 // QCAMERA3_IR_MODE
495 typedef enum camera_metadata_enum_android_ir_mode {
496     QCAMERA3_IR_MODE_OFF,
497     QCAMERA3_IR_MODE_ON,
498     QCAMERA3_IR_MODE_AUTO
499 } camera_metadata_enum_android_ir_mode_t;
500 
501 // QCAMERA3_INSTANCE_AEC_MODE
502 typedef enum qcamera3_ext_instant_aec_mode {
503     QCAMERA3_INSTANT_AEC_NORMAL_CONVERGENCE,
504     QCAMERA3_INSTANT_AEC_AGGRESSIVE_CONVERGENCE,
505     QCAMERA3_INSTANT_AEC_FAST_CONVERGENCE
506 } qcamera3_ext_instant_aec_mode_t;
507 
508 // QCAMERA3_HISTOGRAM_MODE
509 typedef enum qcamera3_histogram_mode {
510     QCAMERA3_HISTOGRAM_MODE_OFF,
511     QCAMERA3_HISTOGRAM_MODE_ON
512 } histogram_mode;
513 
514 // QCAMERA3_BINNING_CORRECTION_MODE
515 typedef enum camera_metadata_enum_android_binning_correction_mode {
516     QCAMERA3_BINNING_CORRECTION_MODE_OFF,
517     QCAMERA3_BINNING_CORRECTION_MODE_ON
518 } camera_metadata_enum_android_binning_correction_mode_t;
519 
520 // QCAMERA3_EXPOSURE_METER
521 typedef enum qcamera3_ext_exposure_meter_mode {
522     QCAMERA3_EXP_METER_MODE_FRAME_AVERAGE,
523     QCAMERA3_EXP_METER_MODE_CENTER_WEIGHTED,
524     QCAMERA3_EXP_METER_MODE_SPOT_METERING,
525     QCAMERA3_EXP_METER_MODE_SMART_METERING,
526     QCAMERA3_EXP_METER_MODE_USER_METERING,
527     QCAMERA3_EXP_METER_MODE_SPOT_METERING_ADV,
528     QCAMERA3_EXP_METER_MODE_CENTER_WEIGHTED_ADV
529 } qcamera3_ext_exposure_meter_mode_t;
530 
531 // QCAMERA3_ISO_EXP_PRIORITY
532 typedef enum qcamera3_ext_iso_mode {
533     QCAMERA3_ISO_MODE_AUTO,
534     QCAMERA3_ISO_MODE_DEBLUR,
535     QCAMERA3_ISO_MODE_100,
536     QCAMERA3_ISO_MODE_200,
537     QCAMERA3_ISO_MODE_400,
538     QCAMERA3_ISO_MODE_800,
539     QCAMERA3_ISO_MODE_1600,
540     QCAMERA3_ISO_MODE_3200,
541 } qcamera3_ext_iso_mode_t;
542 
543 typedef enum {
544     /* RAW only mode for devices that will simultaneously use more than two
545      * cameras. This is required because by default the HAL will start support
546      * stream along with RAW stream. This will allocate resources which
547      * otherwise can be used for another camera. Using this mode indicates HAL
548      * that the additional functionality provided by support stream is not
549      * needed.
550      * This mode has following limitations:
551      *    - Back end 3A, Face Detect or any additional functionality depending
552      *   on image/sensor statistics and YUV streams will be disabled.
553      */
554     QCAMERA3_VENDOR_STREAM_CONFIGURATION_RAW_ONLY_MODE = 0x8000,
555 } QCamera3VendorStreamConfiguration;
556 
557 // NEXUS_EXPERIMENTAL_2017_TRACKING_AF
558 typedef enum nexus_experimental_2017_tracking_af_trigger {
559     NEXUS_EXPERIMENTAL_2017_TRACKING_AF_TRIGGER_IDLE,
560     NEXUS_EXPERIMENTAL_2017_TRACKING_AF_TRIGGER_START,
561     NEXUS_EXPERIMENTAL_2017_TRACKING_AF_TRIGGER_STOP,
562 } nexus_experimental_2017_tracking_af_trigger_t;
563 
564 typedef enum com_google_nexus_experimental_2016_control_ae_mode {
565     NEXUS_EXPERIMENTAL_2016_CONTROL_AE_MODE_EXTERNAL_FLASH = 5
566 } com_google_nexus_experimental_2016_control_ae_mode_t;
567 
568 class QCamera3VendorTags {
569 
570 public:
571     static void get_vendor_tag_ops(vendor_tag_ops_t* ops);
572     static int get_tag_count(
573             const vendor_tag_ops_t *ops);
574     static void get_all_tags(
575             const vendor_tag_ops_t *ops,
576             uint32_t *tag_array);
577     static const char* get_section_name(
578             const vendor_tag_ops_t *ops,
579             uint32_t tag);
580     static const char* get_tag_name(
581             const vendor_tag_ops_t *ops,
582             uint32_t tag);
583     static int get_tag_type(
584             const vendor_tag_ops_t *ops,
585             uint32_t tag);
586 
587     static const vendor_tag_ops_t *Ops;
588 };
589 
590 }; // namespace qcamera
591 
592 #endif /* __QCAMERA3VENDORTAGS_H__ */
593