1 /* Copyright (c) 2012-2013, 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 __QCAMERA_INTF_H__
31 #define __QCAMERA_INTF_H__
32 
33 #include <media/msmb_isp.h>
34 #include "cam_types.h"
35 
36 #define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + 14)
37 typedef enum {
38     /* session based parameters */
39     CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE,
40     /* session based action: do auto focus. TRIGGER_AF in HAL3 request */
41     CAM_PRIV_DO_AUTO_FOCUS,
42     /* session based action: cancel auto focus. TRIGGER_AF in HAL3 request. */
43     CAM_PRIV_CANCEL_AUTO_FOCUS,
44     /* session based action: prepare for snapshot. TRIGGER_AE_PREPARE in HAL3*/
45     CAM_PRIV_PREPARE_SNAPSHOT,
46     /* sync stream info. Used for configure_streams */
47     CAM_PRIV_STREAM_INFO_SYNC,
48     /* stream based parameters*/
49     CAM_PRIV_STREAM_PARM,
50     /* start ZSL snapshot.*/
51     CAM_PRIV_START_ZSL_SNAPSHOT,
52     /* stop ZSL snapshot.*/
53     CAM_PRIV_STOP_ZSL_SNAPSHOT,
54 } cam_private_ioctl_enum_t;
55 
56 /* capability struct definition for HAL 1*/
57 typedef struct{
58     cam_hal_version_t version;
59 
60     cam_position_t position;                                /* sensor position: front, back */
61 
62     uint16_t isWnrSupported;
63     /* supported iso modes */
64     uint8_t supported_iso_modes_cnt;
65     cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX];
66 
67     /* supported flash modes */
68     uint8_t supported_flash_modes_cnt;
69     cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX];
70 
71     uint8_t zoom_ratio_tbl_cnt;                             /* table size for zoom ratios */
72     int zoom_ratio_tbl[MAX_ZOOMS_CNT];                      /* zoom ratios table */
73 
74     int qcom_supported_feature_mask;      /* mask of qcom specific features supported:
75                                            * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/
76 
77     /* supported effect modes */
78     uint8_t supported_effects_cnt;
79     cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX];
80 
81     /* supported scene modes */
82     uint8_t supported_scene_modes_cnt;
83     cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX];
84 
85     /* supported auto exposure modes */
86     uint8_t supported_aec_modes_cnt;
87     cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX];
88 
89     uint8_t fps_ranges_tbl_cnt;                             /* fps ranges table size */
90     cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT];          /* fps ranges table */
91 
92     /* supported antibanding modes */
93     uint8_t supported_antibandings_cnt;
94     cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX];
95 
96     /* supported white balance modes */
97     uint8_t supported_white_balances_cnt;
98     cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX];
99 
100     /* supported focus modes */
101     uint8_t supported_focus_modes_cnt;
102     cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX];
103 
104     int exposure_compensation_min;       /* min value of exposure compensation index */
105     int exposure_compensation_max;       /* max value of exposure compensation index */
106     int exposure_compensation_default;   /* default value of exposure compensation index */
107     float exposure_compensation_step;
108     cam_rational_type_t exp_compensation_step;    /* exposure compensation step value */
109 
110     uint8_t video_stablization_supported; /* flag id video stablization is supported */
111 
112     uint8_t picture_sizes_tbl_cnt;                          /* picture sizes table size */
113     cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT];       /* picture sizes table */
114     /* The minimum frame duration that is supported for each
115      * resolution in availableProcessedSizes. Should correspond
116      * to the frame duration when only that processed stream
117      * is active, with all processing set to FAST */
118     int64_t picture_min_duration[MAX_SIZES_CNT];
119 
120     /* capabilities specific to HAL 1 */
121 
122     int modes_supported;                                    /* mask of modes supported: 2D, 3D */
123     uint32_t sensor_mount_angle;                            /* sensor mount angle */
124 
125     float focal_length;                                     /* focal length */
126     float hor_view_angle;                                   /* horizontal view angle */
127     float ver_view_angle;                                   /* vertical view angle */
128 
129     uint8_t preview_sizes_tbl_cnt;                          /* preview sizes table size */
130     cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT];       /* preiew sizes table */
131 
132     uint8_t video_sizes_tbl_cnt;                            /* video sizes table size */
133     cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT];         /* video sizes table */
134 
135 
136     uint8_t livesnapshot_sizes_tbl_cnt;                     /* livesnapshot sizes table size */
137     cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
138 
139     uint8_t hfr_tbl_cnt;                                    /* table size for HFR */
140     cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX];               /* HFR table */
141 
142     /* supported preview formats */
143     uint8_t supported_preview_fmt_cnt;
144     cam_format_t supported_preview_fmts[CAM_FORMAT_MAX];
145 
146     /* supported picture formats */
147     uint8_t supported_picture_fmt_cnt;
148     cam_format_t supported_picture_fmts[CAM_FORMAT_MAX];
149 
150     /* dimension and supported output format of raw dump from camif */
151     uint8_t supported_raw_dim_cnt;
152     cam_dimension_t raw_dim[MAX_SIZES_CNT];
153     uint8_t supported_raw_fmt_cnt;
154     cam_format_t supported_raw_fmts[CAM_FORMAT_MAX];
155     /* The minimum frame duration that is supported for above
156        raw resolution */
157     int64_t raw_min_duration[MAX_SIZES_CNT];
158 
159     /* supported focus algorithms */
160     uint8_t supported_focus_algos_cnt;
161     cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX];
162 
163 
164     uint8_t auto_wb_lock_supported;       /* flag if auto white balance lock is supported */
165     uint8_t zoom_supported;               /* flag if zoom is supported */
166     uint8_t smooth_zoom_supported;        /* flag if smooth zoom is supported */
167     uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */
168     uint8_t video_snapshot_supported;     /* flag if video snapshot is supported */
169 
170     uint8_t max_num_roi;                  /* max number of roi can be detected */
171     uint8_t max_num_focus_areas;          /* max num of focus areas */
172     uint8_t max_num_metering_areas;       /* max num opf metering areas */
173     uint8_t max_zoom_step;                /* max zoom step value */
174 
175     /* QCOM specific control */
176     cam_control_range_t brightness_ctrl;  /* brightness */
177     cam_control_range_t sharpness_ctrl;   /* sharpness */
178     cam_control_range_t contrast_ctrl;    /* contrast */
179     cam_control_range_t saturation_ctrl;  /* saturation */
180     cam_control_range_t sce_ctrl;         /* skintone enhancement factor */
181 
182     cam_padding_info_t padding_info;      /* padding information from PP */
183     int8_t min_num_hdr_bufs;              /* minimum number of buffers needed for HDR by imaging module */
184     int8_t min_num_pp_bufs;               /* minimum number of buffers needed by postproc module */
185     uint32_t min_required_pp_mask;        /* min required pp feature masks for ZSL.
186                                            * depends on hardware limitation, i.e. for 8974,
187                                            * sharpness is required for all ZSL snapshot frames */
188 
189     /* capabilities specific to HAL 3 */
190 
191     float min_focus_distance;
192     float hyper_focal_distance;
193 
194     float focal_lengths[CAM_FOCAL_LENGTHS_MAX];
195     uint8_t focal_lengths_count;
196 
197     /* Needs to be regular f number instead of APEX */
198     float apertures[CAM_APERTURES_MAX];
199     uint8_t apertures_count;
200 
201     float filter_densities[CAM_FILTER_DENSITIES_MAX];
202     uint8_t filter_densities_count;
203 
204     uint8_t optical_stab_modes[CAM_OPT_STAB_MAX];
205     uint8_t optical_stab_modes_count;
206 
207     cam_dimension_t lens_shading_map_size;
208     float lens_shading_map[3 * CAM_MAX_MAP_WIDTH *
209               CAM_MAX_MAP_HEIGHT];
210 
211     cam_dimension_t geo_correction_map_size;
212     float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH *
213               CAM_MAX_MAP_HEIGHT];
214 
215     float lens_position[3];
216 
217     /* nano seconds */
218     int64_t exposure_time_range[2];
219 
220     /* nano seconds */
221     int64_t max_frame_duration;
222 
223     cam_color_filter_arrangement_t color_arrangement;
224     uint8_t num_color_channels;
225 
226     float sensor_physical_size[2];
227 
228     /* Dimensions of full pixel array, possibly including
229        black calibration pixels */
230     cam_dimension_t pixel_array_size;
231     /* Area of raw data which corresponds to only active
232        pixels; smaller or equal to pixelArraySize. */
233     cam_rect_t active_array_size;
234 
235     /* Maximum raw value output by sensor */
236     int32_t white_level;
237 
238     /* A fixed black level offset for each of the Bayer
239        mosaic channels */
240     int32_t black_level_pattern[4];
241 
242     /* Time taken before flash can fire again in nano secs */
243     int64_t flash_charge_duration;
244 
245     /* flash firing power */
246     uint8_t supported_flash_firing_level_cnt;
247     cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX];
248 
249     /* Flash Firing Time */
250     int64_t flash_firing_time;
251 
252     /* Flash Ciolor Temperature */
253     uint8_t flash_color_temp;
254 
255     /* Flash max Energy */
256     uint8_t flash_max_energy;
257 
258     /* Maximum number of supported points in the tonemap
259        curve */
260     int32_t max_tone_map_curve_points;
261 
262     /* supported formats */
263     uint8_t supported_scalar_format_cnt;
264     cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX];
265 
266     uint32_t max_face_detection_count;
267 
268     /* Number of histogram buckets supported */
269     int32_t histogram_size;
270     /* Maximum value possible for a histogram bucket */
271     int32_t max_histogram_count;
272 
273     cam_dimension_t sharpness_map_size;
274 
275     /* Maximum value possible for a sharpness map region */
276     int32_t max_sharpness_map_value;
277 
278     cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX];
279 
280     /*Autoexposure modes for camera 3 api*/
281     uint8_t supported_ae_modes_cnt;
282     cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX];
283 
284 
285     cam_sensitivity_range_t sensitivity_range;
286     int32_t max_analog_sensitivity;
287 
288     uint8_t flash_available;
289 
290     cam_rational_type_t base_gain_factor;    /* sensor base gain factor */
291 
292     uint8_t focus_dist_calibrated;
293 
294     uint8_t supported_test_pattern_modes_cnt;
295     cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT];
296 
297     int64_t jpeg_stall_durations[MAX_SIZES_CNT];
298     int64_t raw16_stall_durations[MAX_SIZES_CNT];
299     cam_illuminant_t reference_illuminant1;
300     cam_illuminant_t reference_illuminant2;
301     cam_rational_type_t forward_matrix1[3][3];
302     cam_rational_type_t forward_matrix2[3][3];
303     cam_rational_type_t color_transform1[3][3];
304     cam_rational_type_t color_transform2[3][3];
305     cam_rational_type_t calibration_transform1[3][3];
306     cam_rational_type_t calibration_transform2[3][3];
307 
308     cam_opaque_raw_format_t opaque_raw_fmt;
309 } cam_capability_t;
310 
311 typedef enum {
312     CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS,
313     CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE,
314     CAM_STREAM_PARAM_TYPE_MAX
315 } cam_stream_param_type_e;
316 
317 typedef struct {
318     uint8_t buf_index;            /* buf index to the source frame buffer that needs reprocess,
319                                     (assume buffer is already mapped)*/
320     uint32_t frame_idx;           /* frame id of source frame to be reprocessed */
321     int32_t ret_val;              /* return value from reprocess. Could have different meanings.
322                                      i.e., faceID in the case of face registration. */
323     uint8_t meta_present;         /* if there is meta data associated with this reprocess frame */
324 
325     uint32_t meta_stream_handle;  /* meta data stream ID. only valid if meta_present != 0 */
326     uint8_t meta_buf_index;       /* buf index to meta data buffer. only valid if meta_present != 0 */
327 
328     /* opaque metadata required for reprocessing */
329     char private_data[MAX_METADATA_PAYLOAD_SIZE];
330 
331     cam_rect_t crop_rect;
332 } cam_reprocess_param;
333 
334 typedef struct {
335     cam_stream_param_type_e type;
336     union {
337         cam_reprocess_param reprocess;  /* do reprocess */
338         cam_bundle_config_t bundleInfo; /* set bundle info*/
339     };
340 } cam_stream_parm_buffer_t;
341 
342 /* stream info */
343 typedef struct {
344     /* stream ID from server */
345     uint32_t stream_svr_id;
346 
347     /* stream type */
348     cam_stream_type_t stream_type;
349 
350     /* image format */
351     cam_format_t fmt;
352 
353     /* image dimension */
354     cam_dimension_t dim;
355 
356     /* buffer plane information, will be calc based on stream_type, fmt,
357        dim, and padding_info(from stream config). Info including:
358        offset_x, offset_y, stride, scanline, plane offset */
359     cam_stream_buf_plane_info_t buf_planes;
360 
361     /* number of stream bufs will be allocated */
362     uint8_t num_bufs;
363 
364     /* streaming type */
365     cam_streaming_mode_t streaming_mode;
366     /* num of frames needs to be generated.
367      * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */
368     uint8_t num_of_burst;
369 
370     /* stream specific pp config */
371     cam_pp_feature_config_t pp_config;
372 
373     /* this section is valid if offline reprocess type stream */
374     cam_stream_reproc_config_t reprocess_config;
375 
376     cam_stream_parm_buffer_t parm_buf;    /* stream based parameters */
377 } cam_stream_info_t;
378 
379 /*****************************************************************************
380  *                 Code for Domain Socket Based Parameters                   *
381  ****************************************************************************/
382 
383 #define POINTER_OF(PARAM_ID,TABLE_PTR)    \
384         (&(TABLE_PTR->entry[PARAM_ID].data))
385 
386 #define SET_PARM_VALID_BIT(PARAM_ID,TABLE_PTR,VALID_BIT) \
387         (TABLE_PTR->entry[PARAM_ID].valid=VALID_BIT)
388 
389 #define IS_PARM_VALID(PARAM_ID,TABLE_PTR) \
390         (TABLE_PTR->entry[PARAM_ID].valid)
391 
392 #define GET_FIRST_PARAM_ID(TABLE_PTR)     \
393         (TABLE_PTR->first_flagged_entry)
394 
395 #define SET_FIRST_PARAM_ID(TABLE_PTR,PARAM_ID)     \
396         TABLE_PTR->first_flagged_entry=PARAM_ID
397 
398 #define GET_NEXT_PARAM_ID(CURRENT_PARAM_ID,TABLE_PTR)    \
399         (TABLE_PTR->entry[CURRENT_PARAM_ID].next_flagged_entry)
400 
401 #define SET_NEXT_PARAM_ID(CURRENT_PARAM_ID,TABLE_PTR,NEXT_PARAM_ID)    \
402         TABLE_PTR->entry[CURRENT_PARAM_ID].next_flagged_entry=NEXT_PARAM_ID;
403 
404 #define INCLUDE(PARAM_ID,DATATYPE,COUNT)  \
405         DATATYPE member_variable_##PARAM_ID[ COUNT ]
406 
407 typedef union {
408 /**************************************************************************************
409  *  ID from (cam_intf_metadata_type_t)                DATATYPE                     COUNT
410  **************************************************************************************/
411     /* common between HAL1 and HAL3 */
412     INCLUDE(CAM_INTF_PARM_HAL_VERSION,              	int32_t,                     1);
413     INCLUDE(CAM_INTF_META_STREAM_INFO,              	cam_stream_size_info_t,      1);
414     INCLUDE(CAM_INTF_META_STREAM_ID,                	cam_stream_ID_t,             1);
415     INCLUDE(CAM_INTF_META_HISTOGRAM,                    cam_hist_stats_t,            1);
416     INCLUDE(CAM_INTF_META_FACE_DETECTION,               cam_face_detection_data_t,   1);
417     INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA,               cam_auto_focus_data_t,       1);
418     INCLUDE(CAM_INTF_META_CROP_DATA,                    cam_crop_data_t,             1);
419 
420     /* Specific to HAl1 */
421     INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE,           int32_t,                     1);
422     INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE,         cam_frame_idx_range_t,       1);
423     INCLUDE(CAM_INTF_PARM_ANTIBANDING,                  int8_t,                      1);
424     /* Specific to HAL3 */
425     INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID,           int32_t,                     1);
426     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID,    int32_t,                     1);
427     INCLUDE(CAM_INTF_META_FRAME_DROPPED,                cam_frame_dropped_t,         1);
428     INCLUDE(CAM_INTF_META_PENDING_REQUESTS,             uint32_t,                    1);
429     INCLUDE(CAM_INTF_META_FRAME_NUMBER,                 uint32_t,                    1);
430     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER,          uint32_t,                    1);
431     INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE,           uint8_t,                     1);
432     INCLUDE(CAM_INTF_META_AWB_REGIONS,                  cam_area_t,                  5);
433     INCLUDE(CAM_INTF_META_FRAMES_STALLED,               uint8_t,                     1);
434     /* HAL1 only control */
435     INCLUDE(CAM_INTF_PARM_SHARPNESS,                	int32_t,                     1);
436     INCLUDE(CAM_INTF_PARM_CONTRAST,                 	int32_t,                     1);
437     INCLUDE(CAM_INTF_PARM_SATURATION,              	int32_t,                     1);
438     INCLUDE(CAM_INTF_PARM_BRIGHTNESS,               	int32_t,                     1);
439     INCLUDE(CAM_INTF_PARM_ISO,                      	int32_t,                     1);
440     INCLUDE(CAM_INTF_PARM_ZOOM,                     	int32_t,                     1);
441     INCLUDE(CAM_INTF_PARM_ROLLOFF,                  	int32_t,                     1);
442     INCLUDE(CAM_INTF_PARM_MODE,                     	int32_t,                     1);
443     INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE,            	int32_t,                     1);
444     INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE,          	int32_t,                     1);
445     INCLUDE(CAM_INTF_PARM_AEC_ROI,                  	cam_set_aec_roi_t,           1);
446     INCLUDE(CAM_INTF_PARM_AF_ROI,                   	cam_roi_info_t,              1);
447     INCLUDE(CAM_INTF_PARM_SCE_FACTOR,               	int32_t,                     1);
448     INCLUDE(CAM_INTF_PARM_FD,                       	cam_fd_set_parm_t,           1);
449     INCLUDE(CAM_INTF_PARM_MCE,                      	int32_t,                     1);
450     INCLUDE(CAM_INTF_PARM_HFR,                      	int32_t,                     1);
451     INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE,          	cam_denoise_param_t,         1);
452     INCLUDE(CAM_INTF_PARM_HISTOGRAM,                	int32_t,                     1);
453     INCLUDE(CAM_INTF_PARM_ASD_ENABLE,               	int32_t,                     1);
454     INCLUDE(CAM_INTF_PARM_RECORDING_HINT,           	int32_t,                     1);
455     INCLUDE(CAM_INTF_PARM_HDR,                      	cam_exp_bracketing_t,        1);
456     INCLUDE(CAM_INTF_PARM_FRAMESKIP,                	int32_t,                     1);
457     INCLUDE(CAM_INTF_PARM_ZSL_MODE,                 	int32_t,                     1);
458     INCLUDE(CAM_INTF_PARM_HDR_NEED_1X,              	int32_t,                     1);
459     INCLUDE(CAM_INTF_PARM_LOCK_CAF,                 	int32_t,                     1);
460     INCLUDE(CAM_INTF_PARM_VIDEO_HDR,                	int32_t,                     1);
461 
462     /* HAL3 external control */
463     INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE,                uint8_t,                     1);
464     INCLUDE(CAM_INTF_META_PRECAPTURE_TRIGGER,           uint8_t,                     1);
465     INCLUDE(CAM_INTF_META_AF_TRIGGER_NOTICE,            uint8_t,                     1);
466     INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION,             int32_t,                     1);
467     INCLUDE(CAM_INTF_PARM_EV,                       	int32_t,                     1);
468     INCLUDE(CAM_INTF_PARM_EV_STEP,                  	cam_rational_type_t,         1);
469     INCLUDE(CAM_INTF_PARM_AEC_LOCK,                 	uint8_t,                     1);
470     INCLUDE(CAM_INTF_PARM_FPS_RANGE,                	cam_fps_range_t,             1);
471     INCLUDE(CAM_INTF_PARM_AWB_LOCK,                 	uint8_t,                     1);
472     INCLUDE(CAM_INTF_PARM_EFFECT,                   	int32_t,                     1);
473     INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,   	cam_trigger_t,               1);
474     INCLUDE(CAM_INTF_META_AF_TRIGGER,               	cam_trigger_t,               1);
475     INCLUDE(CAM_INTF_META_DEMOSAIC,                 	int32_t,                     1);
476     INCLUDE(CAM_INTF_PARM_LED_MODE,                 	int32_t,                     1);
477     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, 	int32_t,                     1);
478     INCLUDE(CAM_INTF_META_SHADING_STRENGTH,         	uint8_t,                     1);
479     INCLUDE(CAM_INTF_META_TONEMAP_MODE,             	uint8_t,                     1);
480     INCLUDE(CAM_INTF_META_TONEMAP_CURVES,           	cam_rgb_tonemap_curves,      1);
481     INCLUDE(CAM_INTF_META_CAPTURE_INTENT,           	uint8_t,                     1);
482     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE,    	uint8_t,                     1);
483     INCLUDE(CAM_INTF_PARM_DIS_ENABLE,               	int32_t,                     1);
484     /* HAL3 external metadata */
485     INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK,             uint8_t,                     1);
486     INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM,      cam_color_correct_matrix_t,  1);
487     INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS,          cam_color_correct_gains_t,   1);
488     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t,  1);
489     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS,     cam_color_correct_gains_t,   1);
490     INCLUDE(CAM_INTF_META_AEC_MODE,                     uint8_t,                     1);
491     INCLUDE(CAM_INTF_META_AEC_ROI,                      cam_area_t,                  5);
492     INCLUDE(CAM_INTF_META_AEC_STATE,                    uint8_t,                     1);
493     INCLUDE(CAM_INTF_PARM_FOCUS_MODE,                   uint8_t,                     1);
494     INCLUDE(CAM_INTF_META_AF_ROI,                       cam_area_t,                  5);
495     INCLUDE(CAM_INTF_META_AF_STATE,                     uint8_t,                     1);
496     INCLUDE(CAM_INTF_PARM_WHITE_BALANCE,                int32_t,                     1);
497     INCLUDE(CAM_INTF_META_AWB_STATE,                    uint8_t,                     1);
498     INCLUDE(CAM_INTF_META_MODE,                         uint8_t,                     1);
499     INCLUDE(CAM_INTF_META_EDGE_MODE,                    cam_edge_application_t,      1);
500     INCLUDE(CAM_INTF_META_FLASH_POWER,                  uint8_t,                     1);
501     INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME,            int64_t,                     1);
502     INCLUDE(CAM_INTF_META_FLASH_MODE,                   uint8_t,                     1);
503     INCLUDE(CAM_INTF_META_FLASH_STATE,                  int32_t,                     1);
504     INCLUDE(CAM_INTF_META_HOTPIXEL_MODE,                uint8_t,                     1);
505     INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES,         double,                      3);
506     INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS,        uint8_t,                     GPS_PROCESSING_METHOD_SIZE);
507     INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP,           int64_t,                     1);
508     INCLUDE(CAM_INTF_META_JPEG_ORIENTATION,             int32_t,                     1);
509     INCLUDE(CAM_INTF_META_JPEG_QUALITY,                 uint8_t,                     1);
510     INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY,           uint8_t,                     1);
511     INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE,              cam_dimension_t,             1);
512     INCLUDE(CAM_INTF_META_LENS_APERTURE,                float,                       1);
513     INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY,           float,                       1);
514     INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH,            float,                       1);
515     INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE,          float,                       1);
516     INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE,             float,                       2);
517     INCLUDE(CAM_INTF_META_LENS_STATE,                   uint8_t,                     1);
518     INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE,           uint8_t,                     1);
519     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE,         uint8_t,                     1);
520     INCLUDE(CAM_INTF_META_SCALER_CROP_REGION,           cam_crop_region_t,           1);
521     INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME,         int64_t,                     1);
522     INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION,        int64_t,                     1);
523     INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY,           int32_t,                     1);
524     INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP,             struct timeval,              1);
525     INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW,  int64_t,                     1);
526     INCLUDE(CAM_INTF_META_SHADING_MODE,                 uint8_t,                     1);
527     INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE,        uint8_t,                     1);
528     INCLUDE(CAM_INTF_META_SCENE_FLICKER,                uint8_t,                     1);
529     INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE,         uint8_t,                     1);
530     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,     uint8_t,                     1);
531     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP,          cam_sharpness_map_t,         3);
532     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP,             cam_lens_shading_map_t,      1);
533     /* HAL internal metadata */
534     INCLUDE(CAM_INTF_META_AEC_INFO,                     cam_3a_params_t,             1);
535     INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA,            cam_test_pattern_data_t,     1);
536     INCLUDE(CAM_INTF_META_OTP_WB_GRGB,                  float,                       1);
537     INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE,           cam_profile_tone_curve,      1);
538     INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT,            cam_neutral_col_point_t,     1);
539     INCLUDE(CAM_INTF_META_PRIVATE_DATA,                 char,                        MAX_METADATA_PAYLOAD_SIZE);
540 } metadata_type_t;
541 
542 /****************************DO NOT MODIFY BELOW THIS LINE!!!!*********************/
543 
544 typedef struct {
545     metadata_type_t data;
546     uint8_t valid;
547     uint8_t next_flagged_entry;
548 } metadata_entry_type_t;
549 
550 typedef struct {
551     uint8_t first_flagged_entry;
552     metadata_entry_type_t entry[CAM_INTF_PARM_MAX];
553     /*Tuning Data */
554     uint8_t is_tuning_params_valid;
555     tuning_params_t tuning_params;
556 } metadata_buffer_t;
557 
558 typedef metadata_buffer_t parm_buffer_t;
559 typedef metadata_type_t parm_type_t;
560 
561 #endif /* __QCAMERA_INTF_H__ */
562