Home | History | Annotate | Download | only in common
      1 /* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 
     30 #ifndef __QCAMERA_TYPES_H__
     31 #define __QCAMERA_TYPES_H__
     32 
     33 #include <stdint.h>
     34 #include <string.h>
     35 #include <pthread.h>
     36 #include <inttypes.h>
     37 #include <media/msmb_camera.h>
     38 
     39 #define CAM_MAX_NUM_BUFS_PER_STREAM 64
     40 #define MAX_METADATA_PRIVATE_PAYLOAD_SIZE 1024
     41 
     42 #define CEILING64(X) (((X) + 0x0003F) & 0xFFFFFFC0)
     43 #define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
     44 #define CEILING16(X) (((X) + 0x000F) & 0xFFF0)
     45 #define CEILING4(X)  (((X) + 0x0003) & 0xFFFC)
     46 #define CEILING2(X)  (((X) + 0x0001) & 0xFFFE)
     47 
     48 #define CAM_FN_CNT 255
     49 /** CAM_DUMP_TO_FILE:
     50  *  @filename: file name
     51  *  @name:filename
     52  *  @index: index of the file
     53  *  @extn: file extension
     54  *  @p_addr: address of the buffer
     55  *  @len: buffer length
     56  *
     57  *  dump the image to the file
     58  **/
     59 #define CAM_DUMP_TO_FILE(path, name, index, extn, p_addr, len) ({ \
     60   char filename[CAM_FN_CNT]; \
     61   if (index >= 0) \
     62     snprintf(filename, CAM_FN_CNT-1, "%s/%s%d.%s", path, name, index, extn); \
     63   else \
     64     snprintf(filename, CAM_FN_CNT-1, "%s/%s.%s", path, name, extn); \
     65   FILE *fp = fopen(filename, "w+"); \
     66   if (fp) { \
     67     fwrite(p_addr, 1, len, fp); \
     68     ALOGE("%s:%d] written size %d", __func__, __LINE__, len); \
     69     fclose(fp); \
     70   } else { \
     71     ALOGE("%s:%d] open %s failed", __func__, __LINE__, filename); \
     72   } \
     73 })
     74 
     75 #define MAX_ZOOMS_CNT 79
     76 #define MAX_SIZES_CNT 30
     77 #define MAX_EXP_BRACKETING_LENGTH 32
     78 #define MAX_ROI 5
     79 #define MAX_STREAM_NUM_IN_BUNDLE 4
     80 #define MAX_NUM_STREAMS          8
     81 #define CHROMATIX_SIZE 60000
     82 #define COMMONCHROMATIX_SIZE 45000
     83 #define CPPCHROMATIX_SIZE 36000
     84 #define AFTUNE_SIZE  4608
     85 #define MAX_SCALE_SIZES_CNT 8
     86 #define MAX_SAMP_DECISION_CNT     64
     87 
     88 #define MAX_ISP_DATA_SIZE 11500
     89 #define MAX_PP_DATA_SIZE 2000
     90 #define MAX_AE_STATS_DATA_SIZE  1000
     91 #define MAX_AWB_STATS_DATA_SIZE 1000
     92 #define MAX_AF_STATS_DATA_SIZE  1000
     93 #define MAX_ASD_STATS_DATA_SIZE 1000
     94 
     95 
     96 #define TUNING_DATA_VERSION        3
     97 #define TUNING_SENSOR_DATA_MAX     0x10000 /*(need value from sensor team)*/
     98 #define TUNING_VFE_DATA_MAX        0x10000 /*(need value from vfe team)*/
     99 #define TUNING_CPP_DATA_MAX        0x10000 /*(need value from pproc team)*/
    100 #define TUNING_CAC_DATA_MAX        0x10000 /*(need value from imglib team)*/
    101 #define TUNING_DATA_MAX            (TUNING_SENSOR_DATA_MAX + \
    102                                    TUNING_VFE_DATA_MAX + TUNING_CPP_DATA_MAX + \
    103                                    TUNING_CAC_DATA_MAX)
    104 
    105 #define TUNING_SENSOR_DATA_OFFSET  0
    106 #define TUNING_VFE_DATA_OFFSET     TUNING_SENSOR_DATA_MAX
    107 #define TUNING_CPP_DATA_OFFSET     (TUNING_SENSOR_DATA_MAX + TUNING_VFE_DATA_MAX)
    108 #define TUNING_CAC_DATA_OFFSET     (TUNING_SENSOR_DATA_MAX + \
    109                                    TUNING_VFE_DATA_MAX + TUNING_CPP_DATA_MAX)
    110 #define MAX_STATS_DATA_SIZE 4000
    111 
    112 #define MAX_AF_BRACKETING_VALUES 5
    113 #define MAX_TEST_PATTERN_CNT     8
    114 #define MAX_AVAILABLE_CAPABILITIES 8
    115 
    116 #define GPS_PROCESSING_METHOD_SIZE 33
    117 #define GPS_PROCESSING_METHOD_SIZE_IN_WORD (33+3)/4
    118 
    119 #define MAX_INFLIGHT_REQUESTS  6
    120 #define MIN_INFLIGHT_REQUESTS  3
    121 #define MAX_INFLIGHT_REPROCESS_REQUESTS 1
    122 
    123 #define QCAMERA_MAX_FILEPATH_LENGTH 64
    124 
    125 #define MAX_REPROCESS_STALL 2
    126 
    127 typedef enum {
    128     CAM_HAL_V1 = 1,
    129     CAM_HAL_V3 = 3
    130 } cam_hal_version_t;
    131 
    132 typedef enum {
    133     CAM_STATUS_SUCCESS,       /* Operation Succeded */
    134     CAM_STATUS_FAILED,        /* Failure in doing operation */
    135     CAM_STATUS_INVALID_PARM,  /* Inavlid parameter provided */
    136     CAM_STATUS_NOT_SUPPORTED, /* Parameter/operation not supported */
    137     CAM_STATUS_ACCEPTED,      /* Parameter accepted */
    138     CAM_STATUS_MAX,
    139 } cam_status_t;
    140 
    141 typedef enum {
    142     CAM_POSITION_BACK,
    143     CAM_POSITION_FRONT
    144 } cam_position_t;
    145 
    146 typedef enum {
    147     CAM_FLICKER_NONE,
    148     CAM_FLICKER_50_HZ,
    149     CAM_FLICKER_60_HZ
    150 } cam_flicker_t;
    151 
    152 typedef enum {
    153     CAM_FORMAT_JPEG = 0,
    154     CAM_FORMAT_YUV_420_NV12 = 1,
    155     CAM_FORMAT_YUV_420_NV21,
    156     CAM_FORMAT_YUV_420_NV21_ADRENO,
    157     CAM_FORMAT_YUV_420_YV12,
    158     CAM_FORMAT_YUV_422_NV16,
    159     CAM_FORMAT_YUV_422_NV61,
    160     CAM_FORMAT_YUV_420_NV12_VENUS,
    161 
    162     /* Please note below are the defintions for raw image.
    163      * Any format other than raw image format should be declared
    164      * before this line!!!!!!!!!!!!! */
    165 
    166     /* Note: For all raw formats, each scanline needs to be 16 bytes aligned */
    167 
    168     /* Packed YUV/YVU raw format, 16 bpp: 8 bits Y and 8 bits UV.
    169      * U and V are interleaved with Y: YUYV or YVYV */
    170     CAM_FORMAT_YUV_RAW_8BIT_YUYV,
    171     CAM_FORMAT_YUV_RAW_8BIT_YVYU,
    172     CAM_FORMAT_YUV_RAW_8BIT_UYVY,
    173     CAM_FORMAT_YUV_RAW_8BIT_VYUY,
    174 
    175     /* QCOM RAW formats where data is packed into 64bit word.
    176      * 8BPP: 1 64-bit word contains 8 pixels p0 - p7, where p0 is
    177      *       stored at LSB.
    178      * 10BPP: 1 64-bit word contains 6 pixels p0 - p5, where most
    179      *       significant 4 bits are set to 0. P0 is stored at LSB.
    180      * 12BPP: 1 64-bit word contains 5 pixels p0 - p4, where most
    181      *       significant 4 bits are set to 0. P0 is stored at LSB. */
    182     CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG,
    183     CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG,
    184     CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB,
    185     CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR,
    186     CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG,
    187     CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG,
    188     CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB,
    189     CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR,
    190     CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG,
    191     CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG,
    192     CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB,
    193     CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR,
    194     /* MIPI RAW formats based on MIPI CSI-2 specifiction.
    195      * 8BPP: Each pixel occupies one bytes, starting at LSB.
    196      *       Output with of image has no restrictons.
    197      * 10BPP: Four pixels are held in every 5 bytes. The output
    198      *       with of image must be a multiple of 4 pixels.
    199      * 12BPP: Two pixels are held in every 3 bytes. The output
    200      *       width of image must be a multiple of 2 pixels. */
    201     CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG,
    202     CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG,
    203     CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB,
    204     CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR,
    205     CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG,
    206     CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG,
    207     CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB,
    208     CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR,
    209     CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG,
    210     CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG,
    211     CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB,
    212     CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR,
    213     /* Ideal raw formats where image data has gone through black
    214      * correction, lens rolloff, demux/channel gain, bad pixel
    215      * correction, and ABF.
    216      * Ideal raw formats could output any of QCOM_RAW and MIPI_RAW
    217      * formats, plus plain8 8bbp, plain16 800, plain16 10bpp, and
    218      * plain 16 12bpp */
    219     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG,
    220     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG,
    221     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB,
    222     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR,
    223     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG,
    224     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG,
    225     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB,
    226     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR,
    227     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG,
    228     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG,
    229     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB,
    230     CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR,
    231     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG,
    232     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG,
    233     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB,
    234     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR,
    235     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG,
    236     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG,
    237     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB,
    238     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR,
    239     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG,
    240     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG,
    241     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB,
    242     CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR,
    243     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG,
    244     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG,
    245     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB,
    246     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR,
    247     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG,
    248     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG,
    249     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB,
    250     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR,
    251     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG,
    252     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG,
    253     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB,
    254     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR,
    255     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG,
    256     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG,
    257     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB,
    258     CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR,
    259 
    260     /* generic 8-bit raw */
    261     CAM_FORMAT_JPEG_RAW_8BIT,
    262     CAM_FORMAT_META_RAW_8BIT,
    263 
    264     CAM_FORMAT_MAX
    265 } cam_format_t;
    266 
    267 typedef enum {
    268     /* applies to HAL 1 */
    269     CAM_STREAM_TYPE_DEFAULT,       /* default stream type */
    270     CAM_STREAM_TYPE_PREVIEW,       /* preview */
    271     CAM_STREAM_TYPE_POSTVIEW,      /* postview */
    272     CAM_STREAM_TYPE_SNAPSHOT,      /* snapshot */
    273     CAM_STREAM_TYPE_VIDEO,         /* video */
    274 
    275     /* applies to HAL 3 */
    276     CAM_STREAM_TYPE_CALLBACK,      /* app requested callback */
    277     CAM_STREAM_TYPE_IMPL_DEFINED, /* opaque format: could be display, video enc, ZSL YUV */
    278 
    279     /* applies to both HAL 1 and HAL 3 */
    280     CAM_STREAM_TYPE_METADATA,      /* meta data */
    281     CAM_STREAM_TYPE_RAW,           /* raw dump from camif */
    282     CAM_STREAM_TYPE_OFFLINE_PROC,  /* offline process */
    283     CAM_STREAM_TYPE_PARM,         /* mct internal stream */
    284     CAM_STREAM_TYPE_MAX,
    285 } cam_stream_type_t;
    286 
    287 typedef enum {
    288     CAM_PAD_NONE = 1,
    289     CAM_PAD_TO_2 = 2,
    290     CAM_PAD_TO_4 = 4,
    291     CAM_PAD_TO_WORD = CAM_PAD_TO_4,
    292     CAM_PAD_TO_8 = 8,
    293     CAM_PAD_TO_16 = 16,
    294     CAM_PAD_TO_32 = 32,
    295     CAM_PAD_TO_64 = 64,
    296     CAM_PAD_TO_1K = 1024,
    297     CAM_PAD_TO_2K = 2048,
    298     CAM_PAD_TO_4K = 4096,
    299     CAM_PAD_TO_8K = 8192
    300 } cam_pad_format_t;
    301 
    302 typedef enum {
    303     /* followings are per camera */
    304     CAM_MAPPING_BUF_TYPE_CAPABILITY,  /* mapping camera capability buffer */
    305     CAM_MAPPING_BUF_TYPE_PARM_BUF,    /* mapping parameters buffer */
    306 
    307     /* followings are per stream */
    308     CAM_MAPPING_BUF_TYPE_STREAM_BUF,        /* mapping stream buffers */
    309     CAM_MAPPING_BUF_TYPE_STREAM_INFO,       /* mapping stream information buffer */
    310     CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF, /* mapping offline process input buffer */
    311     CAM_MAPPING_BUF_TYPE_OFFLINE_META_BUF,  /* mapping offline meta buffer */
    312     CAM_MAPPING_BUF_TYPE_MAX
    313 } cam_mapping_buf_type;
    314 
    315 typedef struct {
    316     cam_mapping_buf_type type;
    317     uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
    318     uint32_t frame_idx;   /* frame index: valid if type is STREAM_BUF */
    319     int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
    320                            * -1 means all planners shanre the same fd;
    321                            * otherwise, each planner has its own fd */
    322     unsigned long cookie; /* could be job_id(uint32_t) to identify mapping job */
    323     int fd;               /* origin fd */
    324     uint32_t size;        /* size of the buffer */
    325 } cam_buf_map_type;
    326 
    327 typedef struct {
    328     cam_mapping_buf_type type;
    329     uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
    330     uint32_t frame_idx;   /* frame index: valid if STREAM_BUF or HIST_BUF */
    331     int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
    332                            * -1 means all planners shanre the same fd;
    333                            * otherwise, each planner has its own fd */
    334     unsigned long cookie; /* could be job_id(uint32_t) to identify unmapping job */
    335 } cam_buf_unmap_type;
    336 
    337 typedef enum {
    338     CAM_MAPPING_TYPE_FD_MAPPING,
    339     CAM_MAPPING_TYPE_FD_UNMAPPING,
    340     CAM_MAPPING_TYPE_MAX
    341 } cam_mapping_type;
    342 
    343 typedef struct {
    344     cam_mapping_type msg_type;
    345     union {
    346         cam_buf_map_type buf_map;
    347         cam_buf_unmap_type buf_unmap;
    348     } payload;
    349 } cam_sock_packet_t;
    350 
    351 typedef enum {
    352     CAM_MODE_2D = (1<<0),
    353     CAM_MODE_3D = (1<<1)
    354 } cam_mode_t;
    355 
    356 typedef struct {
    357     uint32_t len;
    358     uint32_t y_offset;
    359     uint32_t cbcr_offset;
    360 } cam_sp_len_offset_t;
    361 
    362 typedef struct{
    363     uint32_t len;
    364     uint32_t offset;
    365     int32_t offset_x;
    366     int32_t offset_y;
    367     int32_t stride;
    368     int32_t scanline;
    369     int32_t width;    /* width without padding */
    370     int32_t height;   /* height without padding */
    371 } cam_mp_len_offset_t;
    372 
    373 typedef struct {
    374     uint32_t width_padding;
    375     uint32_t height_padding;
    376     uint32_t plane_padding;
    377 } cam_padding_info_t;
    378 
    379 typedef struct {
    380     int num_planes;
    381     union {
    382         cam_sp_len_offset_t sp;
    383         cam_mp_len_offset_t mp[VIDEO_MAX_PLANES];
    384     };
    385     uint32_t frame_len;
    386 } cam_frame_len_offset_t;
    387 
    388 typedef struct {
    389     int32_t width;
    390     int32_t height;
    391 } cam_dimension_t;
    392 
    393 typedef struct {
    394     cam_frame_len_offset_t plane_info;
    395 } cam_stream_buf_plane_info_t;
    396 
    397 typedef struct {
    398     float min_fps;
    399     float max_fps;
    400     float video_min_fps;
    401     float video_max_fps;
    402 } cam_fps_range_t;
    403 
    404 typedef struct {
    405     int32_t min_sensitivity;
    406     int32_t max_sensitivity;
    407 } cam_sensitivity_range_t;
    408 
    409 typedef enum {
    410     CAM_HFR_MODE_OFF,
    411     CAM_HFR_MODE_60FPS,
    412     CAM_HFR_MODE_90FPS,
    413     CAM_HFR_MODE_120FPS,
    414     CAM_HFR_MODE_150FPS,
    415     CAM_HFR_MODE_MAX
    416 } cam_hfr_mode_t;
    417 
    418 typedef struct {
    419     cam_hfr_mode_t mode;
    420     cam_dimension_t dim;
    421     uint8_t frame_skip;
    422     uint8_t livesnapshot_sizes_tbl_cnt;                     /* livesnapshot sizes table size */
    423     cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
    424 } cam_hfr_info_t;
    425 
    426 typedef enum {
    427     CAM_WB_MODE_AUTO,
    428     CAM_WB_MODE_CUSTOM,
    429     CAM_WB_MODE_INCANDESCENT,
    430     CAM_WB_MODE_FLUORESCENT,
    431     CAM_WB_MODE_WARM_FLUORESCENT,
    432     CAM_WB_MODE_DAYLIGHT,
    433     CAM_WB_MODE_CLOUDY_DAYLIGHT,
    434     CAM_WB_MODE_TWILIGHT,
    435     CAM_WB_MODE_SHADE,
    436     CAM_WB_MODE_OFF,
    437     CAM_WB_MODE_MAX
    438 } cam_wb_mode_type;
    439 
    440 typedef enum {
    441     CAM_ANTIBANDING_MODE_OFF,
    442     CAM_ANTIBANDING_MODE_60HZ,
    443     CAM_ANTIBANDING_MODE_50HZ,
    444     CAM_ANTIBANDING_MODE_AUTO,
    445     CAM_ANTIBANDING_MODE_AUTO_50HZ,
    446     CAM_ANTIBANDING_MODE_AUTO_60HZ,
    447     CAM_ANTIBANDING_MODE_MAX,
    448 } cam_antibanding_mode_type;
    449 
    450 /* Enum Type for different ISO Mode supported */
    451 typedef enum {
    452     CAM_ISO_MODE_AUTO,
    453     CAM_ISO_MODE_DEBLUR,
    454     CAM_ISO_MODE_100,
    455     CAM_ISO_MODE_200,
    456     CAM_ISO_MODE_400,
    457     CAM_ISO_MODE_800,
    458     CAM_ISO_MODE_1600,
    459     CAM_ISO_MODE_MAX
    460 } cam_iso_mode_type;
    461 
    462 typedef enum {
    463     CAM_AEC_MODE_FRAME_AVERAGE,
    464     CAM_AEC_MODE_CENTER_WEIGHTED,
    465     CAM_AEC_MODE_SPOT_METERING,
    466     CAM_AEC_MODE_SMART_METERING,
    467     CAM_AEC_MODE_USER_METERING,
    468     CAM_AEC_MODE_SPOT_METERING_ADV,
    469     CAM_AEC_MODE_CENTER_WEIGHTED_ADV,
    470     CAM_AEC_MODE_MAX
    471 } cam_auto_exposure_mode_type;
    472 
    473 typedef enum {
    474     CAM_AE_MODE_OFF,
    475     CAM_AE_MODE_ON,
    476     CAM_AE_MODE_MAX
    477 } cam_ae_mode_type;
    478 
    479 typedef enum {
    480     CAM_FOCUS_ALGO_AUTO,
    481     CAM_FOCUS_ALGO_SPOT,
    482     CAM_FOCUS_ALGO_CENTER_WEIGHTED,
    483     CAM_FOCUS_ALGO_AVERAGE,
    484     CAM_FOCUS_ALGO_MAX
    485 } cam_focus_algorithm_type;
    486 
    487 /* Auto focus mode */
    488 typedef enum {
    489     CAM_FOCUS_MODE_OFF,
    490     CAM_FOCUS_MODE_AUTO,
    491     CAM_FOCUS_MODE_INFINITY,
    492     CAM_FOCUS_MODE_MACRO,
    493     CAM_FOCUS_MODE_FIXED,
    494     CAM_FOCUS_MODE_EDOF,
    495     CAM_FOCUS_MODE_CONTINOUS_VIDEO,
    496     CAM_FOCUS_MODE_CONTINOUS_PICTURE,
    497     CAM_FOCUS_MODE_MAX
    498 } cam_focus_mode_type;
    499 
    500 typedef enum {
    501     CAM_SCENE_MODE_OFF,
    502     CAM_SCENE_MODE_AUTO,
    503     CAM_SCENE_MODE_LANDSCAPE,
    504     CAM_SCENE_MODE_SNOW,
    505     CAM_SCENE_MODE_BEACH,
    506     CAM_SCENE_MODE_SUNSET,
    507     CAM_SCENE_MODE_NIGHT,
    508     CAM_SCENE_MODE_PORTRAIT,
    509     CAM_SCENE_MODE_BACKLIGHT,
    510     CAM_SCENE_MODE_SPORTS,
    511     CAM_SCENE_MODE_ANTISHAKE,
    512     CAM_SCENE_MODE_FLOWERS,
    513     CAM_SCENE_MODE_CANDLELIGHT,
    514     CAM_SCENE_MODE_FIREWORKS,
    515     CAM_SCENE_MODE_PARTY,
    516     CAM_SCENE_MODE_NIGHT_PORTRAIT,
    517     CAM_SCENE_MODE_THEATRE,
    518     CAM_SCENE_MODE_ACTION,
    519     CAM_SCENE_MODE_AR,
    520     CAM_SCENE_MODE_FACE_PRIORITY,
    521     CAM_SCENE_MODE_BARCODE,
    522     CAM_SCENE_MODE_HDR,
    523     CAM_SCENE_MODE_MAX
    524 } cam_scene_mode_type;
    525 
    526 typedef enum {
    527     CAM_EFFECT_MODE_OFF,
    528     CAM_EFFECT_MODE_MONO,
    529     CAM_EFFECT_MODE_NEGATIVE,
    530     CAM_EFFECT_MODE_SOLARIZE,
    531     CAM_EFFECT_MODE_SEPIA,
    532     CAM_EFFECT_MODE_POSTERIZE,
    533     CAM_EFFECT_MODE_WHITEBOARD,
    534     CAM_EFFECT_MODE_BLACKBOARD,
    535     CAM_EFFECT_MODE_AQUA,
    536     CAM_EFFECT_MODE_EMBOSS,
    537     CAM_EFFECT_MODE_SKETCH,
    538     CAM_EFFECT_MODE_NEON,
    539     CAM_EFFECT_MODE_MAX
    540 } cam_effect_mode_type;
    541 
    542 typedef enum {
    543     CAM_FLASH_MODE_OFF,
    544     CAM_FLASH_MODE_AUTO,
    545     CAM_FLASH_MODE_ON,
    546     CAM_FLASH_MODE_TORCH,
    547     CAM_FLASH_MODE_SINGLE,
    548     CAM_FLASH_MODE_MAX
    549 } cam_flash_mode_t;
    550 
    551 // Flash States
    552 typedef enum {
    553     CAM_FLASH_STATE_UNAVAILABLE,
    554     CAM_FLASH_STATE_CHARGING,
    555     CAM_FLASH_STATE_READY,
    556     CAM_FLASH_STATE_FIRED,
    557     CAM_FLASH_STATE_PARTIAL,
    558     CAM_FLASH_STATE_MAX
    559 } cam_flash_state_t;
    560 
    561 typedef enum {
    562     CAM_FLASH_FIRING_LEVEL_0,
    563     CAM_FLASH_FIRING_LEVEL_1,
    564     CAM_FLASH_FIRING_LEVEL_2,
    565     CAM_FLASH_FIRING_LEVEL_3,
    566     CAM_FLASH_FIRING_LEVEL_4,
    567     CAM_FLASH_FIRING_LEVEL_5,
    568     CAM_FLASH_FIRING_LEVEL_6,
    569     CAM_FLASH_FIRING_LEVEL_7,
    570     CAM_FLASH_FIRING_LEVEL_8,
    571     CAM_FLASH_FIRING_LEVEL_9,
    572     CAM_FLASH_FIRING_LEVEL_10,
    573     CAM_FLASH_FIRING_LEVEL_MAX
    574 } cam_flash_firing_level_t;
    575 
    576 
    577 typedef enum {
    578     CAM_AEC_TRIGGER_IDLE,
    579     CAM_AEC_TRIGGER_START,
    580     CAM_AEC_TRIGGER_CANCEL
    581 } cam_aec_trigger_type_t;
    582 
    583 typedef enum {
    584     CAM_AF_TRIGGER_IDLE,
    585     CAM_AF_TRIGGER_START,
    586     CAM_AF_TRIGGER_CANCEL
    587 } cam_af_trigger_type_t;
    588 
    589 typedef enum {
    590     CAM_AE_STATE_INACTIVE,
    591     CAM_AE_STATE_SEARCHING,
    592     CAM_AE_STATE_CONVERGED,
    593     CAM_AE_STATE_LOCKED,
    594     CAM_AE_STATE_FLASH_REQUIRED,
    595     CAM_AE_STATE_PRECAPTURE
    596 } cam_ae_state_t;
    597 
    598 typedef enum {
    599     CAM_NOISE_REDUCTION_MODE_OFF,
    600     CAM_NOISE_REDUCTION_MODE_FAST,
    601     CAM_NOISE_REDUCTION_MODE_HIGH_QUALITY,
    602     CAM_NOISE_REDUCTION_MODE_MINIMAL
    603 } cam_noise_reduction_mode_t;
    604 
    605 typedef enum {
    606     CAM_EDGE_MODE_OFF,
    607     CAM_EDGE_MODE_FAST,
    608     CAM_EDGE_MODE_HIGH_QUALITY,
    609 } cam_edge_mode_t;
    610 
    611 typedef struct {
    612    uint8_t edge_mode;
    613    int32_t sharpness;
    614 } cam_edge_application_t;
    615 
    616 typedef enum {
    617     CAM_BLACK_LEVEL_LOCK_OFF,
    618     CAM_BLACK_LEVEL_LOCK_ON,
    619 } cam_black_level_lock_t;
    620 
    621 typedef enum {
    622     CAM_HOTPIXEL_MODE_OFF,
    623     CAM_HOTPIXEL_MODE_FAST,
    624     CAM_HOTPIXEL_MODE_HIGH_QUALITY,
    625 } cam_hotpixel_mode_t;
    626 
    627 typedef enum {
    628     CAM_LENS_SHADING_MAP_MODE_OFF,
    629     CAM_LENS_SHADING_MAP_MODE_ON,
    630 } cam_lens_shading_map_mode_t;
    631 
    632 typedef enum {
    633     CAM_LENS_SHADING_MODE_OFF,
    634     CAM_LENS_SHADING_MODE_FAST,
    635     CAM_LENS_SHADING_MODE_HIGH_QUALITY,
    636 } cam_lens_shading_mode_t;
    637 
    638 typedef enum {
    639     CAM_FACE_DETECT_MODE_OFF,
    640     CAM_FACE_DETECT_MODE_SIMPLE,
    641     CAM_FACE_DETECT_MODE_FULL,
    642 } cam_face_detect_mode_t;
    643 
    644 typedef enum {
    645     CAM_TONEMAP_MODE_CONTRAST_CURVE,
    646     CAM_TONEMAP_MODE_FAST,
    647     CAM_TONEMAP_MODE_HIGH_QUALITY,
    648 } cam_tonemap_mode_t;
    649 
    650 typedef enum {
    651   CAM_CDS_MODE_OFF,
    652   CAM_CDS_MODE_ON,
    653   CAM_CDS_MODE_AUTO,
    654   CAM_CDS_MODE_MAX
    655 } cam_cds_mode_type_t;
    656 
    657 typedef struct  {
    658     int32_t left;
    659     int32_t top;
    660     int32_t width;
    661     int32_t height;
    662 } cam_rect_t;
    663 
    664 typedef struct  {
    665     cam_rect_t rect;
    666     int32_t weight; /* weight of the area, valid for focusing/metering areas */
    667 } cam_area_t;
    668 
    669 typedef enum {
    670     CAM_STREAMING_MODE_CONTINUOUS, /* continous streaming */
    671     CAM_STREAMING_MODE_BURST,      /* burst streaming */
    672     CAM_STREAMING_MODE_MAX
    673 } cam_streaming_mode_t;
    674 
    675 typedef enum {
    676     IS_TYPE_NONE,
    677     IS_TYPE_DIS,
    678     IS_TYPE_GA_DIS,
    679     IS_TYPE_EIS_1_0,
    680     IS_TYPE_EIS_2_0
    681 } cam_is_type_t;
    682 
    683 typedef enum {
    684    DIS_DISABLE,
    685    DIS_ENABLE
    686 } cam_dis_mode_t;
    687 
    688 typedef enum {
    689   NON_SECURE,
    690   SECURE
    691 } cam_stream_secure_t;
    692 
    693 #define CAM_REPROCESS_MASK_TYPE_WNR (1<<0)
    694 
    695 /* event from server */
    696 typedef enum {
    697     CAM_EVENT_TYPE_MAP_UNMAP_DONE  = (1<<0),
    698     CAM_EVENT_TYPE_AUTO_FOCUS_DONE = (1<<1),
    699     CAM_EVENT_TYPE_ZOOM_DONE       = (1<<2),
    700     CAM_EVENT_TYPE_DAEMON_DIED     = (1<<3),
    701     CAM_EVENT_TYPE_DAEMON_PULL_REQ = (1<<4),
    702     CAM_EVENT_TYPE_MAX
    703 } cam_event_type_t;
    704 
    705 typedef enum {
    706     CAM_EXP_BRACKETING_OFF,
    707     CAM_EXP_BRACKETING_ON
    708 } cam_bracket_mode;
    709 
    710 typedef struct {
    711     cam_bracket_mode mode;
    712     char values[MAX_EXP_BRACKETING_LENGTH];  /* user defined values */
    713 } cam_exp_bracketing_t;
    714 
    715 typedef struct {
    716   unsigned int num_frames;
    717   cam_exp_bracketing_t exp_val;
    718 } cam_hdr_bracketing_info_t;
    719 
    720 typedef struct {
    721     uint8_t chromatixData[CHROMATIX_SIZE];
    722     uint8_t snapchromatixData[CHROMATIX_SIZE];
    723     uint8_t common_chromatixData[COMMONCHROMATIX_SIZE];
    724     uint8_t cpp_chromatixData[CPPCHROMATIX_SIZE];
    725 } tune_chromatix_t;
    726 
    727 typedef struct {
    728     uint8_t af_tuneData[AFTUNE_SIZE];
    729 } tune_autofocus_t;
    730 
    731 typedef struct {
    732     uint8_t stepsize;
    733     uint8_t direction;
    734     int32_t num_steps;
    735     uint8_t ttype;
    736 } tune_actuator_t;
    737 
    738 typedef struct {
    739     uint8_t module;
    740     uint8_t type;
    741     int32_t value;
    742 } tune_cmd_t;
    743 
    744 typedef enum {
    745     CAM_AEC_ROI_OFF,
    746     CAM_AEC_ROI_ON
    747 } cam_aec_roi_ctrl_t;
    748 
    749 typedef enum {
    750     CAM_AEC_ROI_BY_INDEX,
    751     CAM_AEC_ROI_BY_COORDINATE,
    752 } cam_aec_roi_type_t;
    753 
    754 typedef struct {
    755     uint32_t x;
    756     uint32_t y;
    757 } cam_coordinate_type_t;
    758 
    759 typedef struct {
    760     int32_t numerator;
    761     int32_t denominator;
    762 } cam_rational_type_t;
    763 
    764 typedef struct {
    765     cam_aec_roi_ctrl_t aec_roi_enable;
    766     cam_aec_roi_type_t aec_roi_type;
    767     union {
    768         cam_coordinate_type_t coordinate[MAX_ROI];
    769         uint32_t aec_roi_idx[MAX_ROI];
    770     } cam_aec_roi_position;
    771 } cam_set_aec_roi_t;
    772 
    773 typedef struct {
    774     uint32_t frm_id;
    775     uint8_t num_roi;
    776     cam_rect_t roi[MAX_ROI];
    777     int32_t weight[MAX_ROI];
    778     uint8_t is_multiwindow;
    779 } cam_roi_info_t;
    780 
    781 typedef enum {
    782     CAM_WAVELET_DENOISE_YCBCR_PLANE,
    783     CAM_WAVELET_DENOISE_CBCR_ONLY,
    784     CAM_WAVELET_DENOISE_STREAMLINE_YCBCR,
    785     CAM_WAVELET_DENOISE_STREAMLINED_CBCR
    786 } cam_denoise_process_type_t;
    787 
    788 typedef struct {
    789     int denoise_enable;
    790     cam_denoise_process_type_t process_plates;
    791 } cam_denoise_param_t;
    792 
    793 #define CAM_FACE_PROCESS_MASK_DETECTION    (1<<0)
    794 #define CAM_FACE_PROCESS_MASK_RECOGNITION  (1<<1)
    795 typedef struct {
    796     int fd_mode;               /* mask of face process */
    797     int num_fd;
    798 } cam_fd_set_parm_t;
    799 
    800 typedef enum {
    801     QCAMERA_FD_PREVIEW,
    802     QCAMERA_FD_SNAPSHOT
    803 }qcamera_face_detect_type_t;
    804 
    805 typedef struct {
    806     int32_t face_id;            /* unique id for face tracking within view unless view changes */
    807     int8_t score;              /* score of confidence (0, -100) */
    808     cam_rect_t face_boundary;  /* boundary of face detected */
    809     cam_coordinate_type_t left_eye_center;  /* coordinate of center of left eye */
    810     cam_coordinate_type_t right_eye_center; /* coordinate of center of right eye */
    811     cam_coordinate_type_t mouth_center;     /* coordinate of center of mouth */
    812     uint8_t smile_degree;      /* smile degree (0, -100) */
    813     uint8_t smile_confidence;  /* smile confidence (0, 100) */
    814     uint8_t face_recognised;   /* if face is recognised */
    815     int8_t gaze_angle;         /* -90 -45 0 45 90 for head left to rigth tilt */
    816     int8_t updown_dir;         /* up down direction (-90, 90) */
    817     int8_t leftright_dir;      /* left right direction (-90, 90) */
    818     int8_t roll_dir;           /* roll direction (-90, 90) */
    819     int8_t left_right_gaze;    /* left right gaze degree (-50, 50) */
    820     int8_t top_bottom_gaze;    /* up down gaze degree (-50, 50) */
    821     uint8_t blink_detected;    /* if blink is detected */
    822     uint8_t left_blink;        /* left eye blink degeree (0, -100) */
    823     uint8_t right_blink;       /* right eye blink degree (0, - 100) */
    824 } cam_face_detection_info_t;
    825 
    826 typedef struct {
    827     uint32_t frame_id;                         /* frame index of which faces are detected */
    828     uint8_t num_faces_detected;                /* number of faces detected */
    829     cam_face_detection_info_t faces[MAX_ROI];  /* detailed information of faces detected */
    830     qcamera_face_detect_type_t fd_type;        /* face detect for preview or snapshot frame*/
    831 } cam_face_detection_data_t;
    832 
    833 #define CAM_HISTOGRAM_STATS_SIZE 256
    834 typedef struct {
    835     uint32_t max_hist_value;
    836     uint32_t hist_buf[CAM_HISTOGRAM_STATS_SIZE]; /* buf holding histogram stats data */
    837 } cam_histogram_data_t;
    838 
    839 typedef struct {
    840     cam_histogram_data_t r_stats;
    841     cam_histogram_data_t b_stats;
    842     cam_histogram_data_t gr_stats;
    843     cam_histogram_data_t gb_stats;
    844 } cam_bayer_hist_stats_t;
    845 
    846 typedef enum {
    847     CAM_HISTOGRAM_TYPE_BAYER,
    848     CAM_HISTOGRAM_TYPE_YUV
    849 } cam_histogram_type_t;
    850 
    851 typedef struct {
    852     cam_histogram_type_t type;
    853     union {
    854         cam_bayer_hist_stats_t bayer_stats;
    855         cam_histogram_data_t yuv_stats;
    856     };
    857 } cam_hist_stats_t;
    858 
    859 enum cam_focus_distance_index{
    860   CAM_FOCUS_DISTANCE_NEAR_INDEX,  /* 0 */
    861   CAM_FOCUS_DISTANCE_OPTIMAL_INDEX,
    862   CAM_FOCUS_DISTANCE_FAR_INDEX,
    863   CAM_FOCUS_DISTANCE_MAX_INDEX
    864 };
    865 
    866 typedef struct {
    867   float focus_distance[CAM_FOCUS_DISTANCE_MAX_INDEX];
    868 } cam_focus_distances_info_t;
    869 
    870 /* Different autofocus cycle when calling do_autoFocus
    871  * CAM_AF_COMPLETE_EXISTING_SWEEP: Complete existing sweep
    872  * if one is ongoing, and lock.
    873  * CAM_AF_DO_ONE_FULL_SWEEP: Do one full sweep, regardless
    874  * of the current state, and lock.
    875  * CAM_AF_START_CONTINUOUS_SWEEP: Start continous sweep.
    876  * After do_autoFocus, HAL receives an event: CAM_AF_FOCUSED,
    877  * or CAM_AF_NOT_FOCUSED.
    878  * cancel_autoFocus stops any lens movement.
    879  * Each do_autoFocus call only produces 1 FOCUSED/NOT_FOCUSED
    880  * event, not both.
    881  */
    882 typedef enum {
    883     CAM_AF_COMPLETE_EXISTING_SWEEP,
    884     CAM_AF_DO_ONE_FULL_SWEEP,
    885     CAM_AF_START_CONTINUOUS_SWEEP
    886 } cam_autofocus_cycle_t;
    887 
    888 typedef enum {
    889     CAM_AF_SCANNING,
    890     CAM_AF_FOCUSED,
    891     CAM_AF_NOT_FOCUSED,
    892     CAM_AF_CANCELLED
    893 } cam_autofocus_state_t;
    894 
    895 typedef struct {
    896     cam_autofocus_state_t focus_state;           /* state of focus */
    897     cam_focus_distances_info_t focus_dist;       /* focus distance */
    898 } cam_auto_focus_data_t;
    899 
    900 typedef struct {
    901   uint32_t is_hdr_scene;
    902   float    hdr_confidence;
    903 } cam_asd_hdr_scene_data_t;
    904 
    905 typedef struct {
    906     uint32_t stream_id;
    907     cam_rect_t crop;
    908 } cam_stream_crop_info_t;
    909 
    910 typedef struct {
    911     uint8_t num_of_streams;
    912     cam_stream_crop_info_t crop_info[MAX_NUM_STREAMS];
    913 } cam_crop_data_t;
    914 
    915 typedef enum {
    916     DO_NOT_NEED_FUTURE_FRAME,
    917     NEED_FUTURE_FRAME,
    918 } cam_prep_snapshot_state_t;
    919 
    920 typedef struct {
    921     float gains[4];
    922 } cam_color_correct_gains_t;
    923 
    924 typedef struct {
    925     // If LED is ON and Burst Num > 1, this is first LED ON frame
    926     uint32_t min_frame_idx;
    927     // If LED is ON and Burst Num > 1, this is first LED Off frame after ON
    928     uint32_t max_frame_idx;
    929     // Used only when LED Is ON and burst num > 1
    930     uint32_t num_led_on_frames;
    931     // Skip count after LED is turned OFF
    932     uint32_t frame_skip_count;
    933 } cam_frame_idx_range_t;
    934 
    935 typedef enum {
    936   S_NORMAL = 0,
    937   S_SCENERY,
    938   S_PORTRAIT,
    939   S_PORTRAIT_BACKLIGHT,
    940   S_SCENERY_BACKLIGHT,
    941   S_BACKLIGHT,
    942   S_MAX,
    943 } cam_auto_scene_t;
    944 
    945 typedef struct {
    946    uint32_t meta_frame_id;
    947 } cam_meta_valid_t;
    948 
    949 typedef struct {
    950     cam_flash_mode_t flash_mode;
    951     float            aperture_value;
    952     cam_flash_state_t        flash_state;
    953     float            focal_length;
    954     float            f_number;
    955     int              sensing_method;
    956     float            crop_factor;
    957 } cam_sensor_params_t;
    958 
    959 typedef struct {
    960     float exp_time;
    961     int iso_value;
    962     uint32_t flash_needed;
    963     int settled;
    964     cam_wb_mode_type wb_mode;
    965     uint32_t metering_mode;
    966     uint32_t exposure_program;
    967     uint32_t exposure_mode;
    968     uint32_t scenetype;
    969     float brightness;
    970 } cam_3a_params_t;
    971 
    972 
    973 
    974 typedef struct {
    975     uint32_t tuning_data_version;
    976     uint32_t tuning_sensor_data_size;
    977     uint32_t tuning_vfe_data_size;
    978     uint32_t tuning_cpp_data_size;
    979     uint32_t tuning_cac_data_size;
    980     uint32_t tuning_mod3_data_size;
    981     uint8_t  data[TUNING_DATA_MAX];
    982 }tuning_params_t;
    983 
    984 typedef struct {
    985   uint8_t private_isp_data[MAX_ISP_DATA_SIZE];
    986 } cam_chromatix_lite_isp_t;
    987 
    988 typedef struct {
    989   uint8_t private_pp_data[MAX_PP_DATA_SIZE];
    990 } cam_chromatix_lite_pp_t;
    991 
    992 typedef struct {
    993   uint8_t private_stats_data[MAX_AE_STATS_DATA_SIZE];
    994 } cam_chromatix_lite_ae_stats_t;
    995 
    996 typedef struct {
    997   uint8_t private_stats_data[MAX_AWB_STATS_DATA_SIZE];
    998 } cam_chromatix_lite_awb_stats_t;
    999 
   1000 typedef struct {
   1001   uint8_t private_stats_data[MAX_AF_STATS_DATA_SIZE];
   1002 } cam_chromatix_lite_af_stats_t;
   1003 
   1004 typedef struct {
   1005   uint8_t private_stats_data[MAX_ASD_STATS_DATA_SIZE];
   1006 } cam_chromatix_lite_asd_stats_t;
   1007 
   1008 typedef struct {
   1009     cam_dimension_t stream_sizes[MAX_NUM_STREAMS];
   1010     uint32_t num_streams;
   1011     cam_stream_type_t type[MAX_NUM_STREAMS];
   1012     uint32_t postprocess_mask[MAX_NUM_STREAMS];
   1013 } cam_stream_size_info_t;
   1014 
   1015 typedef struct {
   1016     uint32_t num_streams;
   1017     uint32_t streamID[MAX_NUM_STREAMS];
   1018 } cam_stream_ID_t;
   1019 
   1020 typedef  struct {
   1021     uint8_t is_stats_valid;               /* if histgram data is valid */
   1022     cam_hist_stats_t stats_data;          /* histogram data */
   1023 
   1024     uint8_t is_faces_valid;               /* if face detection data is valid */
   1025     cam_face_detection_data_t faces_data; /* face detection result */
   1026 
   1027     uint8_t is_focus_valid;               /* if focus data is valid */
   1028     cam_auto_focus_data_t focus_data;     /* focus data */
   1029 
   1030     uint8_t is_crop_valid;                /* if crop data is valid */
   1031     cam_crop_data_t crop_data;            /* crop data */
   1032 
   1033     uint8_t is_prep_snapshot_done_valid;  /* if prep snapshot done is valid */
   1034     cam_prep_snapshot_state_t prep_snapshot_done_state;  /* prepare snapshot done state */
   1035 
   1036     /* if good frame idx range is valid */
   1037     uint8_t is_good_frame_idx_range_valid;
   1038     /* good frame idx range, make sure:
   1039      * 1. good_frame_idx_range.min_frame_idx > current_frame_idx
   1040      * 2. good_frame_idx_range.min_frame_idx - current_frame_idx < 100 */
   1041     cam_frame_idx_range_t good_frame_idx_range;
   1042 
   1043     uint32_t is_hdr_scene_data_valid;
   1044     cam_asd_hdr_scene_data_t hdr_scene_data;
   1045     uint8_t is_asd_decision_valid;
   1046     cam_auto_scene_t scene; //scene type as decided by ASD
   1047 
   1048     char private_metadata[MAX_METADATA_PRIVATE_PAYLOAD_SIZE];
   1049 
   1050     /* AE parameters */
   1051     uint8_t is_3a_params_valid;
   1052     cam_3a_params_t cam_3a_params;
   1053 
   1054     /* sensor parameters */
   1055     uint8_t is_sensor_params_valid;
   1056     cam_sensor_params_t sensor_params;
   1057 
   1058     /* Meta valid params */
   1059     uint8_t is_meta_valid;
   1060     cam_meta_valid_t meta_valid_params;
   1061 
   1062     /*Tuning Data*/
   1063     uint8_t is_tuning_params_valid;
   1064     tuning_params_t tuning_params;
   1065 
   1066     uint8_t is_chromatix_lite_isp_valid;
   1067     cam_chromatix_lite_isp_t chromatix_lite_isp_data;
   1068 
   1069     uint8_t is_chromatix_lite_pp_valid;
   1070     cam_chromatix_lite_pp_t chromatix_lite_pp_data;
   1071 
   1072     uint8_t is_chromatix_lite_ae_stats_valid;
   1073     cam_chromatix_lite_ae_stats_t chromatix_lite_ae_stats_data;
   1074 
   1075     uint8_t is_chromatix_lite_awb_stats_valid;
   1076     cam_chromatix_lite_awb_stats_t chromatix_lite_awb_stats_data;
   1077 
   1078     uint8_t is_chromatix_lite_af_stats_valid;
   1079     cam_chromatix_lite_af_stats_t chromatix_lite_af_stats_data;
   1080 } cam_metadata_info_t;
   1081 
   1082 typedef enum {
   1083     CAM_INTF_PARM_HAL_VERSION,
   1084 
   1085     /* Overall mode of 3A control routines. We need to have this parameter
   1086      * because not all android.control.* have an OFF option, for example,
   1087      * AE_FPS_Range, aePrecaptureTrigger */
   1088     CAM_INTF_META_MODE,
   1089     /* Whether AE is currently updating the sensor exposure and sensitivity
   1090      * fields */
   1091     CAM_INTF_META_AEC_MODE,
   1092     CAM_INTF_PARM_WHITE_BALANCE,
   1093     CAM_INTF_PARM_FOCUS_MODE,
   1094 
   1095     /* common between HAL1 and HAL3 */
   1096     CAM_INTF_PARM_ANTIBANDING,
   1097     CAM_INTF_PARM_EXPOSURE_COMPENSATION,
   1098     CAM_INTF_PARM_EV_STEP,
   1099     CAM_INTF_PARM_AEC_LOCK,
   1100     CAM_INTF_PARM_FPS_RANGE,
   1101     CAM_INTF_PARM_AWB_LOCK, /* 10 */
   1102     CAM_INTF_PARM_EFFECT,
   1103     CAM_INTF_PARM_BESTSHOT_MODE,
   1104     CAM_INTF_PARM_DIS_ENABLE,
   1105     CAM_INTF_PARM_LED_MODE,
   1106     CAM_INTF_META_HISTOGRAM,
   1107     CAM_INTF_META_FACE_DETECTION,
   1108 
   1109     /* specific to HAl1 */
   1110     CAM_INTF_META_AUTOFOCUS_DATA,
   1111     CAM_INTF_PARM_QUERY_FLASH4SNAP,
   1112     CAM_INTF_PARM_EXPOSURE,
   1113     CAM_INTF_PARM_SHARPNESS, /* 20 */
   1114     CAM_INTF_PARM_CONTRAST,
   1115     CAM_INTF_PARM_SATURATION,
   1116     CAM_INTF_PARM_BRIGHTNESS,
   1117     CAM_INTF_PARM_ISO,
   1118     CAM_INTF_PARM_ZOOM,
   1119     CAM_INTF_PARM_ROLLOFF,
   1120     CAM_INTF_PARM_MODE,             /* camera mode */
   1121     CAM_INTF_PARM_AEC_ALGO_TYPE,    /* auto exposure algorithm */
   1122     CAM_INTF_PARM_FOCUS_ALGO_TYPE,  /* focus algorithm */
   1123     CAM_INTF_PARM_AEC_ROI, /* 30 */
   1124     CAM_INTF_PARM_AF_ROI,
   1125     CAM_INTF_PARM_SCE_FACTOR,
   1126     CAM_INTF_PARM_FD,
   1127     CAM_INTF_PARM_MCE,
   1128     CAM_INTF_PARM_HFR,
   1129     CAM_INTF_PARM_REDEYE_REDUCTION,
   1130     CAM_INTF_PARM_WAVELET_DENOISE,
   1131     CAM_INTF_PARM_TEMPORAL_DENOISE,
   1132     CAM_INTF_PARM_HISTOGRAM,
   1133     CAM_INTF_PARM_ASD_ENABLE, /* 40 */
   1134     CAM_INTF_PARM_RECORDING_HINT,
   1135     CAM_INTF_PARM_HDR,
   1136     CAM_INTF_PARM_MAX_DIMENSION,
   1137     CAM_INTF_PARM_RAW_DIMENSION,
   1138     CAM_INTF_PARM_FRAMESKIP,
   1139     CAM_INTF_PARM_ZSL_MODE,  /* indicating if it's running in ZSL mode */
   1140     CAM_INTF_PARM_BURST_NUM,
   1141     CAM_INTF_PARM_RETRO_BURST_NUM,
   1142     CAM_INTF_PARM_BURST_LED_ON_PERIOD,
   1143     CAM_INTF_PARM_HDR_NEED_1X, /* if HDR needs 1x output */ /* 50 */
   1144     CAM_INTF_PARM_LOCK_CAF,
   1145     CAM_INTF_PARM_VIDEO_HDR,
   1146     CAM_INTF_PARM_SENSOR_HDR,
   1147     CAM_INTF_PARM_ROTATION,
   1148     CAM_INTF_PARM_SCALE,
   1149     CAM_INTF_PARM_VT, /* indicating if it's a Video Call Apllication */
   1150     CAM_INTF_META_CROP_DATA,
   1151     CAM_INTF_META_PREP_SNAPSHOT_DONE,
   1152     CAM_INTF_META_GOOD_FRAME_IDX_RANGE,
   1153     CAM_INTF_META_ASD_HDR_SCENE_DATA, /* 60 */
   1154     CAM_INTF_META_ASD_SCENE_TYPE,
   1155     CAM_INTF_META_CURRENT_SCENE,
   1156     CAM_INTF_META_AEC_INFO,
   1157     CAM_INTF_META_SENSOR_INFO,
   1158     CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE,
   1159     CAM_INTF_META_CHROMATIX_LITE_ISP,
   1160     CAM_INTF_META_CHROMATIX_LITE_PP,
   1161     CAM_INTF_META_CHROMATIX_LITE_AE,
   1162     CAM_INTF_META_CHROMATIX_LITE_AWB,
   1163     CAM_INTF_META_CHROMATIX_LITE_AF, /* 70 */
   1164     CAM_INTF_META_CHROMATIX_LITE_ASD,
   1165     CAM_INTF_PARM_GET_CHROMATIX,
   1166     CAM_INTF_PARM_SET_RELOAD_CHROMATIX,
   1167     CAM_INTF_PARM_SET_AUTOFOCUSTUNING,
   1168     CAM_INTF_PARM_GET_AFTUNE,
   1169     CAM_INTF_PARM_SET_RELOAD_AFTUNE,
   1170     CAM_INTF_PARM_SET_VFE_COMMAND,
   1171     CAM_INTF_PARM_SET_PP_COMMAND,
   1172     CAM_INTF_PARM_TINTLESS,
   1173     CAM_INTF_PARM_LONGSHOT_ENABLE, /* 80 */
   1174     CAM_INTF_PARM_RDI_MODE,
   1175     CAM_INTF_PARM_CDS_MODE,
   1176 
   1177     /* stream based parameters */
   1178     CAM_INTF_PARM_DO_REPROCESS,
   1179     CAM_INTF_PARM_SET_BUNDLE,
   1180     CAM_INTF_PARM_STREAM_FLIP,
   1181     CAM_INTF_PARM_GET_OUTPUT_CROP,
   1182 
   1183     CAM_INTF_PARM_EZTUNE_CMD,
   1184 
   1185     /* specific to HAL3 */
   1186     /* Whether the metadata maps to a valid frame number */
   1187     CAM_INTF_META_FRAME_NUMBER_VALID,
   1188     /* Whether the urgent metadata maps to a valid frame number */
   1189     CAM_INTF_META_URGENT_FRAME_NUMBER_VALID,
   1190     /* Whether the stream buffer corresponding this frame is dropped or not */
   1191     CAM_INTF_META_FRAME_DROPPED, /* 90 */
   1192     /* COLOR CORRECTION.*/
   1193     CAM_INTF_META_COLOR_CORRECT_MODE,
   1194     /* A transform matrix to chromatically adapt pixels in the CIE XYZ (1931)
   1195      * color space from the scene illuminant to the sRGB-standard D65-illuminant. */
   1196     CAM_INTF_META_COLOR_CORRECT_TRANSFORM,
   1197     /*Color channel gains in the Bayer raw domain in the order [RGeGoB]*/
   1198     CAM_INTF_META_COLOR_CORRECT_GAINS,
   1199     /*The best fit color transform matrix calculated by the stats*/
   1200     CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM,
   1201     /*The best fit color channels gains calculated by the stats*/
   1202     CAM_INTF_META_PRED_COLOR_CORRECT_GAINS,
   1203     /* CONTROL */
   1204     /* A frame counter set by the framework. Must be maintained unchanged in
   1205      * output frame. */
   1206     CAM_INTF_META_FRAME_NUMBER,
   1207     /* A frame counter set by the framework. Must be maintained unchanged in
   1208      * output frame. */
   1209     CAM_INTF_META_URGENT_FRAME_NUMBER,
   1210     /*Number of streams and size of streams in current configuration*/
   1211     CAM_INTF_META_STREAM_INFO,
   1212     /* List of areas to use for metering */
   1213     CAM_INTF_META_AEC_ROI,
   1214     /* Whether the HAL must trigger precapture metering.*/
   1215     CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, /* 100 */
   1216     /* The ID sent with the latest CAMERA2_TRIGGER_PRECAPTURE_METERING call */
   1217     /* Current state of AE algorithm */
   1218     CAM_INTF_META_AEC_STATE,
   1219     /* List of areas to use for focus estimation */
   1220     CAM_INTF_META_AF_ROI,
   1221     /* Whether the HAL must trigger autofocus. */
   1222     CAM_INTF_META_AF_TRIGGER,
   1223     /* Current state of AF algorithm */
   1224     CAM_INTF_META_AF_STATE,
   1225     /* List of areas to use for illuminant estimation */
   1226     CAM_INTF_META_AWB_REGIONS,
   1227     /* Current state of AWB algorithm */
   1228     CAM_INTF_META_AWB_STATE,
   1229     /*Whether black level compensation is frozen or free to vary*/
   1230     CAM_INTF_META_BLACK_LEVEL_LOCK,
   1231     /* Information to 3A routines about the purpose of this capture, to help
   1232      * decide optimal 3A strategy */
   1233     CAM_INTF_META_CAPTURE_INTENT,
   1234     /* DEMOSAIC */
   1235     /* Controls the quality of the demosaicing processing */
   1236     CAM_INTF_META_DEMOSAIC,
   1237     /* EDGE */
   1238     /* Operation mode for edge enhancement */
   1239     CAM_INTF_META_EDGE_MODE, /* 110 */
   1240     /* Control the amount of edge enhancement applied to the images.*/
   1241     /* 1-10; 10 is maximum sharpening */
   1242     CAM_INTF_META_SHARPNESS_STRENGTH,
   1243     /* FLASH */
   1244     /* Power for flash firing/torch, 10 is max power; 0 is no flash. Linear */
   1245     CAM_INTF_META_FLASH_POWER,
   1246     /* Firing time of flash relative to start of exposure, in nanoseconds*/
   1247     CAM_INTF_META_FLASH_FIRING_TIME,
   1248     /* Current state of the flash unit */
   1249     CAM_INTF_META_FLASH_STATE,
   1250     /* GEOMETRIC */
   1251     /* Operating mode of geometric correction */
   1252     CAM_INTF_META_GEOMETRIC_MODE,
   1253     /* Control the amount of shading correction applied to the images */
   1254     CAM_INTF_META_GEOMETRIC_STRENGTH,
   1255     /* HOT PIXEL */
   1256     /* Set operational mode for hot pixel correction */
   1257     CAM_INTF_META_HOTPIXEL_MODE,
   1258     /* LENS */
   1259     /* Size of the lens aperture */
   1260     CAM_INTF_META_LENS_APERTURE,
   1261     /* State of lens neutral density filter(s) */
   1262     CAM_INTF_META_LENS_FILTERDENSITY,
   1263     /* Lens optical zoom setting */
   1264     CAM_INTF_META_LENS_FOCAL_LENGTH, /* 120 */
   1265     /* Distance to plane of sharpest focus, measured from frontmost surface
   1266      * of the lens */
   1267     CAM_INTF_META_LENS_FOCUS_DISTANCE,
   1268     /* The range of scene distances that are in sharp focus (depth of field) */
   1269     CAM_INTF_META_LENS_FOCUS_RANGE,
   1270     /* Whether optical image stabilization is enabled. */
   1271     CAM_INTF_META_LENS_OPT_STAB_MODE,
   1272     /*Whether the hal needs to output the lens shading map*/
   1273     CAM_INTF_META_LENS_SHADING_MAP_MODE,
   1274     /* Current lens status */
   1275     CAM_INTF_META_LENS_STATE,
   1276     /* NOISE REDUCTION */
   1277     /* Mode of operation for the noise reduction algorithm */
   1278     CAM_INTF_META_NOISE_REDUCTION_MODE,
   1279    /* Control the amount of noise reduction applied to the images.
   1280     * 1-10; 10 is max noise reduction */
   1281     CAM_INTF_META_NOISE_REDUCTION_STRENGTH,
   1282     /* SCALER */
   1283     /* Top-left corner and width of the output region to select from the active
   1284      * pixel array */
   1285     CAM_INTF_META_SCALER_CROP_REGION,
   1286     /* The estimated scene illumination lighting frequency */
   1287     CAM_INTF_META_SCENE_FLICKER,
   1288     /* SENSOR */
   1289     /* Duration each pixel is exposed to light, in nanoseconds */
   1290     CAM_INTF_META_SENSOR_EXPOSURE_TIME, /* 130 */
   1291     /* Duration from start of frame exposure to start of next frame exposure,
   1292      * in nanoseconds */
   1293     CAM_INTF_META_SENSOR_FRAME_DURATION,
   1294     /* Gain applied to image data. Must be implemented through analog gain only
   1295      * if set to values below 'maximum analog sensitivity'. */
   1296     CAM_INTF_META_SENSOR_SENSITIVITY,
   1297     /* Time at start of exposure of first row */
   1298     CAM_INTF_META_SENSOR_TIMESTAMP,
   1299     /* Duration b/w start of first row exposure and the start of last
   1300        row exposure in nanoseconds */
   1301     CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW,
   1302     /* SHADING */
   1303     /* Quality of lens shading correction applied to the image data */
   1304     CAM_INTF_META_SHADING_MODE,
   1305     /* Control the amount of shading correction applied to the images.
   1306      * unitless: 1-10; 10 is full shading compensation */
   1307     CAM_INTF_META_SHADING_STRENGTH,
   1308     /* STATISTICS */
   1309     /* State of the face detector unit */
   1310     CAM_INTF_META_STATS_FACEDETECT_MODE,
   1311     /* Operating mode for histogram generation */
   1312     CAM_INTF_META_STATS_HISTOGRAM_MODE,
   1313     /* Operating mode for sharpness map generation */
   1314     CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,
   1315     /* A 3-channel sharpness map, based on the raw sensor data,
   1316      * If only a monochrome sharpness map is supported, all channels
   1317      * should have the same data
   1318      */
   1319     CAM_INTF_META_STATS_SHARPNESS_MAP, /* 140 */
   1320 
   1321     /* TONEMAP */
   1322     /* Tone map mode */
   1323     CAM_INTF_META_TONEMAP_MODE,
   1324     /* Table mapping RGB input values to output values */
   1325     CAM_INTF_META_TONEMAP_CURVES,
   1326 
   1327     CAM_INTF_META_FLASH_MODE,
   1328     /* 2D array of gain factors for each color channel that was used to
   1329      * compensate for lens shading for this frame */
   1330     CAM_INTF_META_LENS_SHADING_MAP,
   1331     CAM_INTF_META_PRIVATE_DATA,
   1332     CAM_INTF_PARM_STATS_DEBUG_MASK,
   1333     CAM_INTF_PARM_STATS_AF_PAAF,
   1334     /* Indicates streams ID of all the requested buffers */
   1335     CAM_INTF_META_STREAM_ID,
   1336     CAM_INTF_PARM_FOCUS_BRACKETING,
   1337     CAM_INTF_PARM_FLASH_BRACKETING, /* 150 */
   1338     CAM_INTF_PARM_GET_IMG_PROP,
   1339     CAM_INTF_META_JPEG_GPS_COORDINATES,
   1340     CAM_INTF_META_JPEG_GPS_PROC_METHODS,
   1341     CAM_INTF_META_JPEG_GPS_TIMESTAMP,
   1342     CAM_INTF_META_JPEG_ORIENTATION,
   1343     CAM_INTF_META_JPEG_QUALITY,
   1344     CAM_INTF_META_JPEG_THUMB_QUALITY,
   1345     CAM_INTF_META_JPEG_THUMB_SIZE,
   1346 
   1347     CAM_INTF_META_TEST_PATTERN_DATA,
   1348     /* DNG file support */
   1349     CAM_INTF_META_PROFILE_TONE_CURVE, /* 160 */
   1350     CAM_INTF_META_NEUTRAL_COL_POINT,
   1351 
   1352     /* OTP : WB gr/gb */
   1353     CAM_INTF_META_OTP_WB_GRGB,
   1354 
   1355     /* CAC */
   1356     CAM_INTF_PARM_CAC,
   1357     CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,
   1358     CAM_INTF_META_USE_AV_TIMER,
   1359     /* Whether HAL has run into DRAIN error */
   1360     CAM_INTF_META_DAEMON_RESTART,
   1361     CAM_INTF_PARM_MAX
   1362 } cam_intf_parm_type_t;
   1363 
   1364 typedef struct {
   1365     int   forced;
   1366     union {
   1367       uint32_t force_linecount_value;
   1368       float    force_gain_value;
   1369       float    force_snap_exp_value;
   1370       float    force_exp_value;
   1371       uint32_t force_snap_linecount_value;
   1372       float    force_snap_gain_value;
   1373     } u;
   1374 } cam_ez_force_params_t;
   1375 
   1376 typedef enum {
   1377     CAM_EZTUNE_CMD_STATUS,
   1378     CAM_EZTUNE_CMD_AEC_ENABLE,
   1379     CAM_EZTUNE_CMD_AWB_ENABLE,
   1380     CAM_EZTUNE_CMD_AF_ENABLE,
   1381     CAM_EZTUNE_CMD_AEC_FORCE_LINECOUNT,
   1382     CAM_EZTUNE_CMD_AEC_FORCE_GAIN,
   1383     CAM_EZTUNE_CMD_AEC_FORCE_EXP,
   1384     CAM_EZTUNE_CMD_AEC_FORCE_SNAP_LC,
   1385     CAM_EZTUNE_CMD_AEC_FORCE_SNAP_GAIN,
   1386     CAM_EZTUNE_CMD_AEC_FORCE_SNAP_EXP,
   1387     CAM_EZTUNE_CMD_AWB_MODE,
   1388 } cam_eztune_cmd_type_t;
   1389 
   1390 typedef struct {
   1391   cam_eztune_cmd_type_t   cmd;
   1392   union {
   1393     int                   running;
   1394     int                   aec_enable;
   1395     int                   awb_enable;
   1396     int                   af_enable;
   1397     cam_ez_force_params_t ez_force_param;
   1398     int                   awb_mode;
   1399   } u;
   1400 } cam_eztune_cmd_data_t;
   1401 
   1402 
   1403 /*****************************************************************************
   1404  *                 Code for HAL3 data types                                  *
   1405  ****************************************************************************/
   1406 typedef enum {
   1407     CAM_INTF_METADATA_MAX
   1408 } cam_intf_metadata_type_t;
   1409 
   1410 typedef enum {
   1411     CAM_INTENT_CUSTOM,
   1412     CAM_INTENT_PREVIEW,
   1413     CAM_INTENT_STILL_CAPTURE,
   1414     CAM_INTENT_VIDEO_RECORD,
   1415     CAM_INTENT_VIDEO_SNAPSHOT,
   1416     CAM_INTENT_ZERO_SHUTTER_LAG,
   1417     CAM_INTENT_MAX,
   1418 } cam_intent_t;
   1419 
   1420 typedef enum {
   1421     /* Full application control of pipeline. All 3A routines are disabled,
   1422      * no other settings in android.control.* have any effect */
   1423     CAM_CONTROL_OFF,
   1424     /* Use settings for each individual 3A routine. Manual control of capture
   1425      * parameters is disabled. All controls in android.control.* besides sceneMode
   1426      * take effect */
   1427     CAM_CONTROL_AUTO,
   1428     /* Use specific scene mode. Enabling this disables control.aeMode,
   1429      * control.awbMode and control.afMode controls; the HAL must ignore those
   1430      * settings while USE_SCENE_MODE is active (except for FACE_PRIORITY scene mode).
   1431      * Other control entries are still active. This setting can only be used if
   1432      * availableSceneModes != UNSUPPORTED. TODO: Should we remove this and handle this
   1433      * in HAL ?*/
   1434     CAM_CONTROL_USE_SCENE_MODE,
   1435     CAM_CONTROL_MAX
   1436 } cam_control_mode_t;
   1437 
   1438 typedef enum {
   1439     /* Use the android.colorCorrection.transform matrix to do color conversion */
   1440     CAM_COLOR_CORRECTION_TRANSFORM_MATRIX,
   1441     /* Must not slow down frame rate relative to raw bayer output */
   1442     CAM_COLOR_CORRECTION_FAST,
   1443     /* Frame rate may be reduced by high quality */
   1444     CAM_COLOR_CORRECTION_HIGH_QUALITY,
   1445 } cam_color_correct_mode_t;
   1446 
   1447 typedef enum {
   1448     CAM_COLOR_CORRECTION_ABERRATION_OFF,
   1449     CAM_COLOR_CORRECTION_ABERRATION_FAST,
   1450     CAM_COLOR_CORRECTION_ABERRATION_HIGH_QUALITY,
   1451     CAM_COLOR_CORRECTION_ABERRATION_MAX
   1452 } cam_aberration_mode_t;
   1453 
   1454 typedef struct {
   1455     /* 3x3 float matrix in row-major order. each element is in range of (0, 1) */
   1456     cam_rational_type_t transform_matrix[3][3];
   1457 } cam_color_correct_matrix_t;
   1458 
   1459 #define CAM_FOCAL_LENGTHS_MAX     1
   1460 #define CAM_APERTURES_MAX         1
   1461 #define CAM_FILTER_DENSITIES_MAX  1
   1462 #define CAM_MAX_MAP_HEIGHT        6
   1463 #define CAM_MAX_MAP_WIDTH         6
   1464 #define CAM_MAX_SHADING_MAP_WIDTH 17
   1465 #define CAM_MAX_SHADING_MAP_HEIGHT 13
   1466 #define CAM_MAX_TONEMAP_CURVE_SIZE    512
   1467 
   1468 typedef struct {
   1469     /* A 1D array of pairs of floats.
   1470      * Mapping a 0-1 input range to a 0-1 output range.
   1471      * The input range must be monotonically increasing with N,
   1472      * and values between entries should be linearly interpolated.
   1473      * For example, if the array is: [0.0, 0.0, 0.3, 0.5, 1.0, 1.0],
   1474      * then the input->output mapping for a few sample points would be:
   1475      * 0 -> 0, 0.15 -> 0.25, 0.3 -> 0.5, 0.5 -> 0.64 */
   1476     float tonemap_points[CAM_MAX_TONEMAP_CURVE_SIZE][2];
   1477 } cam_tonemap_curve_t;
   1478 
   1479 typedef struct {
   1480    int tonemap_points_cnt;
   1481    cam_tonemap_curve_t curves[3];
   1482 } cam_rgb_tonemap_curves;
   1483 
   1484 typedef struct {
   1485    int tonemap_points_cnt;
   1486    cam_tonemap_curve_t curve;
   1487 } cam_profile_tone_curve;
   1488 
   1489 typedef struct {
   1490     cam_rational_type_t neutral_col_point[3];
   1491 } cam_neutral_col_point_t;
   1492 
   1493 typedef enum {
   1494     OFF,
   1495     FAST,
   1496     QUALITY,
   1497 } cam_quality_preference_t;
   1498 
   1499 typedef enum {
   1500     CAM_FLASH_CTRL_OFF,
   1501     CAM_FLASH_CTRL_SINGLE,
   1502     CAM_FLASH_CTRL_TORCH
   1503 } cam_flash_ctrl_t;
   1504 
   1505 typedef struct {
   1506     uint8_t frame_dropped; /*  This flag indicates whether any stream buffer is dropped or not */
   1507     cam_stream_ID_t cam_stream_ID; /* if dropped, Stream ID of dropped streams */
   1508 } cam_frame_dropped_t;
   1509 
   1510 typedef struct {
   1511     uint8_t ae_mode;
   1512     uint8_t awb_mode;
   1513     uint8_t af_mode;
   1514 } cam_scene_mode_overrides_t;
   1515 
   1516 typedef struct {
   1517     int32_t left;
   1518     int32_t top;
   1519     int32_t width;
   1520     int32_t height;
   1521 } cam_crop_region_t;
   1522 
   1523 typedef struct {
   1524     /* Estimated sharpness for each region of the input image.
   1525      * Normalized to be between 0 and maxSharpnessMapValue.
   1526      * Higher values mean sharper (better focused) */
   1527     int32_t sharpness[CAM_MAX_MAP_WIDTH][CAM_MAX_MAP_HEIGHT];
   1528 } cam_sharpness_map_t;
   1529 
   1530 typedef struct {
   1531    float lens_shading[4*CAM_MAX_SHADING_MAP_HEIGHT*CAM_MAX_SHADING_MAP_WIDTH];
   1532 } cam_lens_shading_map_t;
   1533 
   1534 typedef struct {
   1535     int32_t min_value;
   1536     int32_t max_value;
   1537     int32_t def_value;
   1538     int32_t step;
   1539 } cam_control_range_t;
   1540 
   1541 #define CAM_QCOM_FEATURE_NONE            0
   1542 #define CAM_QCOM_FEATURE_FACE_DETECTION (1<<0)
   1543 #define CAM_QCOM_FEATURE_DENOISE2D      (1<<1)
   1544 #define CAM_QCOM_FEATURE_CROP           (1<<2)
   1545 #define CAM_QCOM_FEATURE_ROTATION       (1<<3)
   1546 #define CAM_QCOM_FEATURE_FLIP           (1<<4)
   1547 #define CAM_QCOM_FEATURE_HDR            (1<<5)
   1548 #define CAM_QCOM_FEATURE_REGISTER_FACE  (1<<6)
   1549 #define CAM_QCOM_FEATURE_SHARPNESS      (1<<7)
   1550 #define CAM_QCOM_FEATURE_VIDEO_HDR      (1<<8)
   1551 #define CAM_QCOM_FEATURE_CAC            (1<<9)
   1552 #define CAM_QCOM_FEATURE_SCALE          (1<<10)
   1553 #define CAM_QCOM_FEATURE_EFFECT         (1<<11)
   1554 #define CAM_QCOM_FEATURE_UBIFOCUS       (1<<12)
   1555 #define CAM_QCOM_FEATURE_CHROMA_FLASH   (1<<13)
   1556 #define CAM_QCOM_FEATURE_OPTIZOOM       (1<<14)
   1557 #define CAM_QCOM_FEATURE_SENSOR_HDR     (1<<15)
   1558 #define CAM_QCOM_FEATURE_CPP_TNR        (1<<17)
   1559 #define CAM_QCOM_FEATURE_PP_SUPERSET (CAM_QCOM_FEATURE_DENOISE2D|CAM_QCOM_FEATURE_CROP|\
   1560                                       CAM_QCOM_FEATURE_ROTATION|CAM_QCOM_FEATURE_SHARPNESS|\
   1561                                       CAM_QCOM_FEATURE_SCALE)
   1562 
   1563 // Counter clock wise
   1564 typedef enum {
   1565     ROTATE_0 = 1<<0,
   1566     ROTATE_90 = 1<<1,
   1567     ROTATE_180 = 1<<2,
   1568     ROTATE_270 = 1<<3,
   1569 } cam_rotation_t;
   1570 
   1571 typedef struct {
   1572    cam_rotation_t rotation;
   1573    uint32_t streamId;
   1574 } cam_rotation_info_t;
   1575 
   1576 typedef enum {
   1577     FLIP_H = 1<<0,
   1578     FLIP_V = 1<<1,
   1579 } cam_flip_t;
   1580 
   1581 typedef struct {
   1582     uint32_t bundle_id;                            /* bundle id */
   1583     uint8_t num_of_streams;                        /* number of streams in the bundle */
   1584     uint32_t stream_ids[MAX_STREAM_NUM_IN_BUNDLE]; /* array of stream ids to be bundled */
   1585 } cam_bundle_config_t;
   1586 
   1587 typedef enum {
   1588     CAM_ONLINE_REPROCESS_TYPE,    /* online reprocess, frames from running streams */
   1589     CAM_OFFLINE_REPROCESS_TYPE,   /* offline reprocess, frames from external source */
   1590 } cam_reprocess_type_enum_t;
   1591 
   1592 typedef enum {
   1593     CAM_HDR_MODE_SINGLEFRAME,    /* Single frame HDR mode which does only tone mapping */
   1594     CAM_HDR_MODE_MULTIFRAME,     /* Multi frame HDR mode which needs two frames with 0.5x and 2x exposure respectively */
   1595 } cam_hdr_mode_enum_t;
   1596 
   1597 typedef struct {
   1598     uint32_t hdr_enable;
   1599     uint32_t hdr_need_1x; /* when CAM_QCOM_FEATURE_HDR enabled, indicate if 1x is needed for output */
   1600     cam_hdr_mode_enum_t hdr_mode;
   1601 } cam_hdr_param_t;
   1602 
   1603 typedef struct {
   1604     int32_t output_width;
   1605     int32_t output_height;
   1606 } cam_scale_param_t;
   1607 
   1608 typedef struct {
   1609     uint8_t enable;
   1610     uint8_t burst_count;
   1611     uint8_t focus_steps[MAX_AF_BRACKETING_VALUES];
   1612     uint8_t output_count;
   1613 } cam_af_bracketing_t;
   1614 
   1615 typedef struct {
   1616     uint8_t enable;
   1617     uint8_t burst_count;
   1618 } cam_flash_bracketing_t;
   1619 
   1620 typedef struct {
   1621     uint8_t enable;
   1622     uint8_t burst_count;
   1623     uint8_t zoom_threshold;
   1624 } cam_opti_zoom_t;
   1625 
   1626 typedef enum {
   1627     CAM_FLASH_OFF,
   1628     CAM_FLASH_ON
   1629 } cam_flash_value_t;
   1630 
   1631 typedef enum {
   1632     CAM_SENSOR_RAW,
   1633     CAM_SENSOR_YUV
   1634 } cam_sensor_t;
   1635 
   1636 typedef struct {
   1637     cam_sensor_t sens_type;
   1638     cam_format_t native_format;
   1639 } cam_sensor_type_t;
   1640 
   1641 typedef struct {
   1642     /* reprocess feature mask */
   1643     uint32_t feature_mask;
   1644 
   1645     /* individual setting for features to be reprocessed */
   1646     cam_denoise_param_t denoise2d;
   1647     cam_rect_t input_crop;
   1648     cam_rotation_t rotation;
   1649     uint32_t flip;
   1650     int32_t sharpness;
   1651     int32_t effect;
   1652     cam_hdr_param_t hdr_param;
   1653     cam_scale_param_t scale_param;
   1654 
   1655     uint8_t zoom_level;
   1656     cam_flash_value_t flash_value;
   1657 
   1658 } cam_pp_feature_config_t;
   1659 
   1660 typedef struct {
   1661     uint32_t input_stream_id;
   1662     /* input source stream type */
   1663     cam_stream_type_t input_stream_type;
   1664 } cam_pp_online_src_config_t;
   1665 
   1666 typedef struct {
   1667     /* image format */
   1668     cam_format_t input_fmt;
   1669 
   1670     /* image dimension */
   1671     cam_dimension_t input_dim;
   1672 
   1673     /* buffer plane information, will be calc based on stream_type, fmt,
   1674        dim, and padding_info(from stream config). Info including:
   1675        offset_x, offset_y, stride, scanline, plane offset */
   1676     cam_stream_buf_plane_info_t input_buf_planes;
   1677 
   1678     /* number of input reprocess buffers */
   1679     uint8_t num_of_bufs;
   1680 
   1681     /* input source type */
   1682     cam_stream_type_t input_type;
   1683 
   1684 } cam_pp_offline_src_config_t;
   1685 
   1686 /* reprocess stream input configuration */
   1687 typedef struct {
   1688     /* input source config */
   1689     cam_reprocess_type_enum_t pp_type;
   1690     union {
   1691         cam_pp_online_src_config_t online;
   1692         cam_pp_offline_src_config_t offline;
   1693     };
   1694 
   1695     /* pp feature config */
   1696     cam_pp_feature_config_t pp_feature_config;
   1697 } cam_stream_reproc_config_t;
   1698 
   1699 typedef struct {
   1700     uint8_t crop_enabled;
   1701     cam_rect_t input_crop;
   1702 } cam_crop_param_t;
   1703 
   1704 typedef struct {
   1705     uint8_t trigger;
   1706     int32_t trigger_id;
   1707 } cam_trigger_t;
   1708 
   1709 typedef struct {
   1710     cam_denoise_param_t denoise2d;
   1711     cam_crop_param_t crop;
   1712     uint32_t flip;     /* 0 means no flip */
   1713     uint32_t uv_upsample; /* 0 means no chroma upsampling */
   1714     int32_t sharpness; /* 0 means no sharpness */
   1715     int32_t effect;
   1716     cam_rotation_t rotation;
   1717 } cam_per_frame_pp_config_t;
   1718 
   1719 typedef enum {
   1720     CAM_OPT_STAB_OFF,
   1721     CAM_OPT_STAB_ON,
   1722     CAM_OPT_STAB_MAX
   1723 } cam_optical_stab_modes_t;
   1724 
   1725 typedef enum {
   1726     CAM_FILTER_ARRANGEMENT_RGGB,
   1727     CAM_FILTER_ARRANGEMENT_GRBG,
   1728     CAM_FILTER_ARRANGEMENT_GBRG,
   1729     CAM_FILTER_ARRANGEMENT_BGGR,
   1730 
   1731     /* Sensor is not Bayer; output has 3 16-bit values for each pixel,
   1732      * instead of just 1 16-bit value per pixel.*/
   1733     CAM_FILTER_ARRANGEMENT_RGB
   1734 } cam_color_filter_arrangement_t;
   1735 
   1736 typedef enum {
   1737     CAM_AF_STATE_INACTIVE,
   1738     CAM_AF_STATE_PASSIVE_SCAN,
   1739     CAM_AF_STATE_PASSIVE_FOCUSED,
   1740     CAM_AF_STATE_ACTIVE_SCAN,
   1741     CAM_AF_STATE_FOCUSED_LOCKED,
   1742     CAM_AF_STATE_NOT_FOCUSED_LOCKED,
   1743     CAM_AF_STATE_PASSIVE_UNFOCUSED
   1744 } cam_af_state_t;
   1745 
   1746 typedef enum {
   1747   CAM_AF_LENS_STATE_STATIONARY,
   1748   CAM_AF_LENS_STATE_MOVING,
   1749 } cam_af_lens_state_t;
   1750 
   1751 typedef enum {
   1752     CAM_AWB_STATE_INACTIVE,
   1753     CAM_AWB_STATE_SEARCHING,
   1754     CAM_AWB_STATE_CONVERGED,
   1755     CAM_AWB_STATE_LOCKED
   1756 } cam_awb_state_t;
   1757 
   1758 typedef enum {
   1759     CAM_FOCUS_UNCALIBRATED,
   1760     CAM_FOCUS_APPROXIMATE,
   1761     CAM_FOCUS_CALIBRATED
   1762 } cam_focus_calibration_t;
   1763 
   1764 typedef enum {
   1765 CAM_TEST_PATTERN_OFF,
   1766 CAM_TEST_PATTERN_SOLID_COLOR,
   1767 CAM_TEST_PATTERN_COLOR_BARS,
   1768 CAM_TEST_PATTERN_COLOR_BARS_FADE_TO_GRAY,
   1769 CAM_TEST_PATTERN_PN9,
   1770 } cam_test_pattern_mode_t;
   1771 
   1772 typedef struct {
   1773 cam_test_pattern_mode_t mode;
   1774 int32_t r;
   1775 int32_t gr;
   1776 int32_t gb;
   1777 int32_t b;
   1778 } cam_test_pattern_data_t;
   1779 
   1780 typedef enum {
   1781     CAM_AWB_D50,
   1782     CAM_AWB_D65,
   1783     CAM_AWB_D75,
   1784     CAM_AWB_A,
   1785     CAM_AWB_CUSTOM_A,
   1786     CAM_AWB_WARM_FLO,
   1787     CAM_AWB_COLD_FLO,
   1788     CAM_AWB_CUSTOM_FLO,
   1789     CAM_AWB_NOON,
   1790     CAM_AWB_CUSTOM_DAYLIGHT,
   1791     CAM_AWB_INVALID_ALL_LIGHT,
   1792 } cam_illuminat_t;
   1793 
   1794 typedef enum {
   1795     LEGACY_RAW,
   1796     MIPI_RAW,
   1797 } cam_opaque_raw_format_t;
   1798 
   1799 #endif /* __QCAMERA_TYPES_H__ */
   1800