Home | History | Annotate | Download | only in common
      1 /* Copyright (c) 2012-2015, 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 <string.h>
     34 #include <media/msmb_isp.h>
     35 #include "cam_types.h"
     36 
     37 #define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + 14)
     38 typedef enum {
     39     /* session based parameters */
     40     CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE,
     41     /* session based action: do auto focus.*/
     42     CAM_PRIV_DO_AUTO_FOCUS,
     43     /* session based action: cancel auto focus.*/
     44     CAM_PRIV_CANCEL_AUTO_FOCUS,
     45     /* session based action: prepare for snapshot.*/
     46     CAM_PRIV_PREPARE_SNAPSHOT,
     47     /* sync stream info.*/
     48     CAM_PRIV_STREAM_INFO_SYNC,
     49     /* stream based parameters*/
     50     CAM_PRIV_STREAM_PARM,
     51     /* start ZSL snapshot.*/
     52     CAM_PRIV_START_ZSL_SNAPSHOT,
     53     /* stop ZSL snapshot.*/
     54     CAM_PRIV_STOP_ZSL_SNAPSHOT,
     55 } cam_private_ioctl_enum_t;
     56 
     57 /* capability struct definition for HAL 1*/
     58 typedef struct{
     59     cam_hal_version_t version;
     60 
     61     cam_position_t position;                                /* sensor position: front, back */
     62 
     63     uint8_t auto_hdr_supported;
     64 
     65     uint16_t isWnrSupported;
     66     /* supported iso modes */
     67     size_t supported_iso_modes_cnt;
     68     cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX];
     69 
     70     /* supported flash modes */
     71     size_t supported_flash_modes_cnt;
     72     cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX];
     73 
     74     size_t zoom_ratio_tbl_cnt;                              /* table size for zoom ratios */
     75     uint32_t zoom_ratio_tbl[MAX_ZOOMS_CNT];                 /* zoom ratios table */
     76 
     77     /* supported effect modes */
     78     size_t supported_effects_cnt;
     79     cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX];
     80 
     81     /* supported scene modes */
     82     size_t supported_scene_modes_cnt;
     83     cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX];
     84 
     85     /* supported auto exposure modes */
     86     size_t supported_aec_modes_cnt;
     87     cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX];
     88 
     89     size_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     size_t supported_antibandings_cnt;
     94     cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX];
     95 
     96     /* supported white balance modes */
     97     size_t supported_white_balances_cnt;
     98     cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX];
     99 
    100     /* supported manual wb cct */
    101     int32_t min_wb_cct;
    102     int32_t max_wb_cct;
    103 
    104     /* supported manual wb rgb gains */
    105     float min_wb_gain;
    106     float max_wb_gain;
    107 
    108     /* supported focus modes */
    109     size_t supported_focus_modes_cnt;
    110     cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX];
    111 
    112     /* supported manual focus position */
    113     float min_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
    114     float max_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
    115 
    116     int32_t exposure_compensation_min;       /* min value of exposure compensation index */
    117     int32_t exposure_compensation_max;       /* max value of exposure compensation index */
    118     int32_t exposure_compensation_default;   /* default value of exposure compensation index */
    119     float exposure_compensation_step;
    120     cam_rational_type_t exp_compensation_step;    /* exposure compensation step value */
    121 
    122     uint8_t video_stablization_supported; /* flag id video stablization is supported */
    123 
    124     size_t picture_sizes_tbl_cnt;                           /* picture sizes table size */
    125     cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT];       /* picture sizes table */
    126     /* The minimum frame duration that is supported for each
    127      * resolution in availableProcessedSizes. Should correspond
    128      * to the frame duration when only that processed stream
    129      * is active, with all processing set to FAST */
    130     int64_t picture_min_duration[MAX_SIZES_CNT];
    131 
    132     /* capabilities specific to HAL 1 */
    133 
    134     int32_t modes_supported;                                /* mask of modes supported: 2D, 3D */
    135     uint32_t sensor_mount_angle;                            /* sensor mount angle */
    136 
    137     float focal_length;                                     /* focal length */
    138     float hor_view_angle;                                   /* horizontal view angle */
    139     float ver_view_angle;                                   /* vertical view angle */
    140 
    141     size_t preview_sizes_tbl_cnt;                           /* preview sizes table size */
    142     cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT];       /* preiew sizes table */
    143 
    144     size_t video_sizes_tbl_cnt;                             /* video sizes table size */
    145     cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT];         /* video sizes table */
    146 
    147 
    148     size_t livesnapshot_sizes_tbl_cnt;                      /* livesnapshot sizes table size */
    149     cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
    150 
    151     size_t hfr_tbl_cnt;                                     /* table size for HFR */
    152     cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX];               /* HFR table */
    153 
    154     /* supported preview formats */
    155     size_t supported_preview_fmt_cnt;
    156     cam_format_t supported_preview_fmts[CAM_FORMAT_MAX];
    157 
    158     /* supported picture formats */
    159     size_t supported_picture_fmt_cnt;
    160     cam_format_t supported_picture_fmts[CAM_FORMAT_MAX];
    161 
    162     uint8_t max_downscale_factor;
    163 
    164     /* dimension and supported output format of raw dump from camif */
    165     size_t supported_raw_dim_cnt;
    166     cam_dimension_t raw_dim[MAX_SIZES_CNT];
    167     size_t supported_raw_fmt_cnt;
    168     cam_format_t supported_raw_fmts[CAM_FORMAT_MAX];
    169     /* The minimum frame duration that is supported for above
    170        raw resolution */
    171     int64_t raw_min_duration[MAX_SIZES_CNT];
    172 
    173     /* 3A version*/
    174     cam_q3a_version_t q3a_version;
    175     /* supported focus algorithms */
    176     size_t supported_focus_algos_cnt;
    177     cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX];
    178 
    179 
    180     uint8_t auto_wb_lock_supported;       /* flag if auto white balance lock is supported */
    181     uint8_t zoom_supported;               /* flag if zoom is supported */
    182     uint8_t smooth_zoom_supported;        /* flag if smooth zoom is supported */
    183     uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */
    184     uint8_t video_snapshot_supported;     /* flag if video snapshot is supported */
    185 
    186     uint8_t max_num_roi;                  /* max number of roi can be detected */
    187     uint8_t max_num_focus_areas;          /* max num of focus areas */
    188     uint8_t max_num_metering_areas;       /* max num opf metering areas */
    189     uint8_t max_zoom_step;                /* max zoom step value */
    190 
    191     /* QCOM specific control */
    192     cam_control_range_t brightness_ctrl;  /* brightness */
    193     cam_control_range_t sharpness_ctrl;   /* sharpness */
    194     cam_control_range_t contrast_ctrl;    /* contrast */
    195     cam_control_range_t saturation_ctrl;  /* saturation */
    196     cam_control_range_t sce_ctrl;         /* skintone enhancement factor */
    197 
    198     /* QCOM HDR specific control. Indicates number of frames and exposure needs for the frames */
    199     cam_hdr_bracketing_info_t hdr_bracketing_setting;
    200 
    201     uint32_t qcom_supported_feature_mask; /* mask of qcom specific features supported:
    202                                            * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/
    203     cam_padding_info_t padding_info;      /* padding information from PP */
    204     uint32_t min_num_pp_bufs;             /* minimum number of buffers needed by postproc module */
    205     uint32_t min_required_pp_mask;        /* min required pp feature masks for ZSL.
    206                                            * depends on hardware limitation, i.e. for 8974,
    207                                            * sharpness is required for all ZSL snapshot frames */
    208     cam_format_t rdi_mode_stream_fmt;  /* stream format supported in rdi mode */
    209 
    210     /* capabilities specific to HAL 3 */
    211 
    212     float min_focus_distance;
    213     float hyper_focal_distance;
    214 
    215     float focal_lengths[CAM_FOCAL_LENGTHS_MAX];
    216     uint8_t focal_lengths_count;
    217 
    218     /* Needs to be regular f number instead of APEX */
    219     float apertures[CAM_APERTURES_MAX];
    220     uint8_t apertures_count;
    221 
    222     float filter_densities[CAM_FILTER_DENSITIES_MAX];
    223     uint8_t filter_densities_count;
    224 
    225     uint8_t optical_stab_modes[CAM_OPT_STAB_MAX];
    226     uint8_t optical_stab_modes_count;
    227 
    228     cam_dimension_t lens_shading_map_size;
    229     float lens_shading_map[3 * CAM_MAX_MAP_WIDTH *
    230               CAM_MAX_MAP_HEIGHT];
    231 
    232     cam_dimension_t geo_correction_map_size;
    233     float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH *
    234               CAM_MAX_MAP_HEIGHT];
    235 
    236     float lens_position[3];
    237 
    238     /* nano seconds */
    239     int64_t exposure_time_range[EXPOSURE_TIME_RANGE_CNT];
    240 
    241     /* nano seconds */
    242     int64_t max_frame_duration;
    243 
    244     cam_color_filter_arrangement_t color_arrangement;
    245     uint8_t num_color_channels;
    246 
    247     /* parameters required to calculate S and O co-efficients */
    248     double gradient_S;
    249     double offset_S;
    250     double gradient_O;
    251     double offset_O;
    252 
    253     float sensor_physical_size[SENSOR_PHYSICAL_SIZE_CNT];
    254 
    255     /* Dimensions of full pixel array, possibly including
    256        black calibration pixels */
    257     cam_dimension_t pixel_array_size;
    258     /* Area of raw data which corresponds to only active
    259        pixels; smaller or equal to pixelArraySize. */
    260     cam_rect_t active_array_size;
    261 
    262     /* Maximum raw value output by sensor */
    263     int32_t white_level;
    264 
    265     /* A fixed black level offset for each of the Bayer
    266        mosaic channels */
    267     int32_t black_level_pattern[BLACK_LEVEL_PATTERN_CNT];
    268 
    269     /* Time taken before flash can fire again in nano secs */
    270     int64_t flash_charge_duration;
    271 
    272     /* flash firing power */
    273     size_t supported_flash_firing_level_cnt;
    274     cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX];
    275 
    276     /* Flash Firing Time */
    277     int64_t flash_firing_time;
    278 
    279     /* Flash Ciolor Temperature */
    280     uint8_t flash_color_temp;
    281 
    282     /* Flash max Energy */
    283     uint8_t flash_max_energy;
    284 
    285     /* Maximum number of supported points in the tonemap
    286        curve */
    287     int32_t max_tone_map_curve_points;
    288 
    289     /* supported formats */
    290     size_t supported_scalar_format_cnt;
    291     cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX];
    292 
    293     uint32_t max_face_detection_count;
    294     uint8_t hw_analysis_supported;
    295 
    296     uint8_t histogram_supported;
    297     /* Number of histogram buckets supported */
    298     int32_t histogram_size;
    299     /* Maximum value possible for a histogram bucket */
    300     int32_t max_histogram_count;
    301 
    302     cam_dimension_t sharpness_map_size;
    303 
    304     /* Maximum value possible for a sharpness map region */
    305     int32_t max_sharpness_map_value;
    306 
    307     /*Autoexposure modes for camera 3 api*/
    308     size_t supported_ae_modes_cnt;
    309     cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX];
    310 
    311 
    312     cam_sensitivity_range_t sensitivity_range;
    313     int32_t max_analog_sensitivity;
    314 
    315     /* picture sizes need scale*/
    316     cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX];
    317     size_t scale_picture_sizes_cnt;
    318     cam_dimension_t scale_picture_sizes[MAX_SCALE_SIZES_CNT];
    319 
    320     uint8_t flash_available;
    321 
    322     cam_rational_type_t base_gain_factor;    /* sensor base gain factor */
    323     /* AF Bracketing info */
    324     cam_af_bracketing_t  ubifocus_af_bracketing_need;
    325     cam_af_bracketing_t  refocus_af_bracketing_need;
    326     /* opti Zoom info */
    327     cam_opti_zoom_t      opti_zoom_settings_need;
    328     /* still more info */
    329     cam_still_more_t  stillmore_settings_need;
    330     /* chroma flash info */
    331     cam_chroma_flash_t chroma_flash_settings_need;
    332 
    333     cam_rational_type_t forward_matrix[3][3];
    334     cam_rational_type_t color_transform[3][3];
    335 
    336     uint8_t focus_dist_calibrated;
    337     uint8_t supported_test_pattern_modes_cnt;
    338     cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT];
    339 
    340     int64_t stall_durations[MAX_SIZES_CNT];
    341 
    342     cam_illuminat_t reference_illuminant1;
    343     cam_illuminat_t reference_illuminant2;
    344 
    345     int64_t jpeg_stall_durations[MAX_SIZES_CNT];
    346     int64_t raw16_stall_durations[MAX_SIZES_CNT];
    347     cam_rational_type_t forward_matrix1[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
    348     cam_rational_type_t forward_matrix2[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
    349     cam_rational_type_t color_transform1[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
    350     cam_rational_type_t color_transform2[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
    351     cam_rational_type_t calibration_transform1[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
    352     cam_rational_type_t calibration_transform2[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
    353     uint16_t isCacSupported;
    354 
    355     cam_opaque_raw_format_t opaque_raw_fmt;
    356 
    357     /* true Portrait info */
    358     cam_true_portrait_t  true_portrait_settings_need;
    359 
    360     /* Sensor type information */
    361     cam_sensor_type_t sensor_type;
    362 
    363     cam_aberration_mode_t aberration_modes[CAM_COLOR_CORRECTION_ABERRATION_MAX];
    364     uint32_t aberration_modes_count;
    365 
    366     /* Can the sensor timestamp be compared to
    367      * timestamps from other sub-systems (gyro, accelerometer etc.) */
    368     uint8_t isTimestampCalibrated;
    369 
    370     /* Analysis stream max supported size */
    371     cam_dimension_t analysis_max_res;
    372     /* Analysis stream padding info */
    373     cam_padding_info_t analysis_padding_info;
    374     /* Max size supported by ISP viewfinder path */
    375     cam_dimension_t max_viewfinder_size;
    376 
    377     /* Analysis recommended size */
    378     cam_dimension_t analysis_recommended_res;
    379 
    380     /* Analysis recommended format */
    381     cam_format_t analysis_recommended_format;
    382 
    383     /* This is set to 'true' if sensor cannot guarantee per frame control */
    384     /* Default value of this capability is 'false' indicating per-frame */
    385     /* control is supported */
    386     uint8_t no_per_frame_control_support;
    387 
    388     /* EIS information */
    389     uint8_t supported_is_types_cnt;
    390     uint32_t supported_is_types[IS_TYPE_MAX];
    391     /*for each type, specify the margin needed. Margin will be
    392       the decimal representation of a percentage
    393       ex: 10% margin = 0.1 */
    394     float supported_is_type_margins[IS_TYPE_MAX];
    395 
    396     /* Max cpp batch size */
    397     uint8_t max_batch_bufs_supported;
    398     uint8_t flash_dev_name[QCAMERA_MAX_FILEPATH_LENGTH];
    399     uint8_t eeprom_version_info[MAX_EEPROM_VERSION_INFO_LEN];
    400 
    401     /* maximum pixel bandwidth shared between cameras */
    402     uint64_t max_pixel_bandwidth;
    403 
    404     /* Array of K integers, where K%4==0,
    405       as a list of rectangles in the pixelArray co-ord system
    406       left, top, right, bottom */
    407     int32_t optical_black_regions[MAX_OPTICAL_BLACK_REGIONS * 4];
    408     /* Count is K/4 */
    409     uint8_t optical_black_region_count;
    410 
    411 } cam_capability_t;
    412 
    413 typedef enum {
    414     CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS,
    415     CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE,
    416     CAM_STREAM_PARAM_TYPE_SET_FLIP = CAM_INTF_PARM_STREAM_FLIP,
    417     CAM_STREAM_PARAM_TYPE_GET_OUTPUT_CROP = CAM_INTF_PARM_GET_OUTPUT_CROP,
    418     CAM_STREAM_PARAM_TYPE_GET_IMG_PROP = CAM_INTF_PARM_GET_IMG_PROP,
    419     CAM_STREAM_PARAM_TYPE_MAX
    420 } cam_stream_param_type_e;
    421 
    422 typedef struct {
    423     uint32_t buf_index;           /* buf index to the source frame buffer that needs reprocess,
    424                                     (assume buffer is already mapped)*/
    425     uint32_t frame_idx;           /* frame id of source frame to be reprocessed */
    426     int32_t ret_val;              /* return value from reprocess. Could have different meanings.
    427                                      i.e., faceID in the case of face registration. */
    428     uint8_t meta_present;         /* if there is meta data associated with this reprocess frame */
    429     uint32_t meta_stream_handle;  /* meta data stream ID. only valid if meta_present != 0 */
    430     uint32_t meta_buf_index;      /* buf index to meta data buffer. only valid if meta_present != 0 */
    431 
    432     /* opaque metadata required for reprocessing */
    433     int32_t private_data[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES];
    434     cam_rect_t crop_rect;
    435 } cam_reprocess_param;
    436 
    437 typedef struct {
    438     uint32_t flip_mask;
    439 } cam_flip_mode_t;
    440 
    441 #define IMG_NAME_SIZE 32
    442 typedef struct {
    443     cam_rect_t crop;  /* crop info for the image */
    444     cam_dimension_t input; /* input dimension of the image */
    445     cam_dimension_t output; /* output dimension of the image */
    446     char name[IMG_NAME_SIZE]; /* optional name of the ext*/
    447     cam_format_t format; /* image format */
    448 } cam_stream_img_prop_t;
    449 
    450 typedef struct {
    451     cam_stream_param_type_e type;
    452     union {
    453         cam_reprocess_param reprocess;  /* do reprocess */
    454         cam_bundle_config_t bundleInfo; /* set bundle info*/
    455         cam_flip_mode_t flipInfo;       /* flip mode */
    456         cam_crop_data_t outputCrop;     /* output crop for current frame */
    457         cam_stream_img_prop_t imgProp;  /* image properties of current frame */
    458     };
    459 } cam_stream_parm_buffer_t;
    460 
    461 /* stream info */
    462 typedef struct {
    463     /* stream ID from server */
    464     uint32_t stream_svr_id;
    465 
    466     /* stream type */
    467     cam_stream_type_t stream_type;
    468 
    469     /* image format */
    470     cam_format_t fmt;
    471 
    472     /* image dimension */
    473     cam_dimension_t dim;
    474 
    475     /* buffer plane information, will be calc based on stream_type, fmt,
    476        dim, and padding_info(from stream config). Info including:
    477        offset_x, offset_y, stride, scanline, plane offset */
    478     cam_stream_buf_plane_info_t buf_planes;
    479 
    480     /* number of stream bufs will be allocated */
    481     uint32_t num_bufs;
    482 
    483     /* streaming type */
    484     cam_streaming_mode_t streaming_mode;
    485 
    486     /* num of frames needs to be generated.
    487      * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */
    488     uint8_t num_of_burst;
    489 
    490     /* num of frames in one batch.
    491      * only valid when streaming_mode = CAM_STREAMING_MODE_BATCH */
    492     cam_stream_user_buf_info_t user_buf_info;
    493 
    494     /* stream specific pp config */
    495     cam_pp_feature_config_t pp_config;
    496 
    497     /* this section is valid if offline reprocess type stream */
    498     cam_stream_reproc_config_t reprocess_config;
    499 
    500     cam_stream_parm_buffer_t parm_buf;    /* stream based parameters */
    501 
    502     uint8_t dis_enable;
    503 
    504     /* Image Stabilization type */
    505     cam_is_type_t is_type;
    506 
    507     /* Signifies Secure stream mode */
    508     cam_stream_secure_t is_secure;
    509 
    510     /* Preferred Performance mode */
    511     cam_perf_mode_t perf_mode;
    512 
    513     /* if frames will not be received */
    514     uint8_t noFrameExpected;
    515 } cam_stream_info_t;
    516 
    517 /*****************************************************************************
    518  *                 Code for Domain Socket Based Parameters                   *
    519  ****************************************************************************/
    520 #define INCLUDE(PARAM_ID,DATATYPE,COUNT)  \
    521         DATATYPE member_variable_##PARAM_ID[ COUNT ]
    522 
    523 #define POINTER_OF_META(META_ID, TABLE_PTR) \
    524         ((NULL != TABLE_PTR) ? \
    525             (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : (NULL))
    526 
    527 #define SIZE_OF_PARAM(META_ID, TABLE_PTR) \
    528         sizeof(TABLE_PTR->data.member_variable_##META_ID)
    529 
    530 #define IF_META_AVAILABLE(META_TYPE, META_PTR_NAME, META_ID, TABLE_PTR) \
    531         META_TYPE *META_PTR_NAME = \
    532         (((NULL != TABLE_PTR) && (TABLE_PTR->is_valid[META_ID])) ? \
    533             (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : \
    534             (NULL)); \
    535         if (NULL != META_PTR_NAME) \
    536 
    537 #define ADD_SET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID, DATA) \
    538     ((NULL != TABLE_PTR) ? \
    539     ((TABLE_PTR->data.member_variable_##META_ID[ 0 ] = DATA), \
    540     (TABLE_PTR->is_valid[META_ID] = 1), (0)) : \
    541     ((ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d", \
    542     __func__, __LINE__, TABLE_PTR, META_ID)), (-1))) \
    543 
    544 #define ADD_SET_PARAM_ARRAY_TO_BATCH(TABLE_PTR, META_ID, PDATA, COUNT, RCOUNT) \
    545 { \
    546     if ((NULL != TABLE_PTR) && \
    547             (0 < COUNT) && \
    548             ((sizeof(TABLE_PTR->data.member_variable_##META_ID) / \
    549             sizeof(TABLE_PTR->data.member_variable_##META_ID[ 0 ])) \
    550             >= COUNT))  { \
    551         for (size_t _i = 0; _i < COUNT ; _i++) { \
    552             TABLE_PTR->data.member_variable_##META_ID[ _i ] = PDATA [ _i ]; \
    553         } \
    554         TABLE_PTR->is_valid[META_ID] = 1; \
    555         RCOUNT = COUNT; \
    556     } else { \
    557         ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d COUNT:%zu", \
    558                 __func__, __LINE__, TABLE_PTR, META_ID, COUNT); \
    559         RCOUNT = 0; \
    560     } \
    561 }
    562 
    563 #define ADD_GET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID) \
    564 { \
    565     if (NULL != TABLE_PTR) { \
    566         TABLE_PTR->is_reqd[META_ID] = 1; \
    567     } else { \
    568         ALOGE("%s: %d, Unable to get metadata TABLE_PTR:%p META_ID:%d", \
    569                 __func__, __LINE__, TABLE_PTR, META_ID); \
    570     } \
    571 }
    572 
    573 #define READ_PARAM_ENTRY(TABLE_PTR, META_ID, DATA) \
    574 { \
    575     if (NULL != TABLE_PTR) { \
    576         DATA = TABLE_PTR->data.member_variable_##META_ID[ 0 ]; \
    577     } else { \
    578         ALOGE("%s: %d, Unable to read metadata TABLE_PTR:%p META_ID:%d", \
    579                 __func__, __LINE__, TABLE_PTR, META_ID); \
    580     } \
    581 }
    582 
    583 typedef struct {
    584 /**************************************************************************************
    585  *  ID from (cam_intf_metadata_type_t)                DATATYPE                     COUNT
    586  **************************************************************************************/
    587     /* common between HAL1 and HAL3 */
    588     INCLUDE(CAM_INTF_META_HISTOGRAM,                    cam_hist_stats_t,               1);
    589     INCLUDE(CAM_INTF_META_FACE_DETECTION,               cam_face_detection_data_t,      1);
    590     INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA,               cam_auto_focus_data_t,          1);
    591     INCLUDE(CAM_INTF_META_CDS_DATA,                     cam_cds_data_t,                 1);
    592     INCLUDE(CAM_INTF_PARM_UPDATE_DEBUG_LEVEL,           uint32_t,                       1);
    593 
    594     /* Specific to HAl1 */
    595     INCLUDE(CAM_INTF_META_CROP_DATA,                    cam_crop_data_t,                1);
    596     INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE,           int32_t,                        1);
    597     INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE,         cam_frame_idx_range_t,          1);
    598     INCLUDE(CAM_INTF_META_ASD_HDR_SCENE_DATA,           cam_asd_hdr_scene_data_t,       1);
    599     INCLUDE(CAM_INTF_META_ASD_SCENE_TYPE,               int32_t,                        1);
    600     INCLUDE(CAM_INTF_META_CURRENT_SCENE,                cam_scene_mode_type,            1);
    601     INCLUDE(CAM_INTF_META_AWB_INFO,                     cam_awb_params_t,               1);
    602     INCLUDE(CAM_INTF_META_FOCUS_POSITION,               cam_focus_pos_info_t,           1);
    603     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ISP,           cam_chromatix_lite_isp_t,       1);
    604     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_PP,            cam_chromatix_lite_pp_t,        1);
    605     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AE,            cam_chromatix_lite_ae_stats_t,  1);
    606     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AWB,           cam_chromatix_lite_awb_stats_t, 1);
    607     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AF,            cam_chromatix_lite_af_stats_t,  1);
    608     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ASD,           cam_chromatix_lite_asd_stats_t, 1);
    609     INCLUDE(CAM_INTF_BUF_DIVERT_INFO,                   cam_buf_divert_info_t,          1);
    610 
    611     /* Specific to HAL3 */
    612     INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID,           int32_t,                     1);
    613     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID,    int32_t,                     1);
    614     INCLUDE(CAM_INTF_META_FRAME_DROPPED,                cam_frame_dropped_t,         1);
    615     INCLUDE(CAM_INTF_META_FRAME_NUMBER,                 uint32_t,                    1);
    616     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER,          uint32_t,                    1);
    617     INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE,           uint32_t,                    1);
    618     INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM,      cam_color_correct_matrix_t,  1);
    619     INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS,          cam_color_correct_gains_t,   1);
    620     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t,  1);
    621     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS,     cam_color_correct_gains_t,   1);
    622     INCLUDE(CAM_INTF_META_AEC_ROI,                      cam_area_t,                  1);
    623     INCLUDE(CAM_INTF_META_AEC_STATE,                    uint32_t,                    1);
    624     INCLUDE(CAM_INTF_PARM_FOCUS_MODE,                   uint32_t,                    1);
    625     INCLUDE(CAM_INTF_PARM_MANUAL_FOCUS_POS,             cam_manual_focus_parm_t,     1);
    626     INCLUDE(CAM_INTF_META_AF_ROI,                       cam_area_t,                  1);
    627     INCLUDE(CAM_INTF_META_AF_STATE,                     uint32_t,                    1);
    628     INCLUDE(CAM_INTF_PARM_WHITE_BALANCE,                int32_t,                     1);
    629     INCLUDE(CAM_INTF_META_AWB_REGIONS,                  cam_area_t,                  1);
    630     INCLUDE(CAM_INTF_META_AWB_STATE,                    uint32_t,                    1);
    631     INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK,             uint32_t,                    1);
    632     INCLUDE(CAM_INTF_META_MODE,                         uint32_t,                    1);
    633     INCLUDE(CAM_INTF_META_EDGE_MODE,                    cam_edge_application_t,      1);
    634     INCLUDE(CAM_INTF_META_FLASH_POWER,                  uint32_t,                    1);
    635     INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME,            int64_t,                     1);
    636     INCLUDE(CAM_INTF_META_FLASH_MODE,                   uint32_t,                    1);
    637     INCLUDE(CAM_INTF_META_FLASH_STATE,                  int32_t,                     1);
    638     INCLUDE(CAM_INTF_META_HOTPIXEL_MODE,                uint32_t,                    1);
    639     INCLUDE(CAM_INTF_META_LENS_APERTURE,                float,                       1);
    640     INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY,           float,                       1);
    641     INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH,            float,                       1);
    642     INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE,          float,                       1);
    643     INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE,             float,                       2);
    644     INCLUDE(CAM_INTF_META_LENS_STATE,                   cam_af_lens_state_t,         1);
    645     INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE,           uint32_t,                    1);
    646     INCLUDE(CAM_INTF_META_VIDEO_STAB_MODE,              uint32_t,                    1);
    647     INCLUDE(CAM_INTF_META_LENS_FOCUS_STATE,             uint32_t,                    1);
    648     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE,         uint32_t,                    1);
    649     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH,     uint32_t,                    1);
    650     INCLUDE(CAM_INTF_META_SCALER_CROP_REGION,           cam_crop_region_t,           1);
    651     INCLUDE(CAM_INTF_META_SCENE_FLICKER,                uint32_t,                    1);
    652     INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME,         int64_t,                     1);
    653     INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION,        int64_t,                     1);
    654     INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY,           int32_t,                     1);
    655     INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP,             int64_t,                     1);
    656     INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW,  int64_t,                     1);
    657     INCLUDE(CAM_INTF_META_SHADING_MODE,                 uint32_t,                    1);
    658     INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE,        uint32_t,                    1);
    659     INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE,         uint32_t,                    1);
    660     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,     uint32_t,                    1);
    661     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP,          cam_sharpness_map_t,         3);
    662     INCLUDE(CAM_INTF_META_TONEMAP_CURVES,               cam_rgb_tonemap_curves,      1);
    663     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP,             cam_lens_shading_map_t,      1);
    664     INCLUDE(CAM_INTF_META_AEC_INFO,                     cam_3a_params_t,             1);
    665     INCLUDE(CAM_INTF_META_SENSOR_INFO,                  cam_sensor_params_t,         1);
    666     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AE,                cam_ae_exif_debug_t,         1);
    667     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AWB,               cam_awb_exif_debug_t,        1);
    668     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AF,                cam_af_exif_debug_t,         1);
    669     INCLUDE(CAM_INTF_META_EXIF_DEBUG_ASD,               cam_asd_exif_debug_t,        1);
    670     INCLUDE(CAM_INTF_META_EXIF_DEBUG_STATS,             cam_stats_buffer_exif_debug_t, 1);
    671     INCLUDE(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE,       cam_auto_scene_t,            1);
    672     INCLUDE(CAM_INTF_PARM_EFFECT,                       uint32_t,                    1);
    673     /* Defining as int32_t so that this array is 4 byte aligned */
    674     INCLUDE(CAM_INTF_META_PRIVATE_DATA,                 int32_t,
    675             MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES / 4);
    676 
    677     /* Following are Params only and not metadata currently */
    678     INCLUDE(CAM_INTF_PARM_HAL_VERSION,                  int32_t,                     1);
    679     /* Shared between HAL1 and HAL3 */
    680     INCLUDE(CAM_INTF_PARM_ANTIBANDING,                  uint32_t,                    1);
    681     INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION,        int32_t,                     1);
    682     INCLUDE(CAM_INTF_PARM_EV_STEP,                      cam_rational_type_t,         1);
    683     INCLUDE(CAM_INTF_PARM_AEC_LOCK,                     uint32_t,                    1);
    684     INCLUDE(CAM_INTF_PARM_FPS_RANGE,                    cam_fps_range_t,             1);
    685     INCLUDE(CAM_INTF_PARM_AWB_LOCK,                     uint32_t,                    1);
    686     INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE,                uint32_t,                    1);
    687     INCLUDE(CAM_INTF_PARM_DIS_ENABLE,                   int32_t,                     1);
    688     INCLUDE(CAM_INTF_PARM_LED_MODE,                     int32_t,                     1);
    689     INCLUDE(CAM_INTF_META_LED_MODE_OVERRIDE,            uint32_t,                    1);
    690 
    691     /* HAL1 specific */
    692     /* read only */
    693     INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP,             int32_t,                     1);
    694     INCLUDE(CAM_INTF_PARM_EXPOSURE,                     int32_t,                     1);
    695     INCLUDE(CAM_INTF_PARM_SHARPNESS,                    int32_t,                     1);
    696     INCLUDE(CAM_INTF_PARM_CONTRAST,                     int32_t,                     1);
    697     INCLUDE(CAM_INTF_PARM_SATURATION,                   int32_t,                     1);
    698     INCLUDE(CAM_INTF_PARM_BRIGHTNESS,                   int32_t,                     1);
    699     INCLUDE(CAM_INTF_PARM_ISO,                          int32_t,                     1);
    700     INCLUDE(CAM_INTF_PARM_EXPOSURE_TIME,                uint64_t,                    1);
    701     INCLUDE(CAM_INTF_PARM_ZOOM,                         int32_t,                     1);
    702     INCLUDE(CAM_INTF_PARM_ROLLOFF,                      int32_t,                     1);
    703     INCLUDE(CAM_INTF_PARM_MODE,                         int32_t,                     1);
    704     INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE,                int32_t,                     1);
    705     INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE,              int32_t,                     1);
    706     INCLUDE(CAM_INTF_PARM_AEC_ROI,                      cam_set_aec_roi_t,           1);
    707     INCLUDE(CAM_INTF_PARM_AF_ROI,                       cam_roi_info_t,              1);
    708     INCLUDE(CAM_INTF_PARM_SCE_FACTOR,                   int32_t,                     1);
    709     INCLUDE(CAM_INTF_PARM_FD,                           cam_fd_set_parm_t,           1);
    710     INCLUDE(CAM_INTF_PARM_MCE,                          int32_t,                     1);
    711     INCLUDE(CAM_INTF_PARM_HFR,                          int32_t,                     1);
    712     INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION,             int32_t,                     1);
    713     INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE,              cam_denoise_param_t,         1);
    714     INCLUDE(CAM_INTF_PARM_TEMPORAL_DENOISE,             cam_denoise_param_t,         1);
    715     INCLUDE(CAM_INTF_PARM_HISTOGRAM,                    int32_t,                     1);
    716     INCLUDE(CAM_INTF_PARM_ASD_ENABLE,                   int32_t,                     1);
    717     INCLUDE(CAM_INTF_PARM_RECORDING_HINT,               int32_t,                     1);
    718     INCLUDE(CAM_INTF_PARM_HDR,                          cam_exp_bracketing_t,        1);
    719     INCLUDE(CAM_INTF_PARM_FRAMESKIP,                    int32_t,                     1);
    720     INCLUDE(CAM_INTF_PARM_ZSL_MODE,                     int32_t,                     1);
    721     INCLUDE(CAM_INTF_PARM_HDR_NEED_1X,                  int32_t,                     1);
    722     INCLUDE(CAM_INTF_PARM_LOCK_CAF,                     int32_t,                     1);
    723     INCLUDE(CAM_INTF_PARM_VIDEO_HDR,                    int32_t,                     1);
    724     INCLUDE(CAM_INTF_PARM_SENSOR_HDR,                   int32_t,                     1);
    725     INCLUDE(CAM_INTF_PARM_VT,                           int32_t,                     1);
    726     INCLUDE(CAM_INTF_PARM_GET_CHROMATIX,                tune_chromatix_t,            1);
    727     INCLUDE(CAM_INTF_PARM_SET_RELOAD_CHROMATIX,         tune_chromatix_t,            1);
    728     INCLUDE(CAM_INTF_PARM_GET_AFTUNE,                   tune_autofocus_t,            1);
    729     INCLUDE(CAM_INTF_PARM_SET_RELOAD_AFTUNE,            tune_autofocus_t,            1);
    730     INCLUDE(CAM_INTF_PARM_SET_AUTOFOCUSTUNING,          tune_actuator_t,             1);
    731     INCLUDE(CAM_INTF_PARM_SET_VFE_COMMAND,              tune_cmd_t,                  1);
    732     INCLUDE(CAM_INTF_PARM_SET_PP_COMMAND,               tune_cmd_t,                  1);
    733     INCLUDE(CAM_INTF_PARM_MAX_DIMENSION,                cam_dimension_t,             1);
    734     INCLUDE(CAM_INTF_PARM_RAW_DIMENSION,                cam_dimension_t,             1);
    735     INCLUDE(CAM_INTF_PARM_TINTLESS,                     int32_t,                     1);
    736     INCLUDE(CAM_INTF_PARM_WB_MANUAL,                    cam_manual_wb_parm_t,        1);
    737     INCLUDE(CAM_INTF_PARM_CDS_MODE,                     int32_t,                     1);
    738     INCLUDE(CAM_INTF_PARM_EZTUNE_CMD,                   cam_eztune_cmd_data_t,       1);
    739     INCLUDE(CAM_INTF_PARM_INT_EVT,                      cam_int_evt_params_t,        1);
    740     INCLUDE(CAM_INTF_PARM_RDI_MODE,                     int32_t,                     1);
    741     INCLUDE(CAM_INTF_PARM_BURST_NUM,                    uint32_t,                    1);
    742     INCLUDE(CAM_INTF_PARM_RETRO_BURST_NUM,              uint32_t,                    1);
    743     INCLUDE(CAM_INTF_PARM_BURST_LED_ON_PERIOD,          uint32_t,                    1);
    744     INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE,              int8_t,                      1);
    745     INCLUDE(CAM_INTF_PARM_TONE_MAP_MODE,                uint32_t,                    1);
    746 
    747     /* HAL3 specific */
    748     INCLUDE(CAM_INTF_META_STREAM_INFO,                  cam_stream_size_info_t,      1);
    749     INCLUDE(CAM_INTF_META_AEC_MODE,                     uint32_t,                    1);
    750     INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,       cam_trigger_t,               1);
    751     INCLUDE(CAM_INTF_META_AF_TRIGGER,                   cam_trigger_t,               1);
    752     INCLUDE(CAM_INTF_META_CAPTURE_INTENT,               uint32_t,                    1);
    753     INCLUDE(CAM_INTF_META_DEMOSAIC,                     int32_t,                     1);
    754     INCLUDE(CAM_INTF_META_SHARPNESS_STRENGTH,           int32_t,                     1);
    755     INCLUDE(CAM_INTF_META_GEOMETRIC_MODE,               uint32_t,                    1);
    756     INCLUDE(CAM_INTF_META_GEOMETRIC_STRENGTH,           uint32_t,                    1);
    757     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE,        uint32_t,                    1);
    758     INCLUDE(CAM_INTF_META_SHADING_STRENGTH,             uint32_t,                    1);
    759     INCLUDE(CAM_INTF_META_TONEMAP_MODE,                 uint32_t,                    1);
    760     INCLUDE(CAM_INTF_META_STREAM_ID,                    cam_stream_ID_t,             1);
    761     INCLUDE(CAM_INTF_PARM_STATS_DEBUG_MASK,             uint32_t,                    1);
    762     INCLUDE(CAM_INTF_PARM_STATS_AF_PAAF,                uint32_t,                    1);
    763     INCLUDE(CAM_INTF_PARM_FOCUS_BRACKETING,             cam_af_bracketing_t,         1);
    764     INCLUDE(CAM_INTF_PARM_FLASH_BRACKETING,             cam_flash_bracketing_t,      1);
    765     INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES,         double,                      3);
    766     INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS,        uint8_t,                     GPS_PROCESSING_METHOD_SIZE);
    767     INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP,           int64_t,                     1);
    768     INCLUDE(CAM_INTF_META_JPEG_ORIENTATION,             int32_t,                     1);
    769     INCLUDE(CAM_INTF_META_JPEG_QUALITY,                 uint32_t,                    1);
    770     INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY,           uint32_t,                    1);
    771     INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE,              cam_dimension_t,             1);
    772     INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA,            cam_test_pattern_data_t,     1);
    773     INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE,           cam_profile_tone_curve,      1);
    774     INCLUDE(CAM_INTF_META_OTP_WB_GRGB,                  float,                       1);
    775     INCLUDE(CAM_INTF_PARM_CAC,                          cam_aberration_mode_t,       1);
    776     INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT,            cam_neutral_col_point_t,     1);
    777     INCLUDE(CAM_INTF_PARM_ROTATION,                     cam_rotation_info_t,         1);
    778     INCLUDE(CAM_INTF_META_IMGLIB,                       cam_intf_meta_imglib_t,      1);
    779     INCLUDE(CAM_INTF_PARM_CAPTURE_FRAME_CONFIG,         cam_capture_frame_config_t,  1);
    780     INCLUDE(CAM_INTF_PARM_FLIP,                         int32_t,                     1);
    781     INCLUDE(CAM_INTF_META_USE_AV_TIMER,                 uint8_t,                     1);
    782     INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,    float,                       1);
    783     INCLUDE(CAM_INTF_META_LDAF_EXIF,                    uint32_t,                    2);
    784     INCLUDE(CAM_INTF_META_BLACK_LEVEL_SOURCE_PATTERN,   cam_black_level_metadata_t,  1);
    785     INCLUDE(CAM_INTF_META_BLACK_LEVEL_APPLIED_PATTERN,  cam_black_level_metadata_t,  1);
    786     INCLUDE(CAM_INTF_META_DAEMON_RESTART,               uint8_t,                     1);
    787     INCLUDE(CAM_INTF_META_HYBRID_AE,                    uint8_t,                     1);
    788     INCLUDE(CAM_INTF_META_ISP_DIGITAL_GAIN,             float,                       1);
    789 } metadata_data_t;
    790 
    791 /* Update clear_metadata_buffer() function when a new is_xxx_valid is added to
    792  * or removed from this structure */
    793 typedef struct {
    794     union{
    795         /* Hash table of 'is valid' flags */
    796         uint8_t         is_valid[CAM_INTF_PARM_MAX];
    797 
    798         /* Hash table of 'is required' flags for the GET PARAM */
    799         uint8_t         is_reqd[CAM_INTF_PARM_MAX];
    800     };
    801     metadata_data_t data;
    802     /*Tuning Data */
    803     uint8_t is_tuning_params_valid;
    804     tuning_params_t tuning_params;
    805 
    806     /* Mobicat Params */
    807     uint8_t is_mobicat_aec_params_valid;
    808     cam_3a_params_t mobicat_aec_params;
    809 
    810     /* Stats 3A Debug Params */
    811     uint8_t is_statsdebug_ae_params_valid;
    812     cam_ae_exif_debug_t statsdebug_ae_data;
    813 
    814     uint8_t is_statsdebug_awb_params_valid;
    815     cam_awb_exif_debug_t statsdebug_awb_data;
    816 
    817     uint8_t is_statsdebug_af_params_valid;
    818     cam_af_exif_debug_t statsdebug_af_data;
    819 
    820     uint8_t is_statsdebug_asd_params_valid;
    821     cam_asd_exif_debug_t statsdebug_asd_data;
    822 
    823     uint8_t is_statsdebug_stats_params_valid;
    824     cam_stats_buffer_exif_debug_t statsdebug_stats_buffer_data;
    825 } metadata_buffer_t;
    826 
    827 typedef metadata_buffer_t parm_buffer_t;
    828 
    829 #ifdef  __cplusplus
    830 extern "C" {
    831 #endif
    832 
    833 /* Update this inline function when a new is_xxx_valid is added to
    834  * or removed from metadata_buffer_t */
    835 static inline void clear_metadata_buffer(metadata_buffer_t *meta)
    836 {
    837     memset(meta->is_valid, 0, CAM_INTF_PARM_MAX);
    838     meta->is_tuning_params_valid = 0;
    839     meta->is_mobicat_aec_params_valid = 0;
    840     meta->is_statsdebug_ae_params_valid = 0;
    841     meta->is_statsdebug_awb_params_valid = 0;
    842     meta->is_statsdebug_af_params_valid = 0;
    843     meta->is_statsdebug_asd_params_valid = 0;
    844     meta->is_statsdebug_stats_params_valid = 0;
    845 }
    846 
    847 #ifdef  __cplusplus
    848 }
    849 #endif
    850 
    851 #endif /* __QCAMERA_INTF_H__ */
    852