Home | History | Annotate | Download | only in common
      1 /* Copyright (c) 2012-2017, 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 // System dependencies
     34 #include <string.h>
     35 #include <media/msmb_isp.h>
     36 
     37 // Camera dependencies
     38 #include "cam_types.h"
     39 
     40 #define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + MSM_CAMERA_PRIV_CMD_MAX)
     41 typedef enum {
     42     /* session based parameters */
     43     CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE,
     44     /* session based action: do auto focus.*/
     45     CAM_PRIV_DO_AUTO_FOCUS,
     46     /* session based action: cancel auto focus.*/
     47     CAM_PRIV_CANCEL_AUTO_FOCUS,
     48     /* session based action: prepare for snapshot.*/
     49     CAM_PRIV_PREPARE_SNAPSHOT,
     50     /* sync stream info.*/
     51     CAM_PRIV_STREAM_INFO_SYNC,
     52     /* stream based parameters*/
     53     CAM_PRIV_STREAM_PARM,
     54     /* start ZSL snapshot.*/
     55     CAM_PRIV_START_ZSL_SNAPSHOT,
     56     /* stop ZSL snapshot.*/
     57     CAM_PRIV_STOP_ZSL_SNAPSHOT,
     58     /* event for related sensors synchronization. */
     59     CAM_PRIV_DUAL_CAM_CMD,
     60     /* flush */
     61     CAM_PRIV_FLUSH
     62 } cam_private_ioctl_enum_t;
     63 
     64 typedef enum {
     65     /* start syncing for related cameras */
     66     CAM_SYNC_RELATED_SENSORS_ON = 1,
     67     /* stop syncing for related cameras */
     68     CAM_SYNC_RELATED_SENSORS_OFF
     69 } cam_sync_related_sensors_control_t;
     70 
     71 typedef enum {
     72     /* Driving camera of the related camera sub-system */
     73     /* Certain features are enabled only for primary camera
     74        such as display mode for preview, autofocus etc
     75        In certain configurations for eg. when optical zoom
     76        limit is reached, Aux Camera would become
     77        the driving camera and there will be role switch.*/
     78     CAM_MODE_PRIMARY = 0,
     79     /* Non-driving camera of the related camera sub-system
     80        no display mode set for secondary camera */
     81     CAM_MODE_SECONDARY
     82 } cam_sync_mode_t;
     83 
     84 /*Enum to inform about camera type in dual camera use-cases*/
     85 typedef enum {
     86     CAM_ROLE_DEFAULT,
     87     CAM_ROLE_BAYER,
     88     CAM_ROLE_MONO,
     89     CAM_ROLE_WIDE,
     90     CAM_ROLE_TELE
     91 } cam_dual_camera_role_t;
     92 
     93 /* Enum to define different low performance modes in dual camera*/
     94 typedef enum {
     95     CAM_PERF_NONE,
     96     CAM_PERF_SENSOR_SUSPEND,
     97     CAM_PERF_ISPIF_FRAME_DROP,
     98     CAM_PERF_ISPIF_FRAME_SKIP,
     99     CAM_PERF_STATS_FPS_CONTROL
    100 } cam_dual_camera_perf_mode_t;
    101 
    102 /*Enum to inform about camera type in dual camera use-cases*/
    103 typedef enum {
    104     CAM_DEFER_DEFAULT,
    105     CAM_DEFER_START,
    106     CAM_DEFER_PROCESS,
    107     CAM_DEFER_FLUSH
    108 } cam_dual_camera_defer_cmd_t;
    109 
    110 /* Payload for sending bundling info to backend */
    111 typedef struct {
    112     cam_sync_related_sensors_control_t sync_control;
    113     cam_sync_type_t type;
    114     cam_sync_mode_t mode;
    115     cam_3a_sync_mode_t sync_3a_mode;
    116     cam_dual_camera_role_t cam_role;
    117     /* session Id of the other camera session
    118        Linking will be done with this session in the
    119        backend */
    120     uint32_t related_sensor_session_id;
    121     uint8_t is_frame_sync_enabled;
    122     /*Low power mode type. Static info per device*/
    123     cam_dual_camera_perf_mode_t perf_mode;
    124     /*flag indicating if hw-sync is enabled*/
    125     uint8_t is_hw_sync_enabled;
    126 } cam_dual_camera_bundle_info_t;
    127 typedef cam_dual_camera_bundle_info_t cam_sync_related_sensors_event_info_t;
    128 
    129 /* Structrue to update master camera info in dual camera case*/
    130 typedef struct {
    131     cam_sync_mode_t mode;
    132 } cam_dual_camera_master_info_t;
    133 
    134 /* Structrue to control performance info in dual camera case*/
    135 typedef struct {
    136     cam_dual_camera_perf_mode_t perf_mode; /*Control perf using FPS if set*/
    137     uint8_t enable;  /*Enable or diable Low power mode*/
    138     uint8_t priority; /*Can be used to make LPM forcefully*/
    139 } cam_dual_camera_perf_control_t;
    140 
    141 /* dual camera event payload */
    142 typedef struct {
    143     cam_dual_camera_cmd_type cmd_type; /*dual camera command type*/
    144 
    145     /*Payload to carry command info*/
    146     union {
    147         cam_dual_camera_bundle_info_t  bundle_info;
    148         cam_dual_camera_master_info_t  mode;
    149         cam_dual_camera_perf_control_t value;
    150         cam_dual_camera_defer_cmd_t defer_cmd;
    151     };
    152 } cam_dual_camera_cmd_info_t;
    153 
    154 /* Related camera sensor specific calibration data */
    155 // Align bytes according to API document.
    156 #pragma pack(2)
    157 typedef struct {
    158     /* Focal length in pixels @ calibration resolution.*/
    159     float       normalized_focal_length;
    160     /* Native sensor resolution W that was used to capture calibration image */
    161     uint16_t    native_sensor_resolution_width;
    162     /* Native sensor resolution H that was used to capture calibration image */
    163     uint16_t    native_sensor_resolution_height;
    164     /* Image size W used internally by calibration tool */
    165     uint16_t    calibration_sensor_resolution_width;
    166     /* Image size H used internally by calibration tool */
    167     uint16_t    calibration_sensor_resolution_height;
    168     /* Focal length ratio @ Calibration */
    169     float       focal_length_ratio;
    170 }cam_related_sensor_calibration_data_t;
    171 #pragma pack()
    172 
    173 /* Related Camera System Calibration data
    174    Calibration data for the entire related cam sub-system is
    175    in a shared EEPROM. We have 2 fields which are specific to
    176    each sensor followed by a set of common calibration of the
    177    entire related cam system*/
    178 // Align bytes according to API document.
    179 #pragma pack(2)
    180 typedef struct {
    181     /* Version information */
    182     uint32_t    calibration_format_version;
    183     /* Main Camera Sensor specific calibration */
    184     cam_related_sensor_calibration_data_t  main_cam_specific_calibration;
    185     /* Aux Camera Sensor specific calibration */
    186     cam_related_sensor_calibration_data_t  aux_cam_specific_calibration;
    187     /* Relative viewpoint matching matrix w.r.t Main */
    188     float      relative_rotation_matrix[RELCAM_CALIB_ROT_MATRIX_MAX];
    189     /* Relative geometric surface description parameters */
    190     float      relative_geometric_surface_parameters[
    191             RELCAM_CALIB_SURFACE_PARMS_MAX];
    192     /* Relative offset of sensor center from optical axis along horizontal dimension */
    193     float      relative_principle_point_x_offset;
    194     /* Relative offset of sensor center from optical axis along vertical dimension */
    195     float      relative_principle_point_y_offset;
    196     /* 0=Main Camera is on the left of Aux; 1=Main Camera is on the right of Aux */
    197     uint16_t   relative_position_flag;
    198     /* Camera separation in mm */
    199     float      relative_baseline_distance;
    200     /* main sensor setting during cal: 0-none, 1-hor-mirror, 2-ver-flip, 3-both */
    201     uint16_t   main_sensor_mirror_flip_setting;
    202     /* aux sensor setting during cal: 0-none, 1-hor-mirror, 2-ver-flip, 3-both */
    203     uint16_t   aux_sensor_mirror_flip_setting;
    204     /* module orientation during cal: 0-sensors in landscape, 1-sensors in portrait */
    205     uint16_t   module_orientation_during_calibration;
    206     /* cal images required rotation: 0-no, 1-90 degrees right, 2-90 degrees left */
    207     uint16_t   rotation_flag;
    208     /* AEC sync OTP data */
    209     /* AEC sync brightness ration. Fixed Point Q10*/
    210     int16_t    brightness_ratio;
    211     /* Reference aux gain value obtained from setup stage and used during calibration stage */
    212     /* Fixed Point Q10 */
    213     int16_t    ref_aux_gain;
    214     /* Reference aux line count obtained from setup stage and used during calibration stage */
    215     uint16_t   ref_aux_linecount;
    216     /* Reference master gain value obtained from setup stage and used during calibration stage */
    217     /* Fixed Point Q10 */
    218     int16_t    ref_master_gain;
    219     /* Reference master line count obtained from setup stage and used during calibration stage */
    220     uint16_t   ref_master_linecount;
    221     /* Reference master color temperature */
    222     uint16_t   ref_master_color_temperature;
    223     /* Reserved for future use */
    224     float      reserved[RELCAM_CALIB_RESERVED_MAX];
    225     void       *dc_otp_params;
    226     int        dc_otp_size; /* in bytes */
    227 } cam_related_system_calibration_data_t;
    228 #pragma pack()
    229 
    230 typedef struct {
    231   uint32_t default_sensor_flip;
    232   uint32_t sensor_mount_angle;
    233   cam_related_system_calibration_data_t otp_calibration_data;
    234 } cam_jpeg_metadata_t;
    235 
    236 /* capability struct definition for HAL 1*/
    237 struct cam_capability;
    238 typedef struct cam_capability{
    239     cam_hal_version_t version;
    240 
    241     cam_position_t position;                                /* sensor position: front, back */
    242 
    243     uint8_t auto_hdr_supported;
    244 
    245     uint16_t isWnrSupported;
    246     /* supported iso modes */
    247     size_t supported_iso_modes_cnt;
    248     cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX];
    249 
    250     /* supported flash modes */
    251     size_t supported_flash_modes_cnt;
    252     cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX];
    253 
    254     size_t zoom_ratio_tbl_cnt;                              /* table size for zoom ratios */
    255     uint32_t zoom_ratio_tbl[MAX_ZOOMS_CNT];                 /* zoom ratios table */
    256 
    257     /* supported effect modes */
    258     size_t supported_effects_cnt;
    259     cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX];
    260 
    261     /* supported scene modes */
    262     size_t supported_scene_modes_cnt;
    263     cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX];
    264 
    265     /* supported auto exposure modes */
    266     size_t supported_aec_modes_cnt;
    267     cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX];
    268 
    269     size_t fps_ranges_tbl_cnt;                              /* fps ranges table size */
    270     cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT];          /* fps ranges table */
    271 
    272     /* supported antibanding modes */
    273     size_t supported_antibandings_cnt;
    274     cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX];
    275 
    276     /* supported white balance modes */
    277     size_t supported_white_balances_cnt;
    278     cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX];
    279 
    280     /* Capability list of supported insensor HDR types
    281      * Backend is expected to fill in all the supported types and set appropriate
    282      * count, see cam_sensor_hdr_type_t for valid types
    283     */
    284     size_t supported_sensor_hdr_types_cnt;
    285     cam_sensor_hdr_type_t supported_sensor_hdr_types[CAM_SENSOR_HDR_MAX];
    286 
    287     /* supported manual wb cct */
    288     int32_t min_wb_cct;
    289     int32_t max_wb_cct;
    290 
    291     /* supported manual wb rgb gains */
    292     float min_wb_gain;
    293     float max_wb_gain;
    294 
    295     /* supported focus modes */
    296     size_t supported_focus_modes_cnt;
    297     cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX];
    298 
    299     /* supported manual focus position */
    300     float min_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
    301     float max_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
    302 
    303     int32_t exposure_compensation_min;       /* min value of exposure compensation index */
    304     int32_t exposure_compensation_max;       /* max value of exposure compensation index */
    305     int32_t exposure_compensation_default;   /* default value of exposure compensation index */
    306     float exposure_compensation_step;
    307     cam_rational_type_t exp_compensation_step;    /* exposure compensation step value */
    308 
    309     uint8_t video_stablization_supported; /* flag id video stablization is supported */
    310 
    311     size_t picture_sizes_tbl_cnt;                           /* picture sizes table size */
    312     cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT];       /* picture sizes table */
    313     /* The minimum frame duration that is supported for each
    314      * resolution in availableProcessedSizes. Should correspond
    315      * to the frame duration when only that processed stream
    316      * is active, with all processing set to FAST */
    317     int64_t picture_min_duration[MAX_SIZES_CNT];
    318 
    319     /* capabilities specific to HAL 1 */
    320 
    321     int32_t modes_supported;                                /* mask of modes supported: 2D, 3D */
    322     uint32_t sensor_mount_angle;                            /* sensor mount angle */
    323 
    324     float focal_length;                                     /* focal length */
    325     float hor_view_angle;                                   /* horizontal view angle */
    326     float ver_view_angle;                                   /* vertical view angle */
    327     cam_lens_type_t lens_type;                              /*Lens type info - Wide, Tele*/
    328 
    329     size_t preview_sizes_tbl_cnt;                           /* preview sizes table size */
    330     cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT];       /* preiew sizes table */
    331 
    332     size_t video_sizes_tbl_cnt;                             /* video sizes table size */
    333     cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT];         /* video sizes table */
    334 
    335 
    336     size_t livesnapshot_sizes_tbl_cnt;                      /* livesnapshot sizes table size */
    337     cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
    338 
    339     size_t vhdr_livesnapshot_sizes_tbl_cnt;                 /* vhdr_livesnapshot sizes table size */
    340     cam_dimension_t vhdr_livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* vhdr_livesnapshot sizes table */
    341 
    342     size_t hfr_tbl_cnt;                                     /* table size for HFR */
    343     cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX];               /* HFR table */
    344 
    345     size_t zzhdr_sizes_tbl_cnt;                             /* Number of resolutions in zzHDR mode*/
    346     cam_dimension_t zzhdr_sizes_tbl[MAX_SIZES_CNT];         /* Table for ZZHDR supported sizes */
    347 
    348     size_t supported_quadra_cfa_dim_cnt;              /* Number of resolutions in Quadra CFA mode */
    349     cam_dimension_t quadra_cfa_dim[MAX_SIZES_CNT];    /* Table for Quadra CFA supported sizes */
    350     cam_format_t quadra_cfa_format;                   /* Quadra CFA output format */
    351     uint32_t is_remosaic_lib_present;                 /* Flag indicating if remosaic lib present */
    352 
    353     /* supported preview formats */
    354     size_t supported_preview_fmt_cnt;
    355     cam_format_t supported_preview_fmts[CAM_FORMAT_MAX];
    356 
    357     /* supported picture formats */
    358     size_t supported_picture_fmt_cnt;
    359     cam_format_t supported_picture_fmts[CAM_FORMAT_MAX];
    360 
    361     uint8_t max_downscale_factor;
    362 
    363     /* dimension and supported output format of raw dump from camif */
    364     size_t supported_raw_dim_cnt;
    365     cam_dimension_t raw_dim[MAX_SIZES_CNT];
    366     size_t supported_raw_fmt_cnt;
    367     cam_format_t supported_raw_fmts[CAM_FORMAT_MAX];
    368     /* The minimum frame duration that is supported for above
    369        raw resolution */
    370     int64_t raw_min_duration[MAX_SIZES_CNT];
    371 
    372     /* 3A version*/
    373     cam_q3a_version_t q3a_version;
    374     /* supported focus algorithms */
    375     size_t supported_focus_algos_cnt;
    376     cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX];
    377 
    378 
    379     uint8_t auto_wb_lock_supported;       /* flag if auto white balance lock is supported */
    380     uint8_t zoom_supported;               /* flag if zoom is supported */
    381     uint8_t smooth_zoom_supported;        /* flag if smooth zoom is supported */
    382     uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */
    383     uint8_t video_snapshot_supported;     /* flag if video snapshot is supported */
    384 
    385     uint8_t max_num_roi;                  /* max number of roi can be detected */
    386     uint8_t max_num_focus_areas;          /* max num of focus areas */
    387     uint8_t max_num_metering_areas;       /* max num opf metering areas */
    388     uint8_t max_zoom_step;                /* max zoom step value */
    389 
    390     /* QCOM specific control */
    391     cam_control_range_t brightness_ctrl;  /* brightness */
    392     cam_control_range_t sharpness_ctrl;   /* sharpness */
    393     cam_control_range_t contrast_ctrl;    /* contrast */
    394     cam_control_range_t saturation_ctrl;  /* saturation */
    395     cam_control_range_t sce_ctrl;         /* skintone enhancement factor */
    396 
    397     /* QCOM HDR specific control. Indicates number of frames and exposure needs for the frames */
    398     cam_hdr_bracketing_info_t hdr_bracketing_setting;
    399 
    400     cam_feature_mask_t qcom_supported_feature_mask; /* mask of qcom specific features supported:
    401                                                      * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/
    402     cam_padding_info_t padding_info;      /* padding information from PP */
    403     uint32_t min_num_pp_bufs;             /* minimum number of buffers needed by postproc module */
    404     cam_format_t rdi_mode_stream_fmt;  /* stream format supported in rdi mode */
    405 
    406     /* capabilities specific to HAL 3 */
    407 
    408     float min_focus_distance;
    409     float hyper_focal_distance;
    410 
    411     float focal_lengths[CAM_FOCAL_LENGTHS_MAX];
    412     uint8_t focal_lengths_count;
    413 
    414     /* Needs to be regular f number instead of APEX */
    415     float apertures[CAM_APERTURES_MAX];
    416     uint8_t apertures_count;
    417 
    418     float filter_densities[CAM_FILTER_DENSITIES_MAX];
    419     uint8_t filter_densities_count;
    420 
    421     cam_optical_stab_modes_t optical_stab_modes[CAM_OPT_STAB_MAX];
    422     uint8_t optical_stab_modes_count;
    423 
    424     cam_dimension_t lens_shading_map_size;
    425 
    426     cam_dimension_t geo_correction_map_size;
    427     float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH *
    428               CAM_MAX_MAP_HEIGHT];
    429 
    430     float lens_position[3];
    431 
    432     /* nano seconds */
    433     int64_t exposure_time_range[EXPOSURE_TIME_RANGE_CNT];
    434 
    435     /* nano seconds */
    436     int64_t max_frame_duration;
    437 
    438     cam_color_filter_arrangement_t color_arrangement;
    439     uint8_t num_color_channels;
    440 
    441     /* parameters required to calculate S and O co-efficients */
    442     double gradient_S;
    443     double offset_S;
    444     double gradient_O;
    445     double offset_O;
    446 
    447     float sensor_physical_size[SENSOR_PHYSICAL_SIZE_CNT];
    448 
    449     /* Dimensions of full pixel array, possibly including
    450        black calibration pixels */
    451     cam_dimension_t pixel_array_size;
    452     /* Area of raw data which corresponds to only active
    453        pixels; smaller or equal to pixelArraySize. */
    454     cam_rect_t active_array_size;
    455 
    456     /* Maximum raw value output by sensor */
    457     int32_t white_level;
    458 
    459     /* A fixed black level offset for each of the Bayer
    460        mosaic channels in RGGB order*/
    461     int32_t black_level_pattern[BLACK_LEVEL_PATTERN_CNT];
    462 
    463     /* Time taken before flash can fire again in nano secs */
    464     int64_t flash_charge_duration;
    465 
    466     /* flash firing power */
    467     size_t supported_flash_firing_level_cnt;
    468     cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX];
    469 
    470     /* Flash Firing Time */
    471     int64_t flash_firing_time;
    472 
    473     /* Flash Ciolor Temperature */
    474     uint8_t flash_color_temp;
    475 
    476     /* Flash max Energy */
    477     uint8_t flash_max_energy;
    478 
    479     /* Maximum number of supported points in the tonemap
    480        curve */
    481     int32_t max_tone_map_curve_points;
    482 
    483     /* supported formats */
    484     size_t supported_scalar_format_cnt;
    485     cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX];
    486 
    487     uint32_t max_face_detection_count;
    488     uint8_t face_bsgc;
    489 
    490     uint8_t histogram_supported;
    491     /* Number of histogram buckets supported */
    492     int32_t histogram_size;
    493     /* Maximum value possible for a histogram bucket */
    494     int32_t max_histogram_count;
    495 
    496     cam_dimension_t sharpness_map_size;
    497 
    498     /* Maximum value possible for a sharpness map region */
    499     int32_t max_sharpness_map_value;
    500 
    501     /*Autoexposure modes for camera 3 api*/
    502     size_t supported_ae_modes_cnt;
    503     cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX];
    504 
    505 
    506     cam_sensitivity_range_t sensitivity_range;
    507     int32_t max_analog_sensitivity;
    508 
    509     /* ISP digital gain */
    510     cam_sensitivity_range_t isp_sensitivity_range;
    511 
    512     /* picture sizes need scale*/
    513     cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX];
    514     size_t scale_picture_sizes_cnt;
    515     cam_dimension_t scale_picture_sizes[MAX_SCALE_SIZES_CNT];
    516 
    517     uint8_t flash_available;
    518 
    519     cam_rational_type_t base_gain_factor;    /* sensor base gain factor */
    520     /* AF Bracketing info */
    521     cam_af_bracketing_t  ubifocus_af_bracketing_need;
    522     cam_af_bracketing_t  refocus_af_bracketing_need;
    523     /* opti Zoom info */
    524     cam_opti_zoom_t      opti_zoom_settings_need;
    525     /* still more info */
    526     cam_still_more_t  stillmore_settings_need;
    527     /* chroma flash info */
    528     cam_chroma_flash_t chroma_flash_settings_need;
    529 
    530     cam_rational_type_t forward_matrix[3][3];
    531     cam_rational_type_t color_transform[3][3];
    532 
    533     uint8_t focus_dist_calibrated;
    534     uint8_t supported_test_pattern_modes_cnt;
    535     cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT];
    536 
    537     int64_t stall_durations[MAX_SIZES_CNT];
    538 
    539     cam_illuminat_t reference_illuminant1;
    540     cam_illuminat_t reference_illuminant2;
    541 
    542     int64_t jpeg_stall_durations[MAX_SIZES_CNT];
    543     int64_t raw16_stall_durations[MAX_SIZES_CNT];
    544     cam_rational_type_t forward_matrix1[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
    545     cam_rational_type_t forward_matrix2[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
    546     cam_rational_type_t color_transform1[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
    547     cam_rational_type_t color_transform2[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
    548     cam_rational_type_t calibration_transform1[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
    549     cam_rational_type_t calibration_transform2[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
    550     uint16_t isCacSupported;
    551 
    552     cam_opaque_raw_format_t opaque_raw_fmt;
    553 
    554     /* true Portrait info */
    555     cam_true_portrait_t  true_portrait_settings_need;
    556 
    557     /* Sensor type information */
    558     cam_sensor_type_t sensor_type;
    559 
    560     cam_aberration_mode_t aberration_modes[CAM_COLOR_CORRECTION_ABERRATION_MAX];
    561     uint32_t aberration_modes_count;
    562 
    563     /* Can the sensor timestamp be compared to
    564      * timestamps from other sub-systems (gyro, accelerometer etc.) */
    565     uint8_t isTimestampCalibrated;
    566 
    567     /* Max size supported by ISP viewfinder path */
    568     cam_dimension_t max_viewfinder_size;
    569 
    570     /* Analysis buffer requirements */
    571     cam_analysis_info_t analysis_info[CAM_ANALYSIS_INFO_MAX];
    572 
    573     /* This is set to 'true' if sensor cannot guarantee per frame control */
    574     /* Default value of this capability is 'false' indicating per-frame */
    575     /* control is supported */
    576     uint8_t no_per_frame_control_support;
    577 
    578     /* EIS information */
    579     uint8_t supported_is_types_cnt;
    580     uint32_t supported_is_types[IS_TYPE_MAX];
    581     /*for each type, specify the margin needed. Margin will be
    582       the decimal representation of a percentage
    583       ex: 10% margin = 0.1 */
    584     float supported_is_type_margins[IS_TYPE_MAX];
    585 
    586     /* Max cpp batch size */
    587     uint8_t max_batch_bufs_supported;
    588     uint32_t buf_alignment;
    589     uint32_t min_stride;
    590     uint32_t min_scanline;
    591     uint8_t flash_dev_name[QCAMERA_MAX_FILEPATH_LENGTH];
    592     uint8_t eeprom_version_info[MAX_EEPROM_VERSION_INFO_LEN];
    593 
    594     /* maximum pixel bandwidth shared between cameras */
    595     uint64_t max_pixel_bandwidth;
    596 
    597     /* Array of K integers, where K%4==0,
    598       as a list of rectangles in the pixelArray co-ord system
    599       left, top, right, bottom */
    600     int32_t optical_black_regions[MAX_OPTICAL_BLACK_REGIONS * 4];
    601     /* Count is K/4 */
    602     uint8_t optical_black_region_count;
    603 
    604     /* hot pixel */
    605     uint8_t hotPixel_mode;
    606     uint32_t hotPixel_count;
    607     cam_coordinate_type_t hotPixelMap[512];
    608 
    609     /* supported instant capture/AEC convergence modes */
    610     size_t supported_instant_aec_modes_cnt;
    611     cam_aec_convergence_type supported_instant_aec_modes[CAM_AEC_CONVERGENCE_MAX];
    612 
    613     /* Dual cam calibration data */
    614     cam_related_system_calibration_data_t related_cam_calibration;
    615 
    616     /* Maximum degree of rotation along X axis for tele sensor with respect to the wide sensor*/
    617     float      max_roll_degrees;
    618     /* Maximum degree of rotation along Y axis for tele sensor with respect to the wide sensor*/
    619     float      max_pitch_degrees;
    620     /* Maximum degree of rotation along Z axis for tele sensor with respect to the wide sensor*/
    621     float      max_yaw_degrees;
    622 
    623     /* Pixel pitch in micrometer*/
    624     float      pixel_pitch_um;
    625 
    626     /* Meta_RAW capability */
    627     uint8_t meta_raw_channel_count;
    628     uint8_t vc[MAX_SIZES_CNT];
    629     uint8_t dt[MAX_SIZES_CNT];
    630     cam_format_t supported_meta_raw_fmts[CAM_FORMAT_MAX];
    631     cam_dimension_t raw_meta_dim[MAX_SIZES_CNT];
    632     cam_sub_format_type_t sub_fmt[CAM_FORMAT_SUBTYPE_MAX];
    633     /* Supported IR Mode */
    634     size_t supported_ir_mode_cnt;
    635     cam_ir_mode_type_t supported_ir_modes[CAM_IR_MODE_MAX];
    636 
    637     /* Supported binning correction Mode */
    638     size_t supported_binning_correction_mode_cnt;
    639     cam_binning_correction_mode_t supported_binning_modes[CAM_BINNING_CORRECTION_MODE_MAX];
    640 
    641     /*camera index*/
    642     uint32_t camera_index;
    643 
    644     /*main and aux cam capability*/
    645     struct cam_capability *main_cam_cap;
    646     struct cam_capability *aux_cam_cap;
    647     cam_sync_type_t cam_sensor_mode;
    648 
    649     /*Available Spatial Alignment solutions*/
    650     uint32_t avail_spatial_align_solns;
    651 
    652     /* Whether camera timestamp is calibrated with sensor */
    653     uint8_t timestamp_calibrated;
    654 
    655     /*PDAF calibration data*/
    656     cam_pd_calibration_t pdaf_cal;
    657 
    658     /*White balance calibration data*/
    659     cam_wb_calibration_t wb_cal;
    660 
    661 } cam_capability_t;
    662 
    663 typedef enum {
    664     CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS,
    665     CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE,
    666     CAM_STREAM_PARAM_TYPE_SET_FLIP = CAM_INTF_PARM_STREAM_FLIP,
    667     CAM_STREAM_PARAM_TYPE_GET_OUTPUT_CROP = CAM_INTF_PARM_GET_OUTPUT_CROP,
    668     CAM_STREAM_PARAM_TYPE_GET_IMG_PROP = CAM_INTF_PARM_GET_IMG_PROP,
    669     CAM_STREAM_PARAM_TYPE_REQUEST_FRAMES = CAM_INTF_PARM_REQUEST_FRAMES,
    670     CAM_STREAM_PARAM_TYPE_REQUEST_OPS_MODE = CAM_INTF_PARM_REQUEST_OPS_MODE,
    671     CAM_STREAM_PARAM_TYPE_FLUSH_FRAME = CAM_INTF_PARM_FLUSH_FRAMES,
    672     CAM_STREAM_PARAM_TYPE_MAX
    673 } cam_stream_param_type_e;
    674 
    675 typedef struct {
    676     uint32_t buf_index;           /* buf index to the source frame buffer that needs reprocess,
    677                                     (assume buffer is already mapped)*/
    678     uint32_t frame_idx;           /* frame id of source frame to be reprocessed */
    679     int32_t ret_val;              /* return value from reprocess. Could have different meanings.
    680                                      i.e., faceID in the case of face registration. */
    681     uint8_t meta_present;         /* if there is meta data associated with this reprocess frame */
    682     uint32_t meta_stream_handle;  /* meta data stream ID. only valid if meta_present != 0 */
    683     uint32_t meta_buf_index;      /* buf index to meta data buffer. only valid if meta_present != 0 */
    684 
    685     uint8_t is_offline_meta_bypass;
    686 
    687     /* opaque metadata required for reprocessing */
    688     int32_t private_data[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES];
    689     cam_rect_t crop_rect;
    690     uint8_t is_uv_subsampled;
    691 } cam_reprocess_param;
    692 
    693 typedef struct {
    694     uint32_t flip_mask;
    695 } cam_flip_mode_t;
    696 
    697 #define IMG_NAME_SIZE 32
    698 typedef struct {
    699     cam_rect_t crop;  /* crop info for the image */
    700     cam_dimension_t input; /* input dimension of the image */
    701     cam_dimension_t output; /* output dimension of the image */
    702     char name[IMG_NAME_SIZE]; /* optional name of the ext*/
    703     cam_format_t format; /* image format */
    704 } cam_stream_img_prop_t;
    705 
    706 typedef struct {
    707     uint8_t enableStream; /*0 - stop and 1-start */
    708 } cam_request_frames;
    709 
    710 typedef struct {
    711     cam_stream_param_type_e type;
    712     union {
    713         cam_reprocess_param reprocess;  /* do reprocess */
    714         cam_bundle_config_t bundleInfo; /* set bundle info*/
    715         cam_flip_mode_t flipInfo;       /* flip mode */
    716         cam_crop_data_t outputCrop;     /* output crop for current frame */
    717         cam_stream_img_prop_t imgProp;  /* image properties of current frame */
    718         cam_request_frames frameRequest; /*do TNR process*/
    719         cam_perf_mode_t perf_mode;       /*request operational mode*/
    720     };
    721 } cam_stream_parm_buffer_t;
    722 
    723 /* stream info */
    724 typedef struct cam_stream_info {
    725     /* stream ID from server */
    726     uint32_t stream_svr_id;
    727 
    728     /* stream type */
    729     cam_stream_type_t stream_type;
    730 
    731     /* image format */
    732     cam_format_t fmt;
    733 
    734     /* image dimension */
    735     cam_dimension_t dim;
    736 
    737     /* buffer plane information, will be calc based on stream_type, fmt,
    738        dim, and padding_info(from stream config). Info including:
    739        offset_x, offset_y, stride, scanline, plane offset */
    740     cam_stream_buf_plane_info_t buf_planes;
    741 
    742     /* number of stream bufs will be allocated */
    743     uint32_t num_bufs;
    744 
    745     /* number of stream bufs allocated for this stream*/
    746     uint32_t buf_cnt;
    747 
    748     /* streaming type */
    749     cam_streaming_mode_t streaming_mode;
    750 
    751     /* num of frames needs to be generated.
    752      * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */
    753     uint8_t num_of_burst;
    754 
    755     /* num of frames in one batch.
    756      * only valid when streaming_mode = CAM_STREAMING_MODE_BATCH */
    757     cam_stream_user_buf_info_t user_buf_info;
    758 
    759     /* stream specific pp config */
    760     cam_pp_feature_config_t pp_config;
    761 
    762     /* this section is valid if offline reprocess type stream */
    763     cam_stream_reproc_config_t reprocess_config;
    764 
    765     cam_stream_parm_buffer_t parm_buf;    /* stream based parameters */
    766 
    767     uint8_t dis_enable;
    768 
    769     /* Image Stabilization type */
    770     cam_is_type_t is_type;
    771 
    772     /* NR mode */
    773     uint8_t nr_mode;
    774 
    775     /* Signifies Secure stream mode */
    776     cam_stream_secure_t is_secure;
    777 
    778     /* Preferred Performance mode */
    779     cam_perf_mode_t perf_mode;
    780 
    781     /* if frames will not be received */
    782     uint8_t noFrameExpected;
    783 
    784     /* DT for this stream */
    785     int32_t dt;
    786 
    787     /* VC for this stream */
    788     int32_t vc;
    789 
    790    /* Subformat for this stream */
    791     cam_sub_format_type_t sub_format_type;
    792 
    793     /*Stream info for Slave Stream*/
    794     struct cam_stream_info *aux_str_info;
    795 
    796     /* Cache ops for this stream */
    797     cam_stream_cache_ops_t cache_ops;
    798 } cam_stream_info_t;
    799 
    800 /*****************************************************************************
    801  *                 Code for Domain Socket Based Parameters                   *
    802  ****************************************************************************/
    803 #define INCLUDE(PARAM_ID,DATATYPE,COUNT)  \
    804         DATATYPE member_variable_##PARAM_ID[ COUNT ]
    805 
    806 #define POINTER_OF_META(META_ID, TABLE_PTR) \
    807         ((NULL != TABLE_PTR) ? \
    808             (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : (NULL))
    809 
    810 #define SIZE_OF_PARAM(META_ID, TABLE_PTR) \
    811         sizeof(TABLE_PTR->data.member_variable_##META_ID)
    812 
    813 #define IF_META_AVAILABLE(META_TYPE, META_PTR_NAME, META_ID, TABLE_PTR) \
    814         META_TYPE *META_PTR_NAME = \
    815         (((NULL != TABLE_PTR) && (TABLE_PTR->is_valid[META_ID])) ? \
    816             (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : \
    817             (NULL)); \
    818         if (NULL != META_PTR_NAME) \
    819 
    820 #define ADD_SET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID, DATA) \
    821     ((NULL != TABLE_PTR) ? \
    822     ((TABLE_PTR->data.member_variable_##META_ID[ 0 ] = DATA), \
    823     (TABLE_PTR->is_valid[META_ID] = 1), (0)) : \
    824     ((LOGE("Unable to set metadata TABLE_PTR:%p META_ID:%d", \
    825             TABLE_PTR, META_ID)), (-1))) \
    826 
    827 #define ADD_SET_PARAM_ENTRY_TO_BATCH_FOR_AUX(TABLE_PTR, AUX_TABLE_PTR, META_ID) \
    828     ((NULL != TABLE_PTR || (NULL != AUX_TABLE_PTR)) ? \
    829     ((AUX_TABLE_PTR->data.member_variable_##META_ID[ 0 ] = TABLE_PTR->data.member_variable_##META_ID[ 0 ]), \
    830     (AUX_TABLE_PTR->is_valid[META_ID] = 1), (0)) : \
    831     ((LOGE("Unable to set metadata AUX_TABLE_PTR:%p META_ID:%d", \
    832             AUX_TABLE_PTR, META_ID)), (-1))) \
    833 
    834 #define ADD_SET_PARAM_ARRAY_TO_BATCH(TABLE_PTR, META_ID, PDATA, COUNT, RCOUNT) \
    835 { \
    836     if ((NULL != TABLE_PTR) && \
    837             (0 < COUNT) && \
    838             ((sizeof(TABLE_PTR->data.member_variable_##META_ID) / \
    839             sizeof(TABLE_PTR->data.member_variable_##META_ID[ 0 ])) \
    840             >= COUNT))  { \
    841         for (size_t _i = 0; _i < COUNT ; _i++) { \
    842             TABLE_PTR->data.member_variable_##META_ID[ _i ] = PDATA [ _i ]; \
    843         } \
    844         TABLE_PTR->is_valid[META_ID] = 1; \
    845         RCOUNT = COUNT; \
    846     } else { \
    847         LOGE("Unable to set metadata TABLE_PTR:%p META_ID:%d COUNT:%zu", \
    848               TABLE_PTR, META_ID, COUNT); \
    849         RCOUNT = 0; \
    850     } \
    851 }
    852 
    853 #define ADD_GET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID) \
    854 { \
    855     if (NULL != TABLE_PTR) { \
    856         TABLE_PTR->is_reqd[META_ID] = 1; \
    857     } else { \
    858         LOGE("Unable to get metadata TABLE_PTR:%p META_ID:%d", \
    859                   TABLE_PTR, META_ID); \
    860     } \
    861 }
    862 
    863 #define READ_PARAM_ENTRY(TABLE_PTR, META_ID, DATA) \
    864 { \
    865     if (NULL != TABLE_PTR) { \
    866         DATA = TABLE_PTR->data.member_variable_##META_ID[ 0 ]; \
    867     } else { \
    868         LOGE("Unable to read metadata TABLE_PTR:%p META_ID:%d", \
    869                   TABLE_PTR, META_ID); \
    870     } \
    871 }
    872 
    873 /************************************
    874 * Custom parameter data definition
    875 *************************************/
    876 typedef struct {
    877     /*CAM_CUSTOM_PARM_EXAMPLE is added to explain custom param procedure*/
    878     INCLUDE(CAM_CUSTOM_PARM_EXAMPLE,            int32_t,           1);
    879 } custom_parm_data_t;
    880 
    881 /************************************
    882 * Custom Parameter buffer definition
    883 *************************************/
    884 typedef struct {
    885     union {
    886         /* Hash table of 'is valid' flags */
    887         uint8_t         is_valid[CAM_CUSTOM_PARM_MAX];
    888 
    889         /* Hash table of 'is required' flags for the GET PARAM */
    890         uint8_t         is_reqd[CAM_CUSTOM_PARM_MAX];
    891     };
    892     custom_parm_data_t data;
    893 } custom_parm_buffer_t;
    894 
    895 
    896 typedef struct {
    897 /**************************************************************************************
    898  *  ID from (cam_intf_metadata_type_t)                DATATYPE                     COUNT
    899  **************************************************************************************/
    900     /* common between HAL1 and HAL3 */
    901     INCLUDE(CAM_INTF_META_HISTOGRAM,                    cam_hist_stats_t,               1);
    902     INCLUDE(CAM_INTF_META_FACE_DETECTION,               cam_face_detection_data_t,      1);
    903     INCLUDE(CAM_INTF_META_FACE_RECOG,                   cam_face_recog_data_t,          1);
    904     INCLUDE(CAM_INTF_META_FACE_BLINK,                   cam_face_blink_data_t,          1);
    905     INCLUDE(CAM_INTF_META_FACE_GAZE,                    cam_face_gaze_data_t,           1);
    906     INCLUDE(CAM_INTF_META_FACE_SMILE,                   cam_face_smile_data_t,          1);
    907     INCLUDE(CAM_INTF_META_FACE_LANDMARK,                cam_face_landmarks_data_t,      1);
    908     INCLUDE(CAM_INTF_META_FACE_CONTOUR,                 cam_face_contour_data_t,        1);
    909     INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA,               cam_auto_focus_data_t,          1);
    910     INCLUDE(CAM_INTF_META_CDS_DATA,                     cam_cds_data_t,                 1);
    911     INCLUDE(CAM_INTF_PARM_UPDATE_DEBUG_LEVEL,           uint32_t,                       1);
    912 
    913     /* Specific to HAl1 */
    914     INCLUDE(CAM_INTF_META_CROP_DATA,                    cam_crop_data_t,                1);
    915     INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE,           int32_t,                        1);
    916     INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE,         cam_frame_idx_range_t,          1);
    917     INCLUDE(CAM_INTF_META_ASD_HDR_SCENE_DATA,           cam_asd_hdr_scene_data_t,       1);
    918     INCLUDE(CAM_INTF_META_ASD_SCENE_INFO,               cam_asd_decision_t,             1);
    919     INCLUDE(CAM_INTF_META_CURRENT_SCENE,                cam_scene_mode_type,            1);
    920     INCLUDE(CAM_INTF_META_AWB_INFO,                     cam_awb_params_t,               1);
    921     INCLUDE(CAM_INTF_META_FOCUS_POSITION,               cam_focus_pos_info_t,           1);
    922     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ISP,           cam_chromatix_lite_isp_t,       1);
    923     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_PP,            cam_chromatix_lite_pp_t,        1);
    924     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AE,            cam_chromatix_lite_ae_stats_t,  1);
    925     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AWB,           cam_chromatix_lite_awb_stats_t, 1);
    926     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AF,            cam_chromatix_lite_af_stats_t,  1);
    927     INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ASD,           cam_chromatix_lite_asd_stats_t, 1);
    928     INCLUDE(CAM_INTF_BUF_DIVERT_INFO,                   cam_buf_divert_info_t,          1);
    929 
    930     /* Specific to HAL3 */
    931     INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID,           int32_t,                     1);
    932     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID,    int32_t,                     1);
    933     INCLUDE(CAM_INTF_META_FRAME_DROPPED,                cam_stream_ID_t,             1);
    934     INCLUDE(CAM_INTF_META_FRAME_NUMBER,                 uint32_t,                    1);
    935     INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER,          uint32_t,                    1);
    936     INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE,           uint32_t,                    1);
    937     INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM,      cam_color_correct_matrix_t,  1);
    938     INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS,          cam_color_correct_gains_t,   1);
    939     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t,  1);
    940     INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS,     cam_color_correct_gains_t,   1);
    941     INCLUDE(CAM_INTF_META_AEC_ROI,                      cam_area_t,                  1);
    942     INCLUDE(CAM_INTF_META_AEC_STATE,                    uint32_t,                    1);
    943     INCLUDE(CAM_INTF_PARM_FOCUS_MODE,                   uint32_t,                    1);
    944     INCLUDE(CAM_INTF_PARM_MANUAL_FOCUS_POS,             cam_manual_focus_parm_t,     1);
    945     INCLUDE(CAM_INTF_META_AF_ROI,                       cam_area_t,                  1);
    946     INCLUDE(CAM_INTF_META_AF_DEFAULT_ROI,               cam_rect_t,                  1);
    947     INCLUDE(CAM_INTF_META_AF_STATE,                     uint32_t,                    1);
    948     INCLUDE(CAM_INTF_PARM_WHITE_BALANCE,                int32_t,                     1);
    949     INCLUDE(CAM_INTF_META_AWB_REGIONS,                  cam_area_t,                  1);
    950     INCLUDE(CAM_INTF_META_AWB_STATE,                    uint32_t,                    1);
    951     INCLUDE(CAM_INTF_META_AWB_CONVERGENCE_SPEED,        float,                       1);
    952     INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK,             uint32_t,                    1);
    953     INCLUDE(CAM_INTF_META_MODE,                         uint32_t,                    1);
    954     INCLUDE(CAM_INTF_META_EDGE_MODE,                    cam_edge_application_t,      1);
    955     INCLUDE(CAM_INTF_META_FLASH_POWER,                  uint32_t,                    1);
    956     INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME,            int64_t,                     1);
    957     INCLUDE(CAM_INTF_META_FLASH_MODE,                   uint32_t,                    1);
    958     INCLUDE(CAM_INTF_META_FLASH_STATE,                  int32_t,                     1);
    959     INCLUDE(CAM_INTF_META_HOTPIXEL_MODE,                uint32_t,                    1);
    960     INCLUDE(CAM_INTF_META_LENS_APERTURE,                float,                       1);
    961     INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY,           float,                       1);
    962     INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH,            float,                       1);
    963     INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE,          float,                       1);
    964     INCLUDE(CAM_INTF_META_FOCUS_VALUE,                  float,                       1);
    965     INCLUDE(CAM_INTF_META_SPOT_LIGHT_DETECT,            uint8_t,                     1);
    966     INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE,             float,                       2);
    967     INCLUDE(CAM_INTF_META_LENS_STATE,                   cam_af_lens_state_t,         1);
    968     INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE,           uint32_t,                    1);
    969     INCLUDE(CAM_INTF_META_VIDEO_STAB_MODE,              uint32_t,                    1);
    970     INCLUDE(CAM_INTF_META_LENS_FOCUS_STATE,             uint32_t,                    1);
    971     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE,         uint32_t,                    1);
    972     INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH,     uint32_t,                    1);
    973     INCLUDE(CAM_INTF_META_SCALER_CROP_REGION,           cam_crop_region_t,           1);
    974     INCLUDE(CAM_INTF_META_SCENE_FLICKER,                uint32_t,                    1);
    975     INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME,         int64_t,                     1);
    976     INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION,        int64_t,                     1);
    977     INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY,           int32_t,                     1);
    978     INCLUDE(CAM_INTF_META_ISP_SENSITIVITY ,             int32_t,                     1);
    979     INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP,             int64_t,                     1);
    980     INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP_AV,          int64_t,                     1);
    981     INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW,  int64_t,                     1);
    982     INCLUDE(CAM_INTF_META_SHADING_MODE,                 uint32_t,                    1);
    983     INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE,        uint32_t,                    1);
    984     INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE,         uint32_t,                    1);
    985     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,     uint32_t,                    1);
    986     INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP,          cam_sharpness_map_t,         3);
    987     INCLUDE(CAM_INTF_META_TONEMAP_CURVES,               cam_rgb_tonemap_curves,      1);
    988     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP,             cam_lens_shading_map_t,      1);
    989     INCLUDE(CAM_INTF_META_AEC_INFO,                     cam_3a_params_t,             1);
    990     INCLUDE(CAM_INTF_META_SENSOR_INFO,                  cam_sensor_params_t,         1);
    991     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AE,                cam_ae_exif_debug_t,         1);
    992     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AWB,               cam_awb_exif_debug_t,        1);
    993     INCLUDE(CAM_INTF_META_EXIF_DEBUG_AF,                cam_af_exif_debug_t,         1);
    994     INCLUDE(CAM_INTF_META_EXIF_DEBUG_ASD,               cam_asd_exif_debug_t,        1);
    995     INCLUDE(CAM_INTF_META_EXIF_DEBUG_STATS,             cam_stats_buffer_exif_debug_t,   1);
    996     INCLUDE(CAM_INTF_META_EXIF_DEBUG_BESTATS,           cam_bestats_buffer_exif_debug_t, 1);
    997     INCLUDE(CAM_INTF_META_EXIF_DEBUG_BHIST,             cam_bhist_buffer_exif_debug_t,   1);
    998     INCLUDE(CAM_INTF_META_EXIF_DEBUG_3A_TUNING,         cam_q3a_tuning_info_t,       1);
    999     INCLUDE(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE,       cam_auto_scene_t,            1);
   1000     INCLUDE(CAM_INTF_PARM_EFFECT,                       uint32_t,                    1);
   1001     /* Defining as int32_t so that this array is 4 byte aligned */
   1002     INCLUDE(CAM_INTF_META_PRIVATE_DATA,                 int32_t,
   1003             MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES / 4);
   1004 
   1005     /* Following are Params only and not metadata currently */
   1006     INCLUDE(CAM_INTF_PARM_HAL_VERSION,                  int32_t,                     1);
   1007     /* Shared between HAL1 and HAL3 */
   1008     INCLUDE(CAM_INTF_PARM_ANTIBANDING,                  uint32_t,                    1);
   1009     INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION,        int32_t,                     1);
   1010     INCLUDE(CAM_INTF_PARM_EV_STEP,                      cam_rational_type_t,         1);
   1011     INCLUDE(CAM_INTF_PARM_AEC_LOCK,                     uint32_t,                    1);
   1012     INCLUDE(CAM_INTF_PARM_FPS_RANGE,                    cam_fps_range_t,             1);
   1013     INCLUDE(CAM_INTF_PARM_AWB_LOCK,                     uint32_t,                    1);
   1014     INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE,                uint32_t,                    1);
   1015     INCLUDE(CAM_INTF_PARM_DIS_ENABLE,                   int32_t,                     1);
   1016     INCLUDE(CAM_INTF_PARM_LED_MODE,                     int32_t,                     1);
   1017     INCLUDE(CAM_INTF_META_LED_MODE_OVERRIDE,            uint32_t,                    1);
   1018 
   1019     /* dual camera specific params */
   1020     INCLUDE(CAM_INTF_PARM_RELATED_SENSORS_CALIBRATION,  cam_related_system_calibration_data_t, 1);
   1021     INCLUDE(CAM_INTF_META_AF_FOCAL_LENGTH_RATIO,        cam_focal_length_ratio_t, 1);
   1022     INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_SENSOR,        cam_stream_crop_info_t,   1);
   1023     INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_CAMIF,         cam_stream_crop_info_t,   1);
   1024     INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_ISP,           cam_stream_crop_info_t,   1);
   1025     INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_CPP,           cam_stream_crop_info_t,   1);
   1026     INCLUDE(CAM_INTF_META_DCRF,                         cam_dcrf_result_t,        1);
   1027     INCLUDE(CAM_INTF_PARM_SYNC_DC_PARAMETERS,           uint32_t,                  1);
   1028     INCLUDE(CAM_INTF_META_AF_FOCUS_POS,                 cam_af_focus_pos_t, 1);
   1029 
   1030     /* HAL1 specific */
   1031     /* read only */
   1032     INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP,             int32_t,                     1);
   1033     INCLUDE(CAM_INTF_PARM_EXPOSURE,                     int32_t,                     1);
   1034     INCLUDE(CAM_INTF_PARM_SHARPNESS,                    int32_t,                     1);
   1035     INCLUDE(CAM_INTF_PARM_CONTRAST,                     int32_t,                     1);
   1036     INCLUDE(CAM_INTF_PARM_SATURATION,                   int32_t,                     1);
   1037     INCLUDE(CAM_INTF_PARM_BRIGHTNESS,                   int32_t,                     1);
   1038     INCLUDE(CAM_INTF_PARM_ISO,                          cam_intf_parm_manual_3a_t,   1);
   1039     INCLUDE(CAM_INTF_PARM_EXPOSURE_TIME,                cam_intf_parm_manual_3a_t,   1);
   1040     INCLUDE(CAM_INTF_PARM_ZOOM,                         int32_t,                     1);
   1041     INCLUDE(CAM_INTF_PARM_ROLLOFF,                      int32_t,                     1);
   1042     INCLUDE(CAM_INTF_PARM_MODE,                         int32_t,                     1);
   1043     INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE,                int32_t,                     1);
   1044     INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE,              int32_t,                     1);
   1045     INCLUDE(CAM_INTF_PARM_AEC_ROI,                      cam_set_aec_roi_t,           1);
   1046     INCLUDE(CAM_INTF_PARM_AF_ROI,                       cam_roi_info_t,              1);
   1047     INCLUDE(CAM_INTF_PARM_SCE_FACTOR,                   int32_t,                     1);
   1048     INCLUDE(CAM_INTF_PARM_FD,                           cam_fd_set_parm_t,           1);
   1049     INCLUDE(CAM_INTF_PARM_MCE,                          int32_t,                     1);
   1050     INCLUDE(CAM_INTF_PARM_HFR,                          int32_t,                     1);
   1051     INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION,             int32_t,                     1);
   1052     INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE,              cam_denoise_param_t,         1);
   1053     INCLUDE(CAM_INTF_PARM_TEMPORAL_DENOISE,             cam_denoise_param_t,         1);
   1054     INCLUDE(CAM_INTF_PARM_HISTOGRAM,                    int32_t,                     1);
   1055     INCLUDE(CAM_INTF_PARM_ASD_ENABLE,                   int32_t,                     1);
   1056     INCLUDE(CAM_INTF_PARM_RECORDING_HINT,               int32_t,                     1);
   1057     INCLUDE(CAM_INTF_PARM_HDR,                          cam_exp_bracketing_t,        1);
   1058     INCLUDE(CAM_INTF_PARM_FRAMESKIP,                    int32_t,                     1);
   1059     INCLUDE(CAM_INTF_PARM_ZSL_MODE,                     int32_t,                     1);
   1060     INCLUDE(CAM_INTF_PARM_HDR_NEED_1X,                  int32_t,                     1);
   1061     INCLUDE(CAM_INTF_PARM_LOCK_CAF,                     int32_t,                     1);
   1062     INCLUDE(CAM_INTF_PARM_VIDEO_HDR,                    int32_t,                     1);
   1063     INCLUDE(CAM_INTF_PARM_SENSOR_HDR,                   cam_sensor_hdr_type_t,       1);
   1064     INCLUDE(CAM_INTF_PARM_VT,                           int32_t,                     1);
   1065     INCLUDE(CAM_INTF_PARM_SET_AUTOFOCUSTUNING,          tune_actuator_t,             1);
   1066     INCLUDE(CAM_INTF_PARM_SET_VFE_COMMAND,              tune_cmd_t,                  1);
   1067     INCLUDE(CAM_INTF_PARM_SET_PP_COMMAND,               tune_cmd_t,                  1);
   1068     INCLUDE(CAM_INTF_PARM_MAX_DIMENSION,                cam_dimension_t,             1);
   1069     INCLUDE(CAM_INTF_PARM_SENSOR_MODE_INFO,             cam_sensor_mode_info_t,      1);
   1070     INCLUDE(CAM_INTF_PARM_CURRENT_SENSOR_MODE_INFO,     cam_sensor_mode_info_t,      1);
   1071     INCLUDE(CAM_INTF_PARM_TINTLESS,                     int32_t,                     1);
   1072     INCLUDE(CAM_INTF_PARM_WB_MANUAL,                    cam_manual_wb_parm_t,        1);
   1073     INCLUDE(CAM_INTF_PARM_CDS_MODE,                     int32_t,                     1);
   1074     INCLUDE(CAM_INTF_PARM_EZTUNE_CMD,                   cam_eztune_cmd_data_t,       1);
   1075     INCLUDE(CAM_INTF_PARM_INT_EVT,                      cam_int_evt_params_t,        1);
   1076     INCLUDE(CAM_INTF_PARM_RDI_MODE,                     int32_t,                     1);
   1077     INCLUDE(CAM_INTF_PARM_BURST_NUM,                    uint32_t,                    1);
   1078     INCLUDE(CAM_INTF_PARM_RETRO_BURST_NUM,              uint32_t,                    1);
   1079     INCLUDE(CAM_INTF_PARM_BURST_LED_ON_PERIOD,          uint32_t,                    1);
   1080     INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE,              int8_t,                      1);
   1081     INCLUDE(CAM_INTF_PARM_TONE_MAP_MODE,                uint32_t,                    1);
   1082     INCLUDE(CAM_INTF_META_TOUCH_AE_RESULT,              int32_t,                     1);
   1083     INCLUDE(CAM_INTF_PARM_DUAL_LED_CALIBRATION,         int32_t,                     1);
   1084     INCLUDE(CAM_INTF_PARM_ADV_CAPTURE_MODE,             uint8_t,                     1);
   1085     INCLUDE(CAM_INTF_PARM_QUADRA_CFA,                   int32_t,                     1);
   1086     INCLUDE(CAM_INTF_META_RAW,                          cam_dimension_t,             1);
   1087     INCLUDE(CAM_INTF_META_STREAM_INFO_FOR_PIC_RES,      cam_stream_size_info_t,      1);
   1088 
   1089 
   1090     /* HAL3 specific */
   1091     INCLUDE(CAM_INTF_META_STREAM_INFO,                  cam_stream_size_info_t,      1);
   1092     INCLUDE(CAM_INTF_META_AEC_MODE,                     uint32_t,                    1);
   1093     INCLUDE(CAM_INTF_META_AEC_CONVERGENCE_SPEED,        float,                       1);
   1094     INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,       cam_trigger_t,               1);
   1095     INCLUDE(CAM_INTF_META_AF_TRIGGER,                   cam_trigger_t,               1);
   1096     INCLUDE(CAM_INTF_META_CAPTURE_INTENT,               uint32_t,                    1);
   1097     INCLUDE(CAM_INTF_META_DEMOSAIC,                     int32_t,                     1);
   1098     INCLUDE(CAM_INTF_META_SHARPNESS_STRENGTH,           int32_t,                     1);
   1099     INCLUDE(CAM_INTF_META_GEOMETRIC_MODE,               uint32_t,                    1);
   1100     INCLUDE(CAM_INTF_META_GEOMETRIC_STRENGTH,           uint32_t,                    1);
   1101     INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE,        uint32_t,                    1);
   1102     INCLUDE(CAM_INTF_META_SHADING_STRENGTH,             uint32_t,                    1);
   1103     INCLUDE(CAM_INTF_META_TONEMAP_MODE,                 uint32_t,                    1);
   1104     INCLUDE(CAM_INTF_META_IR_MODE,                      cam_ir_mode_type_t,          1);
   1105     INCLUDE(CAM_INTF_META_STREAM_ID,                    cam_stream_ID_t,             1);
   1106     INCLUDE(CAM_INTF_PARM_STATS_DEBUG_MASK,             uint32_t,                    1);
   1107     INCLUDE(CAM_INTF_PARM_STATS_AF_PAAF,                uint32_t,                    1);
   1108     INCLUDE(CAM_INTF_PARM_FOCUS_BRACKETING,             cam_af_bracketing_t,         1);
   1109     INCLUDE(CAM_INTF_PARM_FLASH_BRACKETING,             cam_flash_bracketing_t,      1);
   1110     INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES,         double,                      3);
   1111     INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS,        uint8_t,                     GPS_PROCESSING_METHOD_SIZE);
   1112     INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP,           int64_t,                     1);
   1113     INCLUDE(CAM_INTF_META_JPEG_ORIENTATION,             int32_t,                     1);
   1114     INCLUDE(CAM_INTF_META_JPEG_QUALITY,                 uint32_t,                    1);
   1115     INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY,           uint32_t,                    1);
   1116     INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE,              cam_dimension_t,             1);
   1117     INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA,            cam_test_pattern_data_t,     1);
   1118     INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE,           cam_profile_tone_curve,      1);
   1119     INCLUDE(CAM_INTF_META_OTP_WB_GRGB,                  float,                       1);
   1120     INCLUDE(CAM_INTF_META_IMG_HYST_INFO,                cam_img_hysterisis_info_t,   1);
   1121     INCLUDE(CAM_INTF_META_CAC_INFO,                     cam_cac_info_t,              1);
   1122     INCLUDE(CAM_INTF_PARM_CAC,                          cam_aberration_mode_t,       1);
   1123     INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT,            cam_neutral_col_point_t,     1);
   1124     INCLUDE(CAM_INTF_PARM_ROTATION,                     cam_rotation_info_t,         1);
   1125     INCLUDE(CAM_INTF_PARM_HW_DATA_OVERWRITE,            cam_hw_data_overwrite_t,     1);
   1126     INCLUDE(CAM_INTF_META_IMGLIB,                       cam_intf_meta_imglib_t,      1);
   1127     INCLUDE(CAM_INTF_PARM_CAPTURE_FRAME_CONFIG,         cam_capture_frame_config_t,  1);
   1128     INCLUDE(CAM_INTF_PARM_CUSTOM,                       custom_parm_buffer_t,        1);
   1129     INCLUDE(CAM_INTF_PARM_FLIP,                         int32_t,                     1);
   1130     INCLUDE(CAM_INTF_META_USE_AV_TIMER,                 uint8_t,                     1);
   1131     INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,    float,                       1);
   1132     INCLUDE(CAM_INTF_META_LDAF_EXIF,                    uint32_t,                    2);
   1133     INCLUDE(CAM_INTF_META_BLACK_LEVEL_SOURCE_PATTERN,   cam_black_level_metadata_t,  1);
   1134     INCLUDE(CAM_INTF_META_BLACK_LEVEL_APPLIED_PATTERN,  cam_black_level_metadata_t,  1);
   1135     INCLUDE(CAM_INTF_META_LOW_LIGHT,                    cam_low_light_mode_t,        1);
   1136     INCLUDE(CAM_INTF_META_IMG_DYN_FEAT,                 cam_dyn_img_data_t,          1);
   1137     INCLUDE(CAM_INTF_PARM_MANUAL_CAPTURE_TYPE,          cam_manual_capture_type,     1);
   1138     INCLUDE(CAM_INTF_AF_STATE_TRANSITION,               uint8_t,                     1);
   1139     INCLUDE(CAM_INTF_PARM_INITIAL_EXPOSURE_INDEX,       uint32_t,                    1);
   1140     INCLUDE(CAM_INTF_PARM_INSTANT_AEC,                  uint8_t,                     1);
   1141     INCLUDE(CAM_INTF_META_REPROCESS_FLAGS,              uint8_t,                     1);
   1142     INCLUDE(CAM_INTF_PARM_JPEG_ENCODE_CROP,             cam_stream_crop_info_t,      1);
   1143     INCLUDE(CAM_INTF_PARM_JPEG_SCALE_DIMENSION,         cam_dimension_t,             1);
   1144     INCLUDE(CAM_INTF_META_FOCUS_DEPTH_INFO,             uint8_t,                     1);
   1145     INCLUDE(CAM_INTF_PARM_HAL_BRACKETING_HDR,           cam_hdr_param_t,             1);
   1146     INCLUDE(CAM_INTF_META_DC_LOW_POWER_ENABLE,          uint8_t,                     1);
   1147     INCLUDE(CAM_INTF_META_DC_SAC_OUTPUT_INFO,           cam_sac_output_info_t,       1);
   1148     INCLUDE(CAM_INTF_META_DC_IN_SNAPSHOT_PP_ZOOM_RANGE, uint8_t,                     1);
   1149     INCLUDE(CAM_INTF_META_DC_BOKEH_MODE,                uint8_t,                     1);
   1150     INCLUDE(CAM_INTF_PARM_FOV_COMP_ENABLE,              int32_t,                     1);
   1151     INCLUDE(CAM_INTF_META_LED_CALIB_RESULT,             int32_t,                     1);
   1152     INCLUDE(CAM_INTF_META_HYBRID_AE,                    uint8_t,                     1);
   1153     INCLUDE(CAM_INTF_META_MOTION_DETECTION_ENABLE,      uint8_t,                     1);
   1154     INCLUDE(CAM_INTF_META_AF_SCENE_CHANGE,              uint8_t,                     1);
   1155     /* DevCamDebug metadata CAM_INTF.H */
   1156     INCLUDE(CAM_INTF_META_DEV_CAM_ENABLE,               uint8_t,                     1);
   1157     /* DevCamDebug metadata CAM_INTF.H AF */
   1158     INCLUDE(CAM_INTF_META_DEV_CAM_AF_LENS_POSITION,     int32_t,                     1);
   1159     INCLUDE(CAM_INTF_META_AF_TOF_CONFIDENCE,            int32_t,                     1);
   1160     INCLUDE(CAM_INTF_META_AF_TOF_DISTANCE,              int32_t,                     1);
   1161     INCLUDE(CAM_INTF_META_DEV_CAM_AF_LUMA,                    int32_t,               1);
   1162     INCLUDE(CAM_INTF_META_DEV_CAM_AF_HAF_STATE,               int32_t,               1);
   1163     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_TARGET_POS, int32_t,               1);
   1164     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_CONFIDENCE, int32_t,               1);
   1165     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_REFOCUS,    int32_t,               1);
   1166     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_TARGET_POS,  int32_t,               1);
   1167     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_CONFIDENCE,  int32_t,               1);
   1168     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_REFOCUS,     int32_t,               1);
   1169     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TYPE_SELECT,     int32_t,               1);
   1170     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_REFOCUS,         int32_t,               1);
   1171     INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TARGET_POS,      int32_t,               1);
   1172     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_TARGET_POS,  int32_t,               1);
   1173     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_NEXT_POS,    int32_t,               1);
   1174     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_NEAR_POS,    int32_t,               1);
   1175     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_FAR_POS,     int32_t,               1);
   1176     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_CONFIDENCE,  int32_t,               1);
   1177     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_TARGET_POS,   int32_t,               1);
   1178     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_NEXT_POS,     int32_t,               1);
   1179     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_NEAR_POS,     int32_t,               1);
   1180     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_FAR_POS,      int32_t,               1);
   1181     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_CONFIDENCE,   int32_t,               1);
   1182     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TYPE_SELECT,      int32_t,               1);
   1183     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_NEXT_POS,         int32_t,               1);
   1184     INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TARGET_POS,       int32_t,               1);
   1185     /* DevCamDebug metadata CAM_INTF.H AEC */
   1186     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_TARGET_LUMA,      int32_t,                     1);
   1187     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_COMP_LUMA,        int32_t,                     1);
   1188     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_AVG_LUMA,         int32_t,                     1);
   1189     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CUR_LUMA,         int32_t,                     1);
   1190     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LINECOUNT,        int32_t,                     1);
   1191     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_REAL_GAIN,        float,                       1);
   1192     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_EXP_INDEX,        int32_t,                     1);
   1193     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LUX_IDX,          float,                       1);
   1194     /* DevCamDebug metadata CAM_INTF.H zzHDR */
   1195     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_L_REAL_GAIN,           float,                  1);
   1196     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_L_LINECOUNT,           int32_t,                1);
   1197     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_S_REAL_GAIN,           float,                  1);
   1198     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_S_LINECOUNT,           int32_t,                1);
   1199     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_HDR_SENSITIVITY_RATIO, float,                  1);
   1200     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_HDR_EXP_TIME_RATIO,    float,                  1);
   1201     /* DevCamDebug metadata CAM_INTF.H ADRC */
   1202     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_TOTAL_DRC_GAIN,        float,                  1);
   1203     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_COLOR_DRC_GAIN,        float,                  1);
   1204     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_GTM_RATIO,             float,                  1);
   1205     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LTM_RATIO,             float,                  1);
   1206     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LA_RATIO,              float,                  1);
   1207     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_GAMMA_RATIO,           float,                  1);
   1208     /* DevCamDebug metadata CAM_INTF.H AEC MOTION */
   1209     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DX,      float,                  1);
   1210     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CAMERA_MOTION_DY,      float,                  1);
   1211     INCLUDE(CAM_INTF_META_DEV_CAM_AEC_SUBJECT_MOTION,        float,                  1);
   1212     /* DevCamDebug metadata CAM_INTF.H AWB */
   1213     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_R_GAIN,           float,                       1);
   1214     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_G_GAIN,           float,                       1);
   1215     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_B_GAIN,           float,                       1);
   1216     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_CCT,              int32_t,                     1);
   1217     INCLUDE(CAM_INTF_META_DEV_CAM_AWB_DECISION,         int32_t,                     1);
   1218     /* DevCamDebug metadata end */
   1219     INCLUDE(CAM_INTF_META_ISP_POST_STATS_SENSITIVITY,   float,                       1);
   1220     INCLUDE(CAM_INTF_PARM_DC_USERZOOM,                  int32_t,                     1);
   1221     INCLUDE(CAM_INTF_META_AEC_LUX_INDEX,                float,                       1);
   1222     INCLUDE(CAM_INTF_META_AF_OBJ_DIST_CM,               int32_t,                     1);
   1223     INCLUDE(CAM_INTF_META_BINNING_CORRECTION_MODE,      cam_binning_correction_mode_t,  1);
   1224     INCLUDE(CAM_INTF_META_OIS_READ_DATA,                cam_ois_data_t,              1);
   1225     INCLUDE(CAM_INTF_META_FRAME_OIS_DATA,               cam_frame_ois_info_t,        1);
   1226     INCLUDE(CAM_INTF_META_PDAF_DATA_ENABLE,             cam_sensor_pd_data_t,        1);
   1227     INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_BINS,         int32_t,                     1);
   1228     INCLUDE(CAM_INTF_META_TRACKING_AF_TRIGGER,          uint8_t,                     1);
   1229     INCLUDE(CAM_INTF_META_AF_REGIONS_CONFIDENCE,        int32_t,                     1);
   1230     INCLUDE(CAM_INTF_META_SENSOR_MODE_FULLFOV,          int32_t,                     1);
   1231     INCLUDE(CAM_INTF_META_EARLY_AF_STATE,               uint32_t,                    1);
   1232     INCLUDE(CAM_INTF_META_EXP_TIME_BOOST,               float,                       1);
   1233     INCLUDE(CAM_INTF_META_MAKERNOTE,                    cam_makernote_t,             1);
   1234 } metadata_data_t;
   1235 
   1236 /* Update clear_metadata_buffer() function when a new is_xxx_valid is added to
   1237  * or removed from this structure */
   1238 typedef struct {
   1239     union{
   1240         /* Hash table of 'is valid' flags */
   1241         uint8_t         is_valid[CAM_INTF_PARM_MAX];
   1242 
   1243         /* Hash table of 'is required' flags for the GET PARAM */
   1244         uint8_t         is_reqd[CAM_INTF_PARM_MAX];
   1245     };
   1246     metadata_data_t data;
   1247     /*Tuning Data */
   1248     uint8_t is_tuning_params_valid;
   1249     tuning_params_t tuning_params;
   1250 
   1251     /* Mobicat Params */
   1252     uint8_t is_mobicat_aec_params_valid;
   1253     cam_3a_params_t mobicat_aec_params;
   1254 
   1255     /* Stats 3A Debug Params */
   1256     uint8_t is_statsdebug_ae_params_valid;
   1257     cam_ae_exif_debug_t statsdebug_ae_data;
   1258 
   1259     uint8_t is_statsdebug_awb_params_valid;
   1260     cam_awb_exif_debug_t statsdebug_awb_data;
   1261 
   1262     uint8_t is_statsdebug_af_params_valid;
   1263     cam_af_exif_debug_t statsdebug_af_data;
   1264 
   1265     uint8_t is_statsdebug_asd_params_valid;
   1266     cam_asd_exif_debug_t statsdebug_asd_data;
   1267 
   1268     uint8_t is_statsdebug_stats_params_valid;
   1269     cam_stats_buffer_exif_debug_t statsdebug_stats_buffer_data;
   1270 
   1271     uint8_t is_statsdebug_bestats_params_valid;
   1272     cam_bestats_buffer_exif_debug_t statsdebug_bestats_buffer_data;
   1273 
   1274     uint8_t is_statsdebug_bhist_params_valid;
   1275     cam_bhist_buffer_exif_debug_t statsdebug_bhist_data;
   1276 
   1277     uint8_t is_statsdebug_3a_tuning_params_valid;
   1278     cam_q3a_tuning_info_t statsdebug_3a_tuning_data;
   1279 
   1280     uint8_t is_depth_data_valid;
   1281     cam_depth_data_t depth_data;
   1282 } metadata_buffer_t;
   1283 
   1284 typedef metadata_buffer_t parm_buffer_t;
   1285 
   1286 #ifdef  __cplusplus
   1287 extern "C" {
   1288 #endif
   1289 
   1290 /* Update this inline function when a new is_xxx_valid is added to
   1291  * or removed from metadata_buffer_t */
   1292 static inline void clear_metadata_buffer(metadata_buffer_t *meta)
   1293 {
   1294     if (meta) {
   1295       memset(meta->is_valid, 0, CAM_INTF_PARM_MAX);
   1296       meta->is_tuning_params_valid = 0;
   1297       meta->is_mobicat_aec_params_valid = 0;
   1298       meta->is_depth_data_valid = 0;
   1299       meta->is_statsdebug_ae_params_valid = 0;
   1300       meta->is_statsdebug_awb_params_valid = 0;
   1301       meta->is_statsdebug_af_params_valid = 0;
   1302       meta->is_statsdebug_asd_params_valid = 0;
   1303       meta->is_statsdebug_stats_params_valid = 0;
   1304       meta->is_statsdebug_bestats_params_valid = 0;
   1305       meta->is_statsdebug_bhist_params_valid = 0;
   1306       meta->is_statsdebug_3a_tuning_params_valid = 0;
   1307       /* tuning parameter sizes are never gets zero.
   1308        * It gets overwritten when it populated
   1309        * But we can't reply and make decision based on that
   1310        */
   1311       meta->tuning_params.tuning_sensor_data_size = 0;
   1312       meta->tuning_params.tuning_vfe_data_size = 0;
   1313       meta->tuning_params.tuning_mod1_stats_data_size = 0;
   1314     }
   1315 }
   1316 
   1317 #ifdef  __cplusplus
   1318 }
   1319 #endif
   1320 
   1321 #endif /* __QCAMERA_INTF_H__ */
   1322