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