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