1/* Copyright (c) 2012-2016, 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// System dependencies
34#include <stdint.h>
35#include <media/msmb_camera.h>
36
37#define CAM_MAX_NUM_BUFS_PER_STREAM 64
38#define MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES 8096
39#define AWB_DEBUG_DATA_SIZE               (45000)
40#define AEC_DEBUG_DATA_SIZE               (5000)
41#define AF_DEBUG_DATA_SIZE                (10000)
42#define AF_STATS_DEBUG_DATA_SIZE          (40000)
43#define ASD_DEBUG_DATA_SIZE               (100)
44#define STATS_BUFFER_DEBUG_DATA_SIZE      (75000)
45
46#define CEILING64(X) (((X) + 0x0003F) & 0xFFFFFFC0)
47#define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
48#define CEILING16(X) (((X) + 0x000F) & 0xFFF0)
49#define CEILING4(X)  (((X) + 0x0003) & 0xFFFC)
50#define CEILING2(X)  (((X) + 0x0001) & 0xFFFE)
51
52#define MAX_ZOOMS_CNT 91
53#define MAX_SIZES_CNT 40
54#define MAX_EXP_BRACKETING_LENGTH 32
55#define MAX_ROI 10
56#define MAX_STREAM_NUM_IN_BUNDLE 8
57#define MAX_NUM_STREAMS          8
58#define CHROMATIX_SIZE 60000
59#define COMMONCHROMATIX_SIZE 45000
60#define CPPCHROMATIX_SIZE 36000
61#define SWPOSTPROCCHROMATIX_SIZE 36000
62#define AFTUNE_SIZE  32768
63#define A3CHROMATIX_SIZE 30000
64#define MAX_SCALE_SIZES_CNT 8
65#define MAX_SAMP_DECISION_CNT     64
66#define SENSOR_PHYSICAL_SIZE_CNT  2
67#define EXPOSURE_TIME_RANGE_CNT   2
68#define BLACK_LEVEL_PATTERN_CNT   4
69#define FORWARD_MATRIX_COLS       3
70#define FORWARD_MATRIX_ROWS       3
71#define COLOR_TRANSFORM_COLS      3
72#define COLOR_TRANSFORM_ROWS      3
73#define CAL_TRANSFORM_COLS        3
74#define CAL_TRANSFORM_ROWS        3
75
76#define MAX_ISP_DATA_SIZE (20*1024)
77#define MAX_PP_DATA_SIZE  16384
78#define MAX_AE_STATS_DATA_SIZE  1000
79#define MAX_AWB_STATS_DATA_SIZE 1000
80#define MAX_AF_STATS_DATA_SIZE  1000
81#define MAX_ASD_STATS_DATA_SIZE 1000
82
83#define MAX_CAPTURE_BATCH_NUM 32
84
85#define TUNING_DATA_VERSION        6
86#define TUNING_SENSOR_DATA_MAX     0x10000 /*(need value from sensor team)*/
87#define TUNING_VFE_DATA_MAX        0x10000 /*(need value from vfe team)*/
88#define TUNING_CPP_DATA_MAX        0x10000 /*(need value from pproc team)*/
89#define TUNING_CAC_DATA_MAX        0x10000 /*(need value from imglib team)*/
90#define TUNING_DATA_MAX            (TUNING_SENSOR_DATA_MAX + \
91                                   TUNING_VFE_DATA_MAX + TUNING_CPP_DATA_MAX + \
92                                   TUNING_CAC_DATA_MAX)
93
94#define TUNING_SENSOR_DATA_OFFSET  0
95#define TUNING_VFE_DATA_OFFSET     TUNING_SENSOR_DATA_MAX
96#define TUNING_CPP_DATA_OFFSET     (TUNING_SENSOR_DATA_MAX + TUNING_VFE_DATA_MAX)
97#define TUNING_CAC_DATA_OFFSET     (TUNING_SENSOR_DATA_MAX + \
98                                   TUNING_VFE_DATA_MAX + TUNING_CPP_DATA_MAX)
99#define MAX_STATS_DATA_SIZE 4000
100
101#define MAX_AF_BRACKETING_VALUES 5
102#define MAX_TEST_PATTERN_CNT     8
103
104#define GPS_PROCESSING_METHOD_SIZE 33
105#define EXIF_IMAGE_DESCRIPTION_SIZE 100
106
107#define MAX_INFLIGHT_REQUESTS  6
108#define MAX_INFLIGHT_BLOB      3
109#define MIN_INFLIGHT_REQUESTS  3
110#define MAX_INFLIGHT_REPROCESS_REQUESTS 1
111#define MAX_INFLIGHT_HFR_REQUESTS (48)
112#define MIN_INFLIGHT_HFR_REQUESTS (40)
113
114#define QCAMERA_DUMP_FRM_LOCATION "/data/misc/camera/"
115#define QCAMERA_MAX_FILEPATH_LENGTH 64
116
117#define LIKELY(x)       __builtin_expect((x), true)
118#define UNLIKELY(x)     __builtin_expect((x), false)
119
120#define RELCAM_CALIB_ROT_MATRIX_MAX 9
121#define RELCAM_CALIB_SURFACE_PARMS_MAX 32
122#define RELCAM_CALIB_RESERVED_MAX 62
123
124#define MAX_NUM_CAMERA_PER_BUNDLE    2 /* Max number of cameras per bundle */
125#define EXTRA_FRAME_SYNC_BUFFERS     4 /* Extra frame sync buffers in dc mode*/
126#define MM_CAMERA_FRAME_SYNC_NODES   EXTRA_FRAME_SYNC_BUFFERS
127
128#define MAX_REPROCESS_STALL 2
129
130#define QCAMERA_MAX_FILEPATH_LENGTH 64
131
132#define MAX_EEPROM_VERSION_INFO_LEN 32
133
134#define MAX_OPTICAL_BLACK_REGIONS 5
135
136/*reprocess pipeline stages are pproc and jpeg */
137#define MAX_REPROCESS_PIPELINE_STAGES 2
138
139/* Defines the number of rows in the color correction matrix (CCM) */
140#define AWB_NUM_CCM_ROWS (3)
141
142/* Defines the number of columns in the color correction matrix (CCM) */
143#define AWB_NUM_CCM_COLS (3)
144
145typedef enum {
146    CAM_HAL_V1 = 1,
147    CAM_HAL_V3 = 3
148} cam_hal_version_t;
149
150typedef enum {
151    CAM_STATUS_SUCCESS,       /* Operation Succeded */
152    CAM_STATUS_FAILED,        /* Failure in doing operation */
153    CAM_STATUS_INVALID_PARM,  /* Inavlid parameter provided */
154    CAM_STATUS_NOT_SUPPORTED, /* Parameter/operation not supported */
155    CAM_STATUS_ACCEPTED,      /* Parameter accepted */
156    CAM_STATUS_MAX,
157} cam_status_t;
158
159typedef enum {
160    /* back main camera */
161    CAM_POSITION_BACK,
162    /* front main camera */
163    CAM_POSITION_FRONT,
164    /* back aux camera */
165    CAM_POSITION_BACK_AUX,
166    /* front aux camera */
167    CAM_POSITION_FRONT_AUX
168} cam_position_t;
169
170typedef enum {
171    CAM_FLICKER_NONE,
172    CAM_FLICKER_50_HZ,
173    CAM_FLICKER_60_HZ
174} cam_flicker_t;
175
176typedef enum {
177    CAM_FORMAT_JPEG = 0,
178    CAM_FORMAT_YUV_420_NV12 = 1,
179    CAM_FORMAT_YUV_420_NV21,
180    CAM_FORMAT_YUV_420_NV21_ADRENO,
181    CAM_FORMAT_YUV_420_YV12,
182    CAM_FORMAT_YUV_422_NV16,
183    CAM_FORMAT_YUV_422_NV61,
184    CAM_FORMAT_YUV_420_NV12_VENUS,
185    /* Note: For all raw formats, each scanline needs to be 16 bytes aligned */
186
187    /* Packed YUV/YVU raw format, 16 bpp: 8 bits Y and 8 bits UV.
188     * U and V are interleaved with Y: YUYV or YVYV */
189    CAM_FORMAT_YUV_RAW_8BIT_YUYV,
190    CAM_FORMAT_YUV_RAW_8BIT_YVYU,
191    CAM_FORMAT_YUV_RAW_8BIT_UYVY, //10
192    CAM_FORMAT_YUV_RAW_8BIT_VYUY,
193
194    /* QCOM RAW formats where data is packed into 64bit word.
195     * 8BPP: 1 64-bit word contains 8 pixels p0 - p7, where p0 is
196     *       stored at LSB.
197     * 10BPP: 1 64-bit word contains 6 pixels p0 - p5, where most
198     *       significant 4 bits are set to 0. P0 is stored at LSB.
199     * 12BPP: 1 64-bit word contains 5 pixels p0 - p4, where most
200     *       significant 4 bits are set to 0. P0 is stored at LSB. */
201    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG,
202    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG,
203    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB,
204    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR,
205    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG,
206    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG,
207    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB,
208    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR,
209    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG,  //20
210    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG,
211    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB,
212    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR,
213    /* MIPI RAW formats based on MIPI CSI-2 specifiction.
214     * 8BPP: Each pixel occupies one bytes, starting at LSB.
215     *       Output with of image has no restrictons.
216     * 10BPP: Four pixels are held in every 5 bytes. The output
217     *       with of image must be a multiple of 4 pixels.
218     * 12BPP: Two pixels are held in every 3 bytes. The output
219     *       width of image must be a multiple of 2 pixels. */
220    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG,
221    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG,
222    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB,
223    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR,
224    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG,
225    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG,
226    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB, //30
227    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR,
228    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG,
229    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG,
230    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB,
231    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR,
232    /* Ideal raw formats where image data has gone through black
233     * correction, lens rolloff, demux/channel gain, bad pixel
234     * correction, and ABF.
235     * Ideal raw formats could output any of QCOM_RAW and MIPI_RAW
236     * formats, plus plain8 8bbp, plain16 800, plain16 10bpp, and
237     * plain 16 12bpp */
238    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG,
239    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG,
240    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB,
241    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR,
242    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG, //40
243    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG,
244    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB,
245    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR,
246    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG,
247    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG,
248    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB,
249    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR,
250    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG,
251    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG,
252    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB, //50
253    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR,
254    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG,
255    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG,
256    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB,
257    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR,
258    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG,
259    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG,
260    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB,
261    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR,
262    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG, //60
263    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG,
264    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB,
265    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR,
266    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG,
267    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG,
268    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB,
269    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR,
270    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG,
271    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG,
272    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB, //70
273    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR,
274    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG,
275    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG,
276    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB,
277    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR,
278
279    /* generic 8-bit raw */
280    CAM_FORMAT_JPEG_RAW_8BIT,
281    CAM_FORMAT_META_RAW_8BIT,
282
283    /* QCOM RAW formats where data is packed into 64bit word.
284     * 14BPP: 1 64-bit word contains 4 pixels p0 - p3, where most
285     *       significant 4 bits are set to 0. P0 is stored at LSB.
286     */
287    CAM_FORMAT_BAYER_QCOM_RAW_14BPP_GBRG,
288    CAM_FORMAT_BAYER_QCOM_RAW_14BPP_GRBG,
289    CAM_FORMAT_BAYER_QCOM_RAW_14BPP_RGGB, //80
290    CAM_FORMAT_BAYER_QCOM_RAW_14BPP_BGGR,
291    /* MIPI RAW formats based on MIPI CSI-2 specifiction.
292     * 14 BPPP: 1st byte: P0 [13:6]
293     *          2nd byte: P1 [13:6]
294     *          3rd byte: P2 [13:6]
295     *          4th byte: P3 [13:6]
296     *          5th byte: P0 [5:0]
297     *          7th byte: P1 [5:0]
298     *          8th byte: P2 [5:0]
299     *          9th byte: P3 [5:0]
300     */
301    CAM_FORMAT_BAYER_MIPI_RAW_14BPP_GBRG,
302    CAM_FORMAT_BAYER_MIPI_RAW_14BPP_GRBG,
303    CAM_FORMAT_BAYER_MIPI_RAW_14BPP_RGGB,
304    CAM_FORMAT_BAYER_MIPI_RAW_14BPP_BGGR,
305    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_GBRG,
306    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_GRBG,
307    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_RGGB,
308    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_BGGR,
309    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_GBRG, //90
310    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_GRBG,
311    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_RGGB,
312    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_BGGR,
313    /* 14BPP: 1st byte: P0 [8:0]
314     *        2nd byte: P0 [13:9]
315     *        3rd byte: P1 [8:0]
316     *        4th byte: P1 [13:9]
317     */
318    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_GBRG,
319    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_GRBG,
320    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_RGGB,
321    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_14BPP_BGGR,
322
323    CAM_FORMAT_YUV_444_NV24,
324    CAM_FORMAT_YUV_444_NV42,
325
326    /* Y plane only, used for FD, 8BPP */
327    CAM_FORMAT_Y_ONLY, //100
328
329    /* UBWC format */
330    CAM_FORMAT_YUV_420_NV12_UBWC,
331
332    CAM_FORMAT_YUV_420_NV21_VENUS,
333
334    /* RGB formats */
335    CAM_FORMAT_8888_ARGB,
336
337    /* Y plane only */
338    CAM_FORMAT_Y_ONLY_10_BPP,
339    CAM_FORMAT_Y_ONLY_12_BPP,
340    CAM_FORMAT_Y_ONLY_14_BPP,
341    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GREY,
342    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GREY,
343    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GREY,
344    CAM_FORMAT_BAYER_QCOM_RAW_14BPP_GREY,
345    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GREY,
346    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GREY,
347    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GREY,
348    CAM_FORMAT_BAYER_MIPI_RAW_14BPP_GREY,
349    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GREY,
350    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GREY,
351    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GREY,
352    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_14BPP_GREY,
353    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GREY,
354    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GREY,
355    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GREY,
356    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_14BPP_GREY,
357
358    CAM_FORMAT_MAX
359} cam_format_t;
360
361typedef enum {
362    CAM_STREAM_TYPE_DEFAULT,       /* default stream type */
363    CAM_STREAM_TYPE_PREVIEW,       /* preview */
364    CAM_STREAM_TYPE_POSTVIEW,      /* postview */
365    CAM_STREAM_TYPE_SNAPSHOT,      /* snapshot */
366    CAM_STREAM_TYPE_VIDEO,         /* video */
367    CAM_STREAM_TYPE_CALLBACK,      /* app requested callback */
368    CAM_STREAM_TYPE_IMPL_DEFINED, /* opaque format: could be display, video enc, ZSL YUV */
369    CAM_STREAM_TYPE_METADATA,      /* meta data */
370    CAM_STREAM_TYPE_RAW,           /* raw dump from camif */
371    CAM_STREAM_TYPE_OFFLINE_PROC,  /* offline process */
372    CAM_STREAM_TYPE_PARM,         /* mct internal stream */
373    CAM_STREAM_TYPE_ANALYSIS,     /* analysis stream */
374    CAM_STREAM_TYPE_MAX,
375} cam_stream_type_t;
376
377typedef enum {
378    CAM_PAD_NONE = 1,
379    CAM_PAD_TO_2 = 2,
380    CAM_PAD_TO_4 = 4,
381    CAM_PAD_TO_WORD = CAM_PAD_TO_4,
382    CAM_PAD_TO_8 = 8,
383    CAM_PAD_TO_16 = 16,
384    CAM_PAD_TO_32 = 32,
385    CAM_PAD_TO_64 = 64,
386    CAM_PAD_TO_128 = 128,
387    CAM_PAD_TO_256 = 256,
388    CAM_PAD_TO_512 = 512,
389    CAM_PAD_TO_1K = 1024,
390    CAM_PAD_TO_2K = 2048,
391    CAM_PAD_TO_4K = 4096,
392    CAM_PAD_TO_8K = 8192
393} cam_pad_format_t;
394
395typedef enum {
396    /* followings are per camera */
397    CAM_MAPPING_BUF_TYPE_CAPABILITY,  /* mapping camera capability buffer */
398    CAM_MAPPING_BUF_TYPE_PARM_BUF,    /* mapping parameters buffer */
399    /* this buffer is needed for the payload to be sent with bundling related cameras cmd */
400    CAM_MAPPING_BUF_TYPE_SYNC_RELATED_SENSORS_BUF, /* mapping sync buffer.*/
401
402    /* followings are per stream */
403    CAM_MAPPING_BUF_TYPE_STREAM_BUF,        /* mapping stream buffers */
404    CAM_MAPPING_BUF_TYPE_STREAM_INFO,       /* mapping stream information buffer */
405    CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF, /* mapping offline process input buffer */
406    CAM_MAPPING_BUF_TYPE_OFFLINE_META_BUF,  /* mapping offline meta buffer */
407    CAM_MAPPING_BUF_TYPE_MISC_BUF,          /* mapping offline miscellaneous buffer */
408    CAM_MAPPING_BUF_TYPE_STREAM_USER_BUF,   /* mapping user ptr stream buffers */
409    CAM_MAPPING_BUF_TYPE_MAX
410} cam_mapping_buf_type;
411
412typedef enum {
413    CAM_STREAM_BUF_TYPE_MPLANE,  /* Multiplanar Buffer type */
414    CAM_STREAM_BUF_TYPE_USERPTR, /* User specific structure pointer*/
415    CAM_STREAM_BUF_TYPE_MAX
416} cam_stream_buf_type;
417
418typedef struct {
419    cam_mapping_buf_type type;
420    uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
421    uint32_t frame_idx;   /* frame index: valid if type is STREAM_BUF */
422    int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
423                           * -1 means all planners shanre the same fd;
424                           * otherwise, each planner has its own fd */
425    uint32_t cookie;      /* could be job_id(uint32_t) to identify mapping job */
426    int32_t fd;           /* origin fd */
427    size_t size;          /* size of the buffer */
428} cam_buf_map_type;
429
430typedef struct {
431    uint32_t length;
432    cam_buf_map_type buf_maps[CAM_MAX_NUM_BUFS_PER_STREAM];
433} cam_buf_map_type_list;
434
435typedef struct {
436    cam_mapping_buf_type type;
437    uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
438    uint32_t frame_idx;   /* frame index: valid if STREAM_BUF or HIST_BUF */
439    int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
440                           * -1 means all planners shanre the same fd;
441                           * otherwise, each planner has its own fd */
442    uint32_t cookie;      /* could be job_id(uint32_t) to identify unmapping job */
443} cam_buf_unmap_type;
444
445typedef struct {
446    uint32_t length;
447    cam_buf_unmap_type buf_unmaps[CAM_MAX_NUM_BUFS_PER_STREAM];
448} cam_buf_unmap_type_list;
449
450typedef enum {
451    CAM_MAPPING_TYPE_FD_MAPPING,
452    CAM_MAPPING_TYPE_FD_UNMAPPING,
453    CAM_MAPPING_TYPE_FD_BUNDLED_MAPPING,
454    CAM_MAPPING_TYPE_FD_BUNDLED_UNMAPPING,
455    CAM_MAPPING_TYPE_MAX
456} cam_mapping_type;
457
458typedef struct {
459    cam_mapping_type msg_type;
460    union {
461        cam_buf_map_type buf_map;
462        cam_buf_unmap_type buf_unmap;
463        cam_buf_map_type_list buf_map_list;
464        cam_buf_unmap_type_list buf_unmap_list;
465    } payload;
466} cam_sock_packet_t;
467
468typedef enum {
469    CAM_MODE_2D = (1<<0),
470    CAM_MODE_3D = (1<<1)
471} cam_mode_t;
472
473typedef struct {
474    uint32_t len;
475    uint32_t y_offset;
476    uint32_t cbcr_offset;
477} cam_sp_len_offset_t;
478
479typedef struct{
480    uint32_t len;
481    uint32_t offset;
482    int32_t offset_x;
483    int32_t offset_y;
484    int32_t stride;
485    int32_t stride_in_bytes;
486    int32_t scanline;
487    int32_t width;    /* width without padding */
488    int32_t height;   /* height without padding */
489    int32_t meta_stride;   /*Meta stride*/
490    int32_t meta_scanline; /*Meta Scanline*/
491    int32_t meta_len;   /*Meta plane length including 4k padding*/
492} cam_mp_len_offset_t;
493
494typedef struct {
495    uint32_t offset_x;
496    uint32_t offset_y;
497} cam_offset_info_t;
498
499typedef struct {
500    uint32_t width_padding;
501    uint32_t height_padding;
502    uint32_t plane_padding;
503    uint32_t min_stride;
504    uint32_t min_scanline;
505    cam_offset_info_t offset_info;
506} cam_padding_info_t;
507
508typedef struct {
509    uint32_t num_planes;    /*Number of planes in planar buffer*/
510    union {
511        cam_sp_len_offset_t sp;
512        cam_mp_len_offset_t mp[VIDEO_MAX_PLANES];
513    };
514    uint32_t frame_len;
515} cam_frame_len_offset_t;
516
517typedef struct {
518    uint8_t frame_buf_cnt;  /*Total plane frames present in 1 batch*/
519    uint32_t size;          /*Size of 1 batch buffer. Kernel structure size*/
520    long frameInterval;     /*frame interval between each frame*/
521} cam_stream_user_buf_info_t;
522
523typedef struct {
524    int32_t width;
525    int32_t height;
526} cam_dimension_t;
527
528typedef struct {
529    cam_frame_len_offset_t plane_info;
530} cam_stream_buf_plane_info_t;
531
532typedef struct {
533    float min_fps;
534    float max_fps;
535    float video_min_fps;
536    float video_max_fps;
537} cam_fps_range_t;
538
539typedef struct {
540    int32_t min_sensitivity;
541    int32_t max_sensitivity;
542} cam_sensitivity_range_t;
543
544typedef enum {
545    CAM_HFR_MODE_OFF,
546    CAM_HFR_MODE_60FPS,
547    CAM_HFR_MODE_90FPS,
548    CAM_HFR_MODE_120FPS,
549    CAM_HFR_MODE_150FPS,
550    CAM_HFR_MODE_180FPS,
551    CAM_HFR_MODE_210FPS,
552    CAM_HFR_MODE_240FPS,
553    CAM_HFR_MODE_480FPS,
554    CAM_HFR_MODE_MAX
555} cam_hfr_mode_t;
556
557typedef struct {
558    cam_hfr_mode_t mode;
559    cam_dimension_t dim;
560    uint8_t frame_skip;
561    uint8_t livesnapshot_sizes_tbl_cnt;                     /* livesnapshot sizes table size */
562    cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
563} cam_hfr_info_t;
564
565typedef enum {
566    CAM_WB_MODE_AUTO,
567    CAM_WB_MODE_CUSTOM,
568    CAM_WB_MODE_INCANDESCENT,
569    CAM_WB_MODE_FLUORESCENT,
570    CAM_WB_MODE_WARM_FLUORESCENT,
571    CAM_WB_MODE_DAYLIGHT,
572    CAM_WB_MODE_CLOUDY_DAYLIGHT,
573    CAM_WB_MODE_TWILIGHT,
574    CAM_WB_MODE_SHADE,
575    CAM_WB_MODE_MANUAL,
576    CAM_WB_MODE_OFF,
577    CAM_WB_MODE_MAX
578} cam_wb_mode_type;
579
580typedef enum {
581    CAM_ANTIBANDING_MODE_OFF,
582    CAM_ANTIBANDING_MODE_60HZ,
583    CAM_ANTIBANDING_MODE_50HZ,
584    CAM_ANTIBANDING_MODE_AUTO,
585    CAM_ANTIBANDING_MODE_AUTO_50HZ,
586    CAM_ANTIBANDING_MODE_AUTO_60HZ,
587    CAM_ANTIBANDING_MODE_MAX,
588} cam_antibanding_mode_type;
589
590/* Enum Type for different ISO Mode supported */
591typedef enum {
592    CAM_ISO_MODE_AUTO,
593    CAM_ISO_MODE_DEBLUR,
594    CAM_ISO_MODE_100,
595    CAM_ISO_MODE_200,
596    CAM_ISO_MODE_400,
597    CAM_ISO_MODE_800,
598    CAM_ISO_MODE_1600,
599    CAM_ISO_MODE_3200,
600    CAM_ISO_MODE_MAX
601} cam_iso_mode_type;
602
603typedef enum {
604    CAM_AEC_MODE_FRAME_AVERAGE,
605    CAM_AEC_MODE_CENTER_WEIGHTED,
606    CAM_AEC_MODE_SPOT_METERING,
607    CAM_AEC_MODE_SMART_METERING,
608    CAM_AEC_MODE_USER_METERING,
609    CAM_AEC_MODE_SPOT_METERING_ADV,
610    CAM_AEC_MODE_CENTER_WEIGHTED_ADV,
611    CAM_AEC_MODE_MAX
612} cam_auto_exposure_mode_type;
613
614/* enum to select AEC convergence type */
615typedef enum {
616    /* Normal AEC connvergence */
617    CAM_AEC_NORMAL_CONVERGENCE = 0,
618    /* Aggressive AEC connvergence */
619    CAM_AEC_AGGRESSIVE_CONVERGENCE,
620    /* Fast AEC convergence */
621    CAM_AEC_FAST_CONVERGENCE,
622    CAM_AEC_CONVERGENCE_MAX
623} cam_aec_convergence_type;
624
625typedef enum {
626    CAM_AE_MODE_OFF,
627    CAM_AE_MODE_ON,
628    CAM_AE_MODE_MAX
629} cam_ae_mode_type;
630
631typedef enum {
632    CAM_FOCUS_ALGO_AUTO,
633    CAM_FOCUS_ALGO_SPOT,
634    CAM_FOCUS_ALGO_CENTER_WEIGHTED,
635    CAM_FOCUS_ALGO_AVERAGE,
636    CAM_FOCUS_ALGO_MAX
637} cam_focus_algorithm_type;
638
639/* Auto focus mode */
640typedef enum {
641    CAM_FOCUS_MODE_OFF,
642    CAM_FOCUS_MODE_AUTO,
643    CAM_FOCUS_MODE_INFINITY,
644    CAM_FOCUS_MODE_MACRO,
645    CAM_FOCUS_MODE_FIXED,
646    CAM_FOCUS_MODE_EDOF,
647    CAM_FOCUS_MODE_CONTINOUS_VIDEO,
648    CAM_FOCUS_MODE_CONTINOUS_PICTURE,
649    CAM_FOCUS_MODE_MANUAL,
650    CAM_FOCUS_MODE_MAX
651} cam_focus_mode_type;
652
653typedef enum {
654    CAM_MANUAL_FOCUS_MODE_INDEX,
655    CAM_MANUAL_FOCUS_MODE_DAC_CODE,
656    CAM_MANUAL_FOCUS_MODE_RATIO,
657    CAM_MANUAL_FOCUS_MODE_DIOPTER,
658    CAM_MANUAL_FOCUS_MODE_MAX
659} cam_manual_focus_mode_type;
660
661typedef struct {
662    cam_manual_focus_mode_type flag;
663    union{
664        int32_t af_manual_lens_position_index;
665        int32_t af_manual_lens_position_dac;
666        int32_t af_manual_lens_position_ratio;
667        float af_manual_diopter;
668    };
669} cam_manual_focus_parm_t;
670
671typedef enum {
672    CAM_MANUAL_WB_MODE_CCT,
673    CAM_MANUAL_WB_MODE_GAIN,
674    CAM_MANUAL_WB_MODE_MAX
675} cam_manual_wb_mode_type;
676
677typedef struct {
678    float r_gain;
679    float g_gain;
680    float b_gain;
681} cam_awb_gain_t;
682
683typedef struct {
684    cam_manual_wb_mode_type type;
685    union{
686        int32_t cct;
687        cam_awb_gain_t gains;
688    };
689} cam_manual_wb_parm_t;
690
691typedef enum {
692    CAM_SCENE_MODE_OFF,
693    CAM_SCENE_MODE_AUTO,
694    CAM_SCENE_MODE_LANDSCAPE,
695    CAM_SCENE_MODE_SNOW,
696    CAM_SCENE_MODE_BEACH,
697    CAM_SCENE_MODE_SUNSET,
698    CAM_SCENE_MODE_NIGHT,
699    CAM_SCENE_MODE_PORTRAIT,
700    CAM_SCENE_MODE_BACKLIGHT,
701    CAM_SCENE_MODE_SPORTS,
702    CAM_SCENE_MODE_ANTISHAKE,
703    CAM_SCENE_MODE_FLOWERS,
704    CAM_SCENE_MODE_CANDLELIGHT,
705    CAM_SCENE_MODE_FIREWORKS,
706    CAM_SCENE_MODE_PARTY,
707    CAM_SCENE_MODE_NIGHT_PORTRAIT,
708    CAM_SCENE_MODE_THEATRE,
709    CAM_SCENE_MODE_ACTION,
710    CAM_SCENE_MODE_AR,
711    CAM_SCENE_MODE_FACE_PRIORITY,
712    CAM_SCENE_MODE_BARCODE,
713    CAM_SCENE_MODE_HDR,
714    CAM_SCENE_MODE_AQUA,
715    CAM_SCENE_MODE_MAX
716} cam_scene_mode_type;
717
718typedef enum {
719    CAM_EFFECT_MODE_OFF,
720    CAM_EFFECT_MODE_MONO,
721    CAM_EFFECT_MODE_NEGATIVE,
722    CAM_EFFECT_MODE_SOLARIZE,
723    CAM_EFFECT_MODE_SEPIA,
724    CAM_EFFECT_MODE_POSTERIZE,
725    CAM_EFFECT_MODE_WHITEBOARD,
726    CAM_EFFECT_MODE_BLACKBOARD,
727    CAM_EFFECT_MODE_AQUA,
728    CAM_EFFECT_MODE_EMBOSS,
729    CAM_EFFECT_MODE_SKETCH,
730    CAM_EFFECT_MODE_NEON,
731    CAM_EFFECT_MODE_BEAUTY,
732    CAM_EFFECT_MODE_MAX
733} cam_effect_mode_type;
734
735typedef enum {
736    CAM_FLASH_MODE_OFF,
737    CAM_FLASH_MODE_AUTO,
738    CAM_FLASH_MODE_ON,
739    CAM_FLASH_MODE_TORCH,
740    CAM_FLASH_MODE_SINGLE,
741    CAM_FLASH_MODE_MAX
742} cam_flash_mode_t;
743
744// Flash States
745typedef enum {
746    CAM_FLASH_STATE_UNAVAILABLE,
747    CAM_FLASH_STATE_CHARGING,
748    CAM_FLASH_STATE_READY,
749    CAM_FLASH_STATE_FIRED,
750    CAM_FLASH_STATE_PARTIAL,
751    CAM_FLASH_STATE_MAX
752} cam_flash_state_t;
753
754typedef enum {
755    CAM_FLASH_FIRING_LEVEL_0,
756    CAM_FLASH_FIRING_LEVEL_1,
757    CAM_FLASH_FIRING_LEVEL_2,
758    CAM_FLASH_FIRING_LEVEL_3,
759    CAM_FLASH_FIRING_LEVEL_4,
760    CAM_FLASH_FIRING_LEVEL_5,
761    CAM_FLASH_FIRING_LEVEL_6,
762    CAM_FLASH_FIRING_LEVEL_7,
763    CAM_FLASH_FIRING_LEVEL_8,
764    CAM_FLASH_FIRING_LEVEL_9,
765    CAM_FLASH_FIRING_LEVEL_10,
766    CAM_FLASH_FIRING_LEVEL_MAX
767} cam_flash_firing_level_t;
768
769
770typedef enum {
771    CAM_AEC_TRIGGER_IDLE,
772    CAM_AEC_TRIGGER_START
773} cam_aec_trigger_type_t;
774
775typedef enum {
776    CAM_AF_TRIGGER_IDLE,
777    CAM_AF_TRIGGER_START,
778    CAM_AF_TRIGGER_CANCEL
779} cam_af_trigger_type_t;
780
781typedef enum {
782    CAM_AE_STATE_INACTIVE,
783    CAM_AE_STATE_SEARCHING,
784    CAM_AE_STATE_CONVERGED,
785    CAM_AE_STATE_LOCKED,
786    CAM_AE_STATE_FLASH_REQUIRED,
787    CAM_AE_STATE_PRECAPTURE
788} cam_ae_state_t;
789
790typedef enum {
791    CAM_NOISE_REDUCTION_MODE_OFF,
792    CAM_NOISE_REDUCTION_MODE_FAST,
793    CAM_NOISE_REDUCTION_MODE_HIGH_QUALITY,
794    CAM_NOISE_REDUCTION_MODE_MINIMAL,
795    CAM_NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
796} cam_noise_reduction_mode_t;
797
798typedef enum {
799    CAM_EDGE_MODE_OFF,
800    CAM_EDGE_MODE_FAST,
801    CAM_EDGE_MODE_HIGH_QUALITY,
802    CAM_EDGE_MODE_ZERO_SHUTTER_LAG,
803} cam_edge_mode_t;
804
805typedef struct {
806   uint8_t edge_mode;
807   int32_t sharpness;
808} cam_edge_application_t;
809
810typedef enum {
811    CAM_BLACK_LEVEL_LOCK_OFF,
812    CAM_BLACK_LEVEL_LOCK_ON,
813} cam_black_level_lock_t;
814
815typedef enum {
816    CAM_HOTPIXEL_MODE_OFF,
817    CAM_HOTPIXEL_MODE_FAST,
818    CAM_HOTPIXEL_MODE_HIGH_QUALITY,
819} cam_hotpixel_mode_t;
820
821typedef enum {
822    CAM_LENS_SHADING_MAP_MODE_OFF,
823    CAM_LENS_SHADING_MAP_MODE_ON,
824} cam_lens_shading_map_mode_t;
825
826typedef enum {
827    CAM_LENS_SHADING_MODE_OFF,
828    CAM_LENS_SHADING_MODE_FAST,
829    CAM_LENS_SHADING_MODE_HIGH_QUALITY,
830} cam_lens_shading_mode_t;
831
832typedef enum {
833    CAM_FACE_DETECT_MODE_OFF,
834    CAM_FACE_DETECT_MODE_SIMPLE,
835    CAM_FACE_DETECT_MODE_FULL,
836} cam_face_detect_mode_t;
837
838typedef enum {
839    CAM_TONEMAP_MODE_CONTRAST_CURVE,
840    CAM_TONEMAP_MODE_FAST,
841    CAM_TONEMAP_MODE_HIGH_QUALITY,
842} cam_tonemap_mode_t;
843
844typedef enum {
845    CAM_CDS_MODE_OFF,
846    CAM_CDS_MODE_ON,
847    CAM_CDS_MODE_AUTO,
848    CAM_CDS_MODE_LOCK,
849    CAM_CDS_MODE_MAX
850} cam_cds_mode_type_t;
851
852typedef enum {
853    CAM_SENSOR_HDR_OFF,
854    CAM_SENSOR_HDR_IN_SENSOR = 1,
855    CAM_SENSOR_HDR_ZIGZAG,
856    CAM_SENSOR_HDR_MAX,
857} cam_sensor_hdr_type_t;
858
859typedef struct  {
860    int32_t left;
861    int32_t top;
862    int32_t width;
863    int32_t height;
864} cam_rect_t;
865
866typedef struct  {
867    cam_rect_t rect;
868    int32_t weight; /* weight of the area, valid for focusing/metering areas */
869} cam_area_t;
870
871typedef enum {
872    CAM_STREAMING_MODE_CONTINUOUS, /* continous streaming */
873    CAM_STREAMING_MODE_BURST,      /* burst streaming */
874    CAM_STREAMING_MODE_BATCH,      /* stream frames in batches */
875    CAM_STREAMING_MODE_MAX
876} cam_streaming_mode_t;
877
878typedef enum {
879    IS_TYPE_NONE,
880    IS_TYPE_DIS,
881    IS_TYPE_GA_DIS,
882    IS_TYPE_EIS_1_0,
883    IS_TYPE_EIS_2_0,
884    IS_TYPE_MAX
885} cam_is_type_t;
886
887typedef enum {
888    DIS_DISABLE,
889    DIS_ENABLE
890} cam_dis_mode_t;
891
892typedef enum {
893  NON_SECURE,
894  SECURE
895} cam_stream_secure_t;
896
897#define CAM_REPROCESS_MASK_TYPE_WNR (1<<0)
898
899/* event from server */
900typedef enum {
901    CAM_EVENT_TYPE_MAP_UNMAP_DONE  = (1<<0),
902    CAM_EVENT_TYPE_AUTO_FOCUS_DONE = (1<<1),
903    CAM_EVENT_TYPE_ZOOM_DONE       = (1<<2),
904    CAM_EVENT_TYPE_DAEMON_DIED     = (1<<3),
905    CAM_EVENT_TYPE_INT_TAKE_JPEG   = (1<<4),
906    CAM_EVENT_TYPE_INT_TAKE_RAW    = (1<<5),
907    CAM_EVENT_TYPE_DAEMON_PULL_REQ = (1<<6),
908    CAM_EVENT_TYPE_CAC_DONE        = (1<<7),
909    CAM_EVENT_TYPE_MAX
910} cam_event_type_t;
911
912typedef enum {
913    CAM_EXP_BRACKETING_OFF,
914    CAM_EXP_BRACKETING_ON
915} cam_bracket_mode;
916
917typedef enum {
918    CAM_LOW_LIGHT_OFF = 0,
919    CAM_LOW_LIGHT_ON,
920} cam_low_light_mode_t;
921
922typedef struct {
923    cam_bracket_mode mode;
924    char values[MAX_EXP_BRACKETING_LENGTH];  /* user defined values */
925} cam_exp_bracketing_t;
926
927typedef struct {
928  uint32_t num_frames;
929  cam_exp_bracketing_t exp_val;
930} cam_hdr_bracketing_info_t;
931
932 typedef struct {
933    cam_bracket_mode mode;
934    int32_t values;  /* user defined values */
935} cam_capture_bracketing_t;
936
937typedef enum {
938    CAM_SETTINGS_TYPE_OFF,
939    CAM_SETTINGS_TYPE_ON,
940    CAM_SETTINGS_TYPE_AUTO
941} cam_manual_setting_mode;
942
943typedef struct {
944    cam_manual_setting_mode exp_mode;
945    int64_t exp_time;
946    cam_manual_setting_mode iso_mode;
947    int32_t iso_value;
948} cam_capture_manual_3A_t;
949
950typedef enum {
951    CAM_CAPTURE_NORMAL,
952    CAM_CAPTURE_FLASH,
953    CAM_CAPTURE_BRACKETING,
954    CAM_CAPTURE_LOW_LIGHT,
955    CAM_CAPTURE_RESET,
956    CAM_CAPTURE_MANUAL_3A,
957    CAM_CAPTURE_MAX
958} cam_capture_type;
959
960typedef struct {
961    int32_t num_frames;     /*Num of frames requested on this quality*/
962    cam_capture_type type;  /*type of the capture request*/
963
964    /*union to strore values of capture type*/
965    union {
966        cam_flash_mode_t flash_mode;
967        cam_capture_bracketing_t hdr_mode;
968        cam_low_light_mode_t low_light_mode;
969        cam_capture_manual_3A_t manual_3A_mode;
970    };
971} cam_capture_settings_t;
972
973typedef struct {
974    uint32_t num_batch;  /*Number of frames batch requested*/
975    cam_capture_settings_t configs[MAX_CAPTURE_BATCH_NUM];
976} cam_capture_frame_config_t;
977
978typedef struct {
979    uint8_t stepsize;
980    uint8_t direction;
981    int32_t num_steps;
982    uint8_t ttype;
983} tune_actuator_t;
984
985typedef struct {
986    uint8_t module;
987    uint8_t type;
988    int32_t value;
989} tune_cmd_t;
990
991typedef enum {
992    CAM_AEC_ROI_OFF,
993    CAM_AEC_ROI_ON
994} cam_aec_roi_ctrl_t;
995
996typedef enum {
997    CAM_AEC_ROI_BY_INDEX,
998    CAM_AEC_ROI_BY_COORDINATE,
999} cam_aec_roi_type_t;
1000
1001typedef struct {
1002    uint32_t x;
1003    uint32_t y;
1004} cam_coordinate_type_t;
1005
1006typedef struct {
1007    int32_t numerator;
1008    int32_t denominator;
1009} cam_rational_type_t;
1010
1011typedef struct {
1012    cam_aec_roi_ctrl_t aec_roi_enable;
1013    cam_aec_roi_type_t aec_roi_type;
1014    union {
1015        cam_coordinate_type_t coordinate[MAX_ROI];
1016        uint32_t aec_roi_idx[MAX_ROI];
1017    } cam_aec_roi_position;
1018} cam_set_aec_roi_t;
1019
1020typedef struct {
1021    uint32_t frm_id;
1022    uint8_t num_roi;
1023    cam_rect_t roi[MAX_ROI];
1024    int32_t weight[MAX_ROI];
1025    uint8_t is_multiwindow;
1026} cam_roi_info_t;
1027
1028typedef enum {
1029    CAM_WAVELET_DENOISE_YCBCR_PLANE,
1030    CAM_WAVELET_DENOISE_CBCR_ONLY,
1031    CAM_WAVELET_DENOISE_STREAMLINE_YCBCR,
1032    CAM_WAVELET_DENOISE_STREAMLINED_CBCR
1033} cam_denoise_process_type_t;
1034
1035typedef struct {
1036    uint8_t denoise_enable;
1037    cam_denoise_process_type_t process_plates;
1038} cam_denoise_param_t;
1039
1040#define CAM_FACE_PROCESS_MASK_DETECTION     (1U<<0)
1041#define CAM_FACE_PROCESS_MASK_RECOGNITION   (1U<<1)
1042#define CAM_FACE_PROCESS_MASK_FOCUS         (1U<<2)
1043#define CAM_FACE_PROCESS_MASK_BLINK         (1U<<3)
1044#define CAM_FACE_PROCESS_MASK_SMILE         (1U<<4)
1045#define CAM_FACE_PROCESS_MASK_GAZE          (1U<<5)
1046
1047typedef struct {
1048    uint32_t fd_mode;          /* mask of face process */
1049    uint32_t num_fd;
1050} cam_fd_set_parm_t;
1051
1052typedef enum {
1053    QCAMERA_FD_PREVIEW,
1054    QCAMERA_FD_SNAPSHOT
1055}qcamera_face_detect_type_t;
1056
1057typedef enum {
1058    CAM_FACE_CT_POINT_EYE_L_PUPIL,
1059    CAM_FACE_CT_POINT_EYE_L_IN,
1060    CAM_FACE_CT_POINT_EYE_L_OUT,
1061    CAM_FACE_CT_POINT_EYE_L_UP,
1062    CAM_FACE_CT_POINT_EYE_L_DOWN,
1063    CAM_FACE_CT_POINT_EYE_R_PUPIL,
1064    CAM_FACE_CT_POINT_EYE_R_IN,
1065    CAM_FACE_CT_POINT_EYE_R_OUT,
1066    CAM_FACE_CT_POINT_EYE_R_UP,
1067    CAM_FACE_CT_POINT_EYE_R_DOWN,
1068    CAM_FACE_CT_POINT_EYE_MAX
1069} cam_face_ct_point_eye_t;
1070
1071typedef enum {
1072    CAM_FACE_CT_POINT_FOREHEAD,
1073    CAM_FACE_CT_POINT_FOREHEAD_MAX
1074} cam_face_ct_point_forh_t;
1075
1076typedef enum {
1077    CAM_FACE_CT_POINT_NOSE,
1078    CAM_FACE_CT_POINT_NOSE_TIP,
1079    CAM_FACE_CT_POINT_NOSE_L,
1080    CAM_FACE_CT_POINT_NOSE_R,
1081    CAM_FACE_CT_POINT_NOSE_L_0,
1082    CAM_FACE_CT_POINT_NOSE_R_0,
1083    CAM_FACE_CT_POINT_NOSE_L_1,
1084    CAM_FACE_CT_POINT_NOSE_R_1,
1085    CAM_FACE_CT_POINT_NOSE_MAX
1086} cam_face_ct_point_nose_t;
1087
1088typedef enum {
1089    CAM_FACE_CT_POINT_MOUTH_L,
1090    CAM_FACE_CT_POINT_MOUTH_R,
1091    CAM_FACE_CT_POINT_MOUTH_UP,
1092    CAM_FACE_CT_POINT_MOUTH_DOWN,
1093    CAM_FACE_CT_POINT_MOUTH_MAX
1094} cam_face_ct_point_mouth_t;
1095
1096typedef enum {
1097    CAM_FACE_CT_POINT_LIP_UP,
1098    CAM_FACE_CT_POINT_LIP_DOWN,
1099    CAM_FACE_CT_POINT_LIP_MAX
1100} cam_face_ct_point_lip_t;
1101
1102typedef enum {
1103    CAM_FACE_CT_POINT_BROW_L_UP,
1104    CAM_FACE_CT_POINT_BROW_L_DOWN,
1105    CAM_FACE_CT_POINT_BROW_L_IN,
1106    CAM_FACE_CT_POINT_BROW_L_OUT,
1107    CAM_FACE_CT_POINT_BROW_R_UP,
1108    CAM_FACE_CT_POINT_BROW_R_DOWN,
1109    CAM_FACE_CT_POINT_BROW_R_IN,
1110    CAM_FACE_CT_POINT_BROW_R_OUT,
1111    CAM_FACE_CT_POINT_BROW_MAX
1112} cam_face_ct_point_brow_t;
1113
1114typedef enum {
1115    CAM_FACE_CT_POINT_CHIN,
1116    CAM_FACE_CT_POINT_CHIN_L,
1117    CAM_FACE_CT_POINT_CHIN_R,
1118    CAM_FACE_CT_POINT_CHIN_MAX
1119} cam_face_ct_point_chin_t;
1120
1121typedef enum {
1122    CAM_FACE_CT_POINT_EAR_L_DOWN,
1123    CAM_FACE_CT_POINT_EAR_R_DOWN,
1124    CAM_FACE_CT_POINT_EAR_L_UP,
1125    CAM_FACE_CT_POINT_EAR_R_UP,
1126    CAM_FACE_CT_POINT_EAR_MAX
1127} cam_face_ct_point_ear_t;
1128
1129typedef struct {
1130  uint8_t is_eye_valid;
1131  cam_coordinate_type_t contour_eye_pt[CAM_FACE_CT_POINT_EYE_MAX];
1132  uint8_t is_forehead_valid;
1133  cam_coordinate_type_t contour_forh_pt[CAM_FACE_CT_POINT_FOREHEAD_MAX];
1134  uint8_t is_nose_valid;
1135  cam_coordinate_type_t contour_nose_pt[CAM_FACE_CT_POINT_NOSE_MAX];
1136  uint8_t is_mouth_valid;
1137  cam_coordinate_type_t contour_mouth_pt[CAM_FACE_CT_POINT_MOUTH_MAX];
1138  uint8_t is_lip_valid;
1139  cam_coordinate_type_t contour_lip_pt[CAM_FACE_CT_POINT_LIP_MAX];
1140  uint8_t is_brow_valid;
1141  cam_coordinate_type_t contour_brow_pt[CAM_FACE_CT_POINT_BROW_MAX];
1142  uint8_t is_chin_valid;
1143  cam_coordinate_type_t contour_chin_pt[CAM_FACE_CT_POINT_CHIN_MAX];
1144  uint8_t is_ear_valid;
1145  cam_coordinate_type_t contour_ear_pt[CAM_FACE_CT_POINT_EAR_MAX];
1146} cam_face_contour_info_t;
1147
1148typedef struct {
1149    cam_face_contour_info_t face_contour[MAX_ROI];
1150} cam_face_contour_data_t;
1151
1152typedef struct {
1153    cam_coordinate_type_t left_eye_center;  /* coordinate of center of left eye */
1154    cam_coordinate_type_t right_eye_center; /* coordinate of center of right eye */
1155    cam_coordinate_type_t mouth_center;     /* coordinate of center of mouth */
1156} cam_face_landmarks_info_t;
1157
1158typedef struct {
1159    cam_face_landmarks_info_t face_landmarks[MAX_ROI];
1160} cam_face_landmarks_data_t;
1161
1162typedef struct {
1163    uint8_t smile_degree;      /* smile degree (0, -100) */
1164    uint8_t smile_confidence;  /* smile confidence (0, 100) */
1165} cam_face_smile_info_t;
1166
1167typedef struct {
1168    cam_face_smile_info_t smile[MAX_ROI];
1169} cam_face_smile_data_t;
1170
1171typedef struct {
1172    int8_t gaze_angle;         /* -90 -45 0 45 90 for head left to rigth tilt */
1173    int32_t updown_dir;        /* up down direction (-180, 179) */
1174    int32_t leftright_dir;     /* left right direction (-180, 179) */
1175    int32_t roll_dir;          /* roll direction (-180, 179) */
1176    int8_t left_right_gaze;    /* left right gaze degree (-50, 50) */
1177    int8_t top_bottom_gaze;    /* up down gaze degree (-50, 50) */
1178} cam_face_gaze_info_t;
1179
1180typedef struct {
1181    cam_face_gaze_info_t gaze[MAX_ROI];
1182} cam_face_gaze_data_t;
1183
1184typedef struct {
1185    uint8_t blink_detected;    /* if blink is detected */
1186    uint8_t left_blink;        /* left eye blink degeree (0, -100) */
1187    uint8_t right_blink;       /* right eye blink degree (0, - 100) */
1188} cam_face_blink_info_t;
1189
1190typedef struct {
1191    cam_face_blink_info_t blink[MAX_ROI];
1192} cam_face_blink_data_t;
1193
1194typedef struct {
1195    uint8_t face_recognised;   /* if face is recognised */
1196    uint32_t unique_id;   /* if face is recognised */
1197} cam_face_recog_info_t;
1198
1199typedef struct {
1200    cam_face_recog_info_t face_rec[MAX_ROI];
1201} cam_face_recog_data_t;
1202
1203typedef struct {
1204    int32_t face_id;            /* unique id for face tracking within view unless view changes */
1205    int8_t score;              /* score of confidence (0, -100) */
1206    cam_rect_t face_boundary;  /* boundary of face detected */
1207} cam_face_detection_info_t;
1208
1209typedef struct {
1210    uint32_t frame_id;                         /* frame index of which faces are detected */
1211    uint8_t num_faces_detected;                /* number of faces detected */
1212    cam_face_detection_info_t faces[MAX_ROI];  /* detailed information of faces detected */
1213    qcamera_face_detect_type_t fd_type;        /* face detect for preview or snapshot frame*/
1214    cam_dimension_t fd_frame_dim;              /* frame dims on which fd is applied */
1215    uint8_t update_flag;                       /* flag to inform whether HAL needs to send cb
1216                                                * to app or not */
1217} cam_face_detection_data_t;
1218
1219// definition of composite face detection data
1220typedef struct {
1221    cam_face_detection_data_t detection_data;
1222
1223    int8_t recog_valid;
1224    cam_face_recog_data_t recog_data;
1225
1226    int8_t blink_valid;
1227    cam_face_blink_data_t blink_data;
1228
1229    int8_t gaze_valid;
1230    cam_face_gaze_data_t gaze_data;
1231
1232    int8_t smile_valid;
1233    cam_face_smile_data_t smile_data;
1234
1235    int8_t landmark_valid;
1236    cam_face_landmarks_data_t landmark_data;
1237
1238    int8_t contour_valid;
1239    cam_face_contour_data_t contour_data;
1240} cam_faces_data_t;
1241
1242#define CAM_HISTOGRAM_STATS_SIZE 256
1243typedef struct {
1244    uint32_t max_hist_value;
1245    uint32_t hist_buf[CAM_HISTOGRAM_STATS_SIZE]; /* buf holding histogram stats data */
1246} cam_histogram_data_t;
1247
1248typedef struct {
1249    cam_histogram_data_t r_stats;
1250    cam_histogram_data_t b_stats;
1251    cam_histogram_data_t gr_stats;
1252    cam_histogram_data_t gb_stats;
1253} cam_bayer_hist_stats_t;
1254
1255typedef enum {
1256    CAM_HISTOGRAM_TYPE_BAYER,
1257    CAM_HISTOGRAM_TYPE_YUV
1258} cam_histogram_type_t;
1259
1260typedef struct {
1261    cam_histogram_type_t type;
1262    union {
1263        cam_bayer_hist_stats_t bayer_stats;
1264        cam_histogram_data_t yuv_stats;
1265    };
1266} cam_hist_stats_t;
1267
1268enum cam_focus_distance_index{
1269  CAM_FOCUS_DISTANCE_NEAR_INDEX,  /* 0 */
1270  CAM_FOCUS_DISTANCE_OPTIMAL_INDEX,
1271  CAM_FOCUS_DISTANCE_FAR_INDEX,
1272  CAM_FOCUS_DISTANCE_MAX_INDEX
1273};
1274
1275typedef struct {
1276  float focus_distance[CAM_FOCUS_DISTANCE_MAX_INDEX];
1277} cam_focus_distances_info_t;
1278
1279typedef struct {
1280    uint32_t scale;
1281    float diopter;
1282} cam_focus_pos_info_t ;
1283
1284typedef struct {
1285    float focalLengthRatio;
1286} cam_focal_length_ratio_t;
1287
1288typedef struct {
1289    uint8_t needFlush;
1290    uint32_t focused_frame_idx;
1291} cam_af_flush_info_t;
1292
1293/* Different autofocus cycle when calling do_autoFocus
1294 * CAM_AF_COMPLETE_EXISTING_SWEEP: Complete existing sweep
1295 * if one is ongoing, and lock.
1296 * CAM_AF_DO_ONE_FULL_SWEEP: Do one full sweep, regardless
1297 * of the current state, and lock.
1298 * CAM_AF_START_CONTINUOUS_SWEEP: Start continous sweep.
1299 * After do_autoFocus, HAL receives an event: CAM_AF_FOCUSED,
1300 * or CAM_AF_NOT_FOCUSED.
1301 * cancel_autoFocus stops any lens movement.
1302 * Each do_autoFocus call only produces 1 FOCUSED/NOT_FOCUSED
1303 * event, not both.
1304 */
1305typedef enum {
1306    CAM_AF_COMPLETE_EXISTING_SWEEP,
1307    CAM_AF_DO_ONE_FULL_SWEEP,
1308    CAM_AF_START_CONTINUOUS_SWEEP
1309} cam_autofocus_cycle_t;
1310
1311typedef enum {
1312    CAM_AF_SCANNING,
1313    CAM_AF_FOCUSED,
1314    CAM_AF_NOT_FOCUSED,
1315    CAM_CAF_SCANNING,
1316    CAM_CAF_FOCUSED,
1317    CAM_CAF_NOT_FOCUSED,
1318    CAM_AF_INACTIVE
1319} cam_autofocus_state_t;
1320
1321//Don't change the order of the AF states below. It should match
1322//with the corresponding enum in frameworks (camera3.h and
1323//CameraMetadata.java)
1324typedef enum {
1325    CAM_AF_STATE_INACTIVE,
1326    CAM_AF_STATE_PASSIVE_SCAN,
1327    CAM_AF_STATE_PASSIVE_FOCUSED,
1328    CAM_AF_STATE_ACTIVE_SCAN,
1329    CAM_AF_STATE_FOCUSED_LOCKED,
1330    CAM_AF_STATE_NOT_FOCUSED_LOCKED,
1331    CAM_AF_STATE_PASSIVE_UNFOCUSED
1332} cam_af_state_t;
1333
1334typedef struct {
1335    cam_af_state_t focus_state;           /* state of focus */
1336    cam_focus_distances_info_t focus_dist;       /* focus distance */
1337    cam_focus_mode_type focus_mode;        /* focus mode from backend */
1338    int32_t focus_pos;
1339    cam_af_flush_info_t flush_info;
1340} cam_auto_focus_data_t;
1341
1342typedef struct {
1343    uint32_t stream_id;
1344    cam_rect_t crop;
1345    cam_rect_t roi_map;
1346} cam_stream_crop_info_t;
1347
1348typedef struct {
1349    uint8_t num_of_streams;
1350    cam_stream_crop_info_t crop_info[MAX_NUM_STREAMS];
1351} cam_crop_data_t;
1352
1353typedef struct {
1354    uint32_t stream_id;
1355    uint32_t cds_enable;
1356} cam_stream_cds_info_t;
1357
1358typedef struct {
1359    uint8_t session_cds_enable;
1360    uint8_t num_of_streams;
1361    cam_stream_cds_info_t cds_info[MAX_NUM_STREAMS];
1362} cam_cds_data_t;
1363
1364typedef enum {
1365    DO_NOT_NEED_FUTURE_FRAME,
1366    NEED_FUTURE_FRAME,
1367} cam_prep_snapshot_state_t;
1368
1369#define CC_GAINS_COUNT  4
1370
1371typedef struct {
1372    float gains[CC_GAINS_COUNT];
1373} cam_color_correct_gains_t;
1374
1375typedef struct {
1376    // If LED is ON and Burst Num > 1, this is first LED ON frame
1377    uint32_t min_frame_idx;
1378    // If LED is ON and Burst Num > 1, this is first LED Off frame after ON
1379    uint32_t max_frame_idx;
1380    // Used only when LED Is ON and burst num > 1
1381    uint32_t num_led_on_frames;
1382    // Skip count after LED is turned OFF
1383    uint32_t frame_skip_count;
1384    // Batch id for each picture request
1385    uint32_t config_batch_idx;
1386} cam_frame_idx_range_t;
1387
1388typedef enum {
1389  S_NORMAL = 0,
1390  S_SCENERY,
1391  S_PORTRAIT,
1392  S_PORTRAIT_BACKLIGHT,
1393  S_SCENERY_BACKLIGHT,
1394  S_BACKLIGHT,
1395  S_HDR,
1396  S_MAX_DEFAULT,
1397  S_CUSTOM0 = S_MAX_DEFAULT,
1398  S_CUSTOM1,
1399  S_CUSTOM2,
1400  S_CUSTOM3,
1401  S_CUSTOM4,
1402  S_CUSTOM5,
1403  S_CUSTOM6,
1404  S_CUSTOM7,
1405  S_CUSTOM8,
1406  S_CUSTOM9,
1407  S_MAX,
1408} cam_auto_scene_t;
1409
1410typedef struct {
1411  uint32_t is_hdr_scene;
1412  float    hdr_confidence;
1413} cam_asd_hdr_scene_data_t;
1414
1415typedef struct {
1416  uint32_t          detected;
1417  float             confidence;
1418  uint32_t          auto_compensation;
1419} cam_asd_scene_info_t;
1420
1421typedef struct {
1422  cam_auto_scene_t      detected_scene;
1423  uint8_t               max_n_scenes;
1424  cam_asd_scene_info_t  scene_info[S_MAX];
1425} cam_asd_decision_t;
1426
1427
1428typedef struct {
1429   uint32_t meta_frame_id;
1430} cam_meta_valid_t;
1431
1432typedef enum {
1433    CAM_SENSOR_RAW,
1434    CAM_SENSOR_YUV,
1435    CAM_SENSOR_MONO
1436} cam_sensor_t;
1437
1438typedef struct {
1439    cam_flash_mode_t flash_mode;
1440    float            aperture_value;
1441    cam_flash_state_t        flash_state;
1442    float            focal_length;
1443    float            f_number;
1444    int32_t          sensing_method;
1445    float            crop_factor;
1446    cam_sensor_t sens_type;
1447} cam_sensor_params_t;
1448
1449typedef enum {
1450    CAM_METERING_MODE_UNKNOWN = 0,
1451    CAM_METERING_MODE_AVERAGE = 1,
1452    CAM_METERING_MODE_CENTER_WEIGHTED_AVERAGE = 2,
1453    CAM_METERING_MODE_SPOT = 3,
1454    CAM_METERING_MODE_MULTI_SPOT = 4,
1455    CAM_METERING_MODE_PATTERN = 5,
1456    CAM_METERING_MODE_PARTIAL = 6,
1457    CAM_METERING_MODE_OTHER = 255,
1458} cam_metering_mode_t;
1459
1460typedef struct {
1461    float exp_time;
1462    int32_t iso_value;
1463    uint32_t flash_needed;
1464    uint32_t settled;
1465    cam_wb_mode_type wb_mode;
1466    uint32_t metering_mode;
1467    uint32_t exposure_program;
1468    uint32_t exposure_mode;
1469    uint32_t scenetype;
1470    float brightness;
1471    float est_snap_exp_time;
1472    int32_t est_snap_iso_value;
1473    uint32_t est_snap_luma;
1474    uint32_t est_snap_target;
1475} cam_3a_params_t;
1476
1477typedef struct {
1478    uint64_t sw_version_number;
1479    int32_t aec_debug_data_size;
1480    char aec_private_debug_data[AEC_DEBUG_DATA_SIZE];
1481} cam_ae_exif_debug_t;
1482
1483typedef struct {
1484    int8_t awb_ccm_enable;
1485    int8_t hard_awb_ccm_flag;
1486    int8_t ccm_update_flag;
1487    float  ccm[AWB_NUM_CCM_ROWS][AWB_NUM_CCM_COLS];
1488    float  ccm_offset[AWB_NUM_CCM_ROWS];
1489} cam_awb_ccm_update_t;
1490
1491typedef struct {
1492    int32_t cct_value;
1493    cam_awb_gain_t rgb_gains;
1494    cam_awb_ccm_update_t ccm_update;
1495} cam_awb_params_t;
1496
1497typedef struct {
1498    int32_t awb_debug_data_size;
1499    char awb_private_debug_data[AWB_DEBUG_DATA_SIZE];
1500} cam_awb_exif_debug_t;
1501
1502typedef struct {
1503    int32_t af_debug_data_size;
1504    int32_t haf_debug_data_size;
1505    int32_t tof_debug_data_size;
1506    int32_t dciaf_debug_data_size;
1507    int32_t pdaf_debug_data_size;
1508    char af_private_debug_data[AF_DEBUG_DATA_SIZE];
1509    int32_t af_stats_buffer_size;
1510    char af_stats_private_debug_data[AF_STATS_DEBUG_DATA_SIZE];
1511} cam_af_exif_debug_t;
1512
1513typedef struct {
1514    int32_t asd_debug_data_size;
1515    char asd_private_debug_data[ASD_DEBUG_DATA_SIZE];
1516} cam_asd_exif_debug_t;
1517
1518typedef struct {
1519    int32_t bg_stats_buffer_size;
1520    int32_t bhist_stats_buffer_size;
1521    int32_t bg_config_buffer_size;
1522    char stats_buffer_private_debug_data[STATS_BUFFER_DEBUG_DATA_SIZE];
1523} cam_stats_buffer_exif_debug_t;
1524
1525/* 3A version*/
1526typedef struct {
1527    uint16_t major_version;
1528    uint16_t minor_version;
1529    uint16_t patch_version;
1530    uint16_t new_feature_des;
1531} cam_q3a_version_t;
1532
1533typedef struct {
1534    uint32_t tuning_data_version;
1535    size_t tuning_sensor_data_size;
1536    size_t tuning_vfe_data_size;
1537    size_t tuning_cpp_data_size;
1538    size_t tuning_cac_data_size;
1539    size_t tuning_cac_data_size2;
1540    size_t tuning_mod3_data_size;
1541    uint8_t  data[TUNING_DATA_MAX];
1542}tuning_params_t;
1543
1544typedef struct {
1545    int32_t event_type;
1546    cam_dimension_t dim;
1547    size_t size;
1548    char path[QCAMERA_MAX_FILEPATH_LENGTH];
1549    cam_format_t picture_format;
1550} cam_int_evt_params_t;
1551
1552typedef struct {
1553  uint8_t private_isp_data[MAX_ISP_DATA_SIZE];
1554} cam_chromatix_lite_isp_t;
1555
1556typedef struct {
1557  uint8_t private_pp_data[MAX_PP_DATA_SIZE];
1558} cam_chromatix_lite_pp_t;
1559
1560typedef struct {
1561  uint8_t private_stats_data[MAX_AE_STATS_DATA_SIZE];
1562} cam_chromatix_lite_ae_stats_t;
1563
1564typedef struct {
1565  uint8_t private_stats_data[MAX_AWB_STATS_DATA_SIZE];
1566} cam_chromatix_lite_awb_stats_t;
1567
1568typedef struct {
1569  uint8_t private_stats_data[MAX_AF_STATS_DATA_SIZE];
1570} cam_chromatix_lite_af_stats_t;
1571
1572typedef struct {
1573  uint8_t private_stats_data[MAX_ASD_STATS_DATA_SIZE];
1574} cam_chromatix_lite_asd_stats_t;
1575
1576typedef struct {
1577   uint32_t min_buffers;
1578   uint32_t max_buffers;
1579} cam_buffer_info_t;
1580
1581typedef struct {
1582    cam_dimension_t stream_sizes[MAX_NUM_STREAMS];
1583    uint32_t num_streams;
1584    cam_stream_type_t type[MAX_NUM_STREAMS];
1585    uint32_t postprocess_mask[MAX_NUM_STREAMS];
1586    cam_buffer_info_t buffer_info;
1587    cam_is_type_t is_type;
1588    cam_hfr_mode_t hfr_mode;
1589    cam_format_t format[MAX_NUM_STREAMS];
1590    uint32_t buf_alignment;
1591    uint32_t min_stride;
1592    uint32_t min_scanline;
1593    uint8_t batch_size;
1594} cam_stream_size_info_t;
1595
1596
1597typedef enum {
1598    CAM_INTF_OVERWRITE_MINI_CHROMATIX_OFFLINE,
1599    CAM_INTF_OVERWRITE_ISP_HW_DATA_OFFLINE,
1600    CAM_INTF_OVERWRITE_MINI_CHROMATIX_ONLINE,
1601    CAM_INTF_OVERWRITE_ISP_HW_DATA_ONLINE,
1602    CAM_INTF_OVERWRITE_MAX,
1603} cam_intf_overwrite_type_t;
1604
1605typedef struct {
1606  uint8_t lds_enabled;
1607  float rnr_sampling_factor;
1608} cam_img_hysterisis_info_t;
1609
1610typedef struct {
1611  /* dynamic feature enablement */
1612  uint64_t dyn_feature_mask;
1613  /* input frame count for stacking */
1614  uint32_t input_count;
1615  /* reserved for future use */
1616  uint8_t  reserved[32];
1617} cam_dyn_img_data_t;
1618
1619typedef struct {
1620  cam_intf_overwrite_type_t overwrite_type;
1621  char isp_hw_data_list[4096];     /*add upper bound memory, customer to fill*/
1622  char chromatix_data_overwrite[4096]; /*add bound memory, customer fill*/
1623} cam_hw_data_overwrite_t;
1624
1625typedef struct {
1626    uint32_t num_streams;
1627    uint32_t streamID[MAX_NUM_STREAMS];
1628} cam_stream_ID_t;
1629
1630/*CAC Message posted during pipeline*/
1631typedef struct {
1632    uint32_t frame_id;
1633    int32_t buf_idx;
1634} cam_cac_info_t;
1635
1636typedef struct
1637{
1638  uint32_t id;            /* Frame ID */
1639  uint64_t timestamp;    /* Time stamp */
1640  uint32_t distance_in_mm; /* Distance of object in ROI's in milimeters */
1641  uint32_t confidence;     /* Confidence on distance from 0(No confidence)to 1024(max) */
1642  uint32_t status;        /* Status of DCRF library execution call */
1643  cam_rect_t focused_roi; /* ROI's for which distance is estimated */
1644  uint32_t focused_x;     /* Focus location X inside ROI with distance estimation */
1645  uint32_t focused_y;     /* Focus location Y inside ROI with distance estimation */
1646} cam_dcrf_result_t;
1647
1648typedef struct {
1649    uint32_t frame_id;
1650    uint32_t num_streams;
1651    uint32_t stream_id[MAX_NUM_STREAMS];
1652} cam_buf_divert_info_t;
1653
1654typedef  struct {
1655    uint8_t is_stats_valid;               /* if histgram data is valid */
1656    cam_hist_stats_t stats_data;          /* histogram data */
1657
1658    uint8_t is_faces_valid;               /* if face detection data is valid */
1659    cam_face_detection_data_t faces_data; /* face detection result */
1660
1661    uint8_t is_focus_valid;               /* if focus data is valid */
1662    cam_auto_focus_data_t focus_data;     /* focus data */
1663
1664    uint8_t is_crop_valid;                /* if crop data is valid */
1665    cam_crop_data_t crop_data;            /* crop data */
1666
1667    uint8_t is_prep_snapshot_done_valid;  /* if prep snapshot done is valid */
1668    cam_prep_snapshot_state_t prep_snapshot_done_state;  /* prepare snapshot done state */
1669
1670    uint8_t is_cac_valid;                 /* if cac info is valid */
1671    cam_cac_info_t cac_info;              /* cac info */
1672
1673    /* Hysterisis data from Img modules */
1674    uint8_t is_hyst_info_valid;           /* if hyst info is valid */
1675    cam_img_hysterisis_info_t img_hyst_info; /* hyst info */
1676
1677    /* if good frame idx range is valid */
1678    uint8_t is_good_frame_idx_range_valid;
1679    /* good frame idx range, make sure:
1680     * 1. good_frame_idx_range.min_frame_idx > current_frame_idx
1681     * 2. good_frame_idx_range.min_frame_idx - current_frame_idx < 100 */
1682    cam_frame_idx_range_t good_frame_idx_range;
1683
1684    cam_asd_decision_t cam_asd_info;
1685
1686    char private_metadata[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES];
1687
1688    /* AE parameters */
1689    uint8_t is_3a_params_valid;
1690    cam_3a_params_t cam_3a_params;
1691
1692    /* AE exif debug parameters */
1693    uint8_t is_ae_exif_debug_valid;
1694    cam_ae_exif_debug_t ae_exif_debug_params;
1695
1696    /* AWB exif debug parameters */
1697    uint8_t is_awb_exif_debug_valid;
1698    cam_awb_exif_debug_t awb_exif_debug_params;
1699
1700    /* AF exif debug parameters */
1701    uint8_t is_af_exif_debug_valid;
1702    cam_af_exif_debug_t af_exif_debug_params;
1703
1704    /* ASD exif debug parameters */
1705    uint8_t is_asd_exif_debug_valid;
1706    cam_asd_exif_debug_t asd_exif_debug_params;
1707
1708    /* Stats buffer exif debug parameters */
1709    uint8_t is_stats_buffer_exif_debug_valid;
1710    cam_stats_buffer_exif_debug_t stats_buffer_exif_debug_params;
1711
1712    /* AWB parameters */
1713    uint8_t is_awb_params_valid;
1714    cam_awb_params_t awb_params;
1715
1716    /* sensor parameters */
1717    uint8_t is_sensor_params_valid;
1718    cam_sensor_params_t sensor_params;
1719
1720    /* Meta valid params */
1721    uint8_t is_meta_valid;
1722    cam_meta_valid_t meta_valid_params;
1723
1724    /*Tuning Data*/
1725    uint8_t is_tuning_params_valid;
1726    tuning_params_t tuning_params;
1727
1728    uint8_t is_chromatix_lite_isp_valid;
1729    cam_chromatix_lite_isp_t chromatix_lite_isp_data;
1730
1731    uint8_t is_chromatix_lite_pp_valid;
1732    cam_chromatix_lite_pp_t chromatix_lite_pp_data;
1733
1734    uint8_t is_chromatix_lite_ae_stats_valid;
1735    cam_chromatix_lite_ae_stats_t chromatix_lite_ae_stats_data;
1736
1737    uint8_t is_chromatix_lite_awb_stats_valid;
1738    cam_chromatix_lite_awb_stats_t chromatix_lite_awb_stats_data;
1739
1740    uint8_t is_chromatix_lite_af_stats_valid;
1741    cam_chromatix_lite_af_stats_t chromatix_lite_af_stats_data;
1742
1743    uint8_t is_dcrf_result_valid;
1744    cam_dcrf_result_t dcrf_result;
1745
1746    /* Dynamic feature enablement from postprocessing modules */
1747    uint8_t is_dyn_img_data_valid;
1748    cam_dyn_img_data_t dyn_img_data;
1749
1750} cam_metadata_info_t;
1751
1752typedef enum {
1753    CAM_INTF_PARM_HAL_VERSION = 0x1,
1754
1755    /* Overall mode of 3A control routines. We need to have this parameter
1756     * because not all android.control.* have an OFF option, for example,
1757     * AE_FPS_Range, aePrecaptureTrigger */
1758    CAM_INTF_META_MODE,
1759    /* Whether AE is currently updating the sensor exposure and sensitivity
1760     * fields */
1761    CAM_INTF_META_AEC_MODE,
1762    CAM_INTF_PARM_WHITE_BALANCE,
1763    CAM_INTF_PARM_FOCUS_MODE,
1764
1765    /* common between HAL1 and HAL3 */
1766    CAM_INTF_PARM_ANTIBANDING,
1767    CAM_INTF_PARM_EXPOSURE_COMPENSATION,
1768    CAM_INTF_PARM_EV_STEP,
1769    CAM_INTF_PARM_AEC_LOCK,
1770    CAM_INTF_PARM_FPS_RANGE, /* 10 */
1771    CAM_INTF_PARM_AWB_LOCK,
1772    CAM_INTF_PARM_EFFECT,
1773    CAM_INTF_PARM_BESTSHOT_MODE,
1774    CAM_INTF_PARM_DIS_ENABLE,
1775    CAM_INTF_PARM_LED_MODE,
1776    CAM_INTF_META_HISTOGRAM,
1777    CAM_INTF_META_FACE_DETECTION,
1778    /* Whether optical image stabilization is enabled. */
1779    CAM_INTF_META_LENS_OPT_STAB_MODE,
1780    /* specific to HAl1 */
1781    CAM_INTF_META_AUTOFOCUS_DATA,
1782    CAM_INTF_PARM_QUERY_FLASH4SNAP, /* 20 */
1783    CAM_INTF_PARM_EXPOSURE,
1784    CAM_INTF_PARM_SHARPNESS,
1785    CAM_INTF_PARM_CONTRAST,
1786    CAM_INTF_PARM_SATURATION,
1787    CAM_INTF_PARM_BRIGHTNESS,
1788    CAM_INTF_PARM_ISO,
1789    CAM_INTF_PARM_ZOOM,
1790    CAM_INTF_PARM_ROLLOFF,
1791    CAM_INTF_PARM_MODE,             /* camera mode */
1792    CAM_INTF_PARM_AEC_ALGO_TYPE, /* 30 */ /* auto exposure algorithm */
1793    CAM_INTF_PARM_FOCUS_ALGO_TYPE,  /* focus algorithm */
1794    CAM_INTF_PARM_AEC_ROI,
1795    CAM_INTF_PARM_AF_ROI,
1796    CAM_INTF_PARM_SCE_FACTOR,
1797    CAM_INTF_PARM_FD,
1798    CAM_INTF_PARM_MCE,
1799    CAM_INTF_PARM_HFR,
1800    CAM_INTF_PARM_REDEYE_REDUCTION,
1801    CAM_INTF_PARM_WAVELET_DENOISE,
1802    CAM_INTF_PARM_TEMPORAL_DENOISE, /* 40 */
1803    CAM_INTF_PARM_HISTOGRAM,
1804    CAM_INTF_PARM_ASD_ENABLE,
1805    CAM_INTF_PARM_RECORDING_HINT,
1806    CAM_INTF_PARM_HDR,
1807    CAM_INTF_PARM_MAX_DIMENSION,
1808    CAM_INTF_PARM_RAW_DIMENSION,
1809    CAM_INTF_PARM_FRAMESKIP,
1810    CAM_INTF_PARM_ZSL_MODE,  /* indicating if it's running in ZSL mode */
1811    CAM_INTF_PARM_BURST_NUM,
1812    CAM_INTF_PARM_RETRO_BURST_NUM, /* 50 */
1813    CAM_INTF_PARM_BURST_LED_ON_PERIOD,
1814    CAM_INTF_PARM_HDR_NEED_1X, /* if HDR needs 1x output */
1815    CAM_INTF_PARM_LOCK_CAF,
1816    CAM_INTF_PARM_VIDEO_HDR,
1817    CAM_INTF_PARM_SENSOR_HDR,
1818    CAM_INTF_PARM_ROTATION,
1819    CAM_INTF_PARM_SCALE,
1820    CAM_INTF_PARM_VT, /* indicating if it's a Video Call Apllication */
1821    CAM_INTF_META_CROP_DATA,
1822    CAM_INTF_META_PREP_SNAPSHOT_DONE, /* 60 */
1823    CAM_INTF_META_GOOD_FRAME_IDX_RANGE,
1824    CAM_INTF_META_ASD_HDR_SCENE_DATA,
1825    CAM_INTF_META_ASD_SCENE_INFO,
1826    CAM_INTF_META_CURRENT_SCENE,
1827    CAM_INTF_META_AEC_INFO,
1828    CAM_INTF_META_SENSOR_INFO,
1829    CAM_INTF_META_CHROMATIX_LITE_ISP,
1830    CAM_INTF_META_CHROMATIX_LITE_PP,
1831    CAM_INTF_META_CHROMATIX_LITE_AE,
1832    CAM_INTF_META_CHROMATIX_LITE_AWB, /* 70 */
1833    CAM_INTF_META_CHROMATIX_LITE_AF,
1834    CAM_INTF_META_CHROMATIX_LITE_ASD,
1835    CAM_INTF_META_EXIF_DEBUG_AE,
1836    CAM_INTF_META_EXIF_DEBUG_AWB,
1837    CAM_INTF_META_EXIF_DEBUG_AF,
1838    CAM_INTF_META_EXIF_DEBUG_ASD,
1839    CAM_INTF_META_EXIF_DEBUG_STATS,
1840    CAM_INTF_PARM_GET_CHROMATIX,
1841    CAM_INTF_PARM_SET_RELOAD_CHROMATIX,
1842    CAM_INTF_PARM_SET_AUTOFOCUSTUNING, /* 80 */
1843    CAM_INTF_PARM_GET_AFTUNE,
1844    CAM_INTF_PARM_SET_RELOAD_AFTUNE,
1845    CAM_INTF_PARM_SET_VFE_COMMAND,
1846    CAM_INTF_PARM_SET_PP_COMMAND,
1847    CAM_INTF_PARM_TINTLESS,
1848    CAM_INTF_PARM_LONGSHOT_ENABLE,
1849    CAM_INTF_PARM_RDI_MODE,
1850    CAM_INTF_PARM_CDS_MODE,
1851    CAM_INTF_PARM_TONE_MAP_MODE,
1852    CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, /* 90 */
1853    CAM_INTF_PARM_DUAL_LED_CALIBRATION,
1854    CAM_INTF_PARM_ADV_CAPTURE_MODE,
1855
1856    /* stream based parameters */
1857    CAM_INTF_PARM_DO_REPROCESS,
1858    CAM_INTF_PARM_SET_BUNDLE,
1859    CAM_INTF_PARM_STREAM_FLIP,
1860    CAM_INTF_PARM_GET_OUTPUT_CROP,
1861
1862    CAM_INTF_PARM_EZTUNE_CMD,
1863    CAM_INTF_PARM_INT_EVT,
1864
1865    /* specific to HAL3 */
1866    /* Whether the metadata maps to a valid frame number */
1867    CAM_INTF_META_FRAME_NUMBER_VALID,
1868    /* Whether the urgent metadata maps to a valid frame number */
1869    CAM_INTF_META_URGENT_FRAME_NUMBER_VALID,
1870    /* Whether the stream buffer corresponding this frame is dropped or not */
1871    CAM_INTF_META_FRAME_DROPPED, /* 100 */
1872    /* COLOR CORRECTION.*/
1873    CAM_INTF_META_COLOR_CORRECT_MODE,
1874    /* A transform matrix to chromatically adapt pixels in the CIE XYZ (1931)
1875     * color space from the scene illuminant to the sRGB-standard D65-illuminant. */
1876    CAM_INTF_META_COLOR_CORRECT_TRANSFORM,
1877    /*Color channel gains in the Bayer raw domain in the order [RGeGoB]*/
1878    CAM_INTF_META_COLOR_CORRECT_GAINS,
1879    /*The best fit color transform matrix calculated by the stats*/
1880    CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM,
1881    /*The best fit color channels gains calculated by the stats*/
1882    CAM_INTF_META_PRED_COLOR_CORRECT_GAINS,
1883    /* CONTROL */
1884    /* A frame counter set by the framework. Must be maintained unchanged in
1885     * output frame. */
1886    CAM_INTF_META_FRAME_NUMBER,
1887    /* A frame counter set by the framework. Must be maintained unchanged in
1888     * output frame. */
1889    CAM_INTF_META_URGENT_FRAME_NUMBER,
1890    /*Number of streams and size of streams in current configuration*/
1891    CAM_INTF_META_STREAM_INFO,
1892    /* List of areas to use for metering */
1893    CAM_INTF_META_AEC_ROI,
1894    /* Whether the HAL must trigger precapture metering.*/
1895    CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, /* 110 */
1896    /* The ID sent with the latest CAMERA2_TRIGGER_PRECAPTURE_METERING call */
1897    /* Current state of AE algorithm */
1898    CAM_INTF_META_AEC_STATE,
1899    /* List of areas to use for focus estimation */
1900    CAM_INTF_META_AF_ROI,
1901    /* Whether the HAL must trigger autofocus. */
1902    CAM_INTF_META_AF_TRIGGER,
1903    /* Current state of AF algorithm */
1904    CAM_INTF_META_AF_STATE,
1905    /* List of areas to use for illuminant estimation */
1906    CAM_INTF_META_AWB_REGIONS,
1907    /* Current state of AWB algorithm */
1908    CAM_INTF_META_AWB_STATE,
1909    /*Whether black level compensation is frozen or free to vary*/
1910    CAM_INTF_META_BLACK_LEVEL_LOCK,
1911    /* Information to 3A routines about the purpose of this capture, to help
1912     * decide optimal 3A strategy */
1913    CAM_INTF_META_CAPTURE_INTENT,
1914    /* DEMOSAIC */
1915    /* Controls the quality of the demosaicing processing */
1916    CAM_INTF_META_DEMOSAIC,
1917    /* EDGE */
1918    /* Operation mode for edge enhancement */
1919    CAM_INTF_META_EDGE_MODE, /* 120 */
1920    /* Control the amount of edge enhancement applied to the images.*/
1921    /* 1-10; 10 is maximum sharpening */
1922    CAM_INTF_META_SHARPNESS_STRENGTH,
1923    /* FLASH */
1924    /* Power for flash firing/torch, 10 is max power; 0 is no flash. Linear */
1925    CAM_INTF_META_FLASH_POWER,
1926    /* Firing time of flash relative to start of exposure, in nanoseconds*/
1927    CAM_INTF_META_FLASH_FIRING_TIME,
1928    /* Current state of the flash unit */
1929    CAM_INTF_META_FLASH_STATE,
1930    /* GEOMETRIC */
1931    /* Operating mode of geometric correction */
1932    CAM_INTF_META_GEOMETRIC_MODE,
1933    /* Control the amount of shading correction applied to the images */
1934    CAM_INTF_META_GEOMETRIC_STRENGTH,
1935    /* HOT PIXEL */
1936    /* Set operational mode for hot pixel correction */
1937    CAM_INTF_META_HOTPIXEL_MODE,
1938    /* LENS */
1939    /* Size of the lens aperture */
1940    CAM_INTF_META_LENS_APERTURE,
1941    /* State of lens neutral density filter(s) */
1942    CAM_INTF_META_LENS_FILTERDENSITY,
1943    /* Lens optical zoom setting */
1944    CAM_INTF_META_LENS_FOCAL_LENGTH, /* 130 */
1945    /* Distance to plane of sharpest focus, measured from frontmost surface
1946     * of the lens */
1947    CAM_INTF_META_LENS_FOCUS_DISTANCE,
1948    /* The range of scene distances that are in sharp focus (depth of field) */
1949    CAM_INTF_META_LENS_FOCUS_RANGE,
1950    /*Whether the hal needs to output the lens shading map*/
1951    CAM_INTF_META_LENS_SHADING_MAP_MODE,
1952    /* Current lens status */
1953    CAM_INTF_META_LENS_STATE,
1954    /* NOISE REDUCTION */
1955    /* Mode of operation for the noise reduction algorithm */
1956    CAM_INTF_META_NOISE_REDUCTION_MODE,
1957   /* Control the amount of noise reduction applied to the images.
1958    * 1-10; 10 is max noise reduction */
1959    CAM_INTF_META_NOISE_REDUCTION_STRENGTH,
1960    /* SCALER */
1961    /* Top-left corner and width of the output region to select from the active
1962     * pixel array */
1963    CAM_INTF_META_SCALER_CROP_REGION,
1964    /* The estimated scene illumination lighting frequency */
1965    CAM_INTF_META_SCENE_FLICKER,
1966    /* SENSOR */
1967    /* Duration each pixel is exposed to light, in nanoseconds */
1968    CAM_INTF_META_SENSOR_EXPOSURE_TIME,
1969    /* Duration from start of frame exposure to start of next frame exposure,
1970     * in nanoseconds */
1971    CAM_INTF_META_SENSOR_FRAME_DURATION, /* 140 */
1972    /* Gain applied to image data. Must be implemented through analog gain only
1973     * if set to values below 'maximum analog sensitivity'. */
1974    CAM_INTF_META_SENSOR_SENSITIVITY,
1975    /* Time at start of exposure of first row */
1976    CAM_INTF_META_SENSOR_TIMESTAMP,
1977    /* Duration b/w start of first row exposure and the start of last
1978       row exposure in nanoseconds */
1979    CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW,
1980    /* SHADING */
1981    /* Quality of lens shading correction applied to the image data */
1982    CAM_INTF_META_SHADING_MODE,
1983    /* Control the amount of shading correction applied to the images.
1984     * unitless: 1-10; 10 is full shading compensation */
1985    CAM_INTF_META_SHADING_STRENGTH,
1986    /* STATISTICS */
1987    /* State of the face detector unit */
1988    CAM_INTF_META_STATS_FACEDETECT_MODE,
1989    /* Operating mode for histogram generation */
1990    CAM_INTF_META_STATS_HISTOGRAM_MODE,
1991    /* Operating mode for sharpness map generation */
1992    CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,
1993    /* A 3-channel sharpness map, based on the raw sensor data,
1994     * If only a monochrome sharpness map is supported, all channels
1995     * should have the same data
1996     */
1997    CAM_INTF_META_STATS_SHARPNESS_MAP,
1998
1999    /* TONEMAP */
2000    /* Tone map mode */
2001    CAM_INTF_META_TONEMAP_MODE, /* 150 */
2002    /* Table mapping RGB input values to output values */
2003    CAM_INTF_META_TONEMAP_CURVES,
2004
2005    CAM_INTF_META_FLASH_MODE,
2006    /* 2D array of gain factors for each color channel that was used to
2007     * compensate for lens shading for this frame */
2008    CAM_INTF_META_LENS_SHADING_MAP,
2009    CAM_INTF_META_PRIVATE_DATA,
2010    CAM_INTF_PARM_STATS_DEBUG_MASK,
2011    CAM_INTF_PARM_STATS_AF_PAAF,
2012    /* Indicates streams ID of all the requested buffers */
2013    CAM_INTF_META_STREAM_ID,
2014    CAM_INTF_PARM_FOCUS_BRACKETING,
2015    CAM_INTF_PARM_FLASH_BRACKETING,
2016    CAM_INTF_PARM_GET_IMG_PROP, /* 160 */
2017    CAM_INTF_META_JPEG_GPS_COORDINATES,
2018    CAM_INTF_META_JPEG_GPS_PROC_METHODS,
2019    CAM_INTF_META_JPEG_GPS_TIMESTAMP,
2020    CAM_INTF_META_JPEG_ORIENTATION,
2021    CAM_INTF_META_JPEG_QUALITY,
2022    CAM_INTF_META_JPEG_THUMB_QUALITY,
2023    CAM_INTF_META_JPEG_THUMB_SIZE,
2024
2025    CAM_INTF_META_TEST_PATTERN_DATA,
2026    /* DNG file support */
2027    CAM_INTF_META_PROFILE_TONE_CURVE,
2028    CAM_INTF_META_NEUTRAL_COL_POINT, /* 170 */
2029
2030    /* CAC */
2031    CAM_INTF_META_CAC_INFO,
2032    CAM_INTF_PARM_CAC,
2033    CAM_INTF_META_IMG_HYST_INFO,
2034
2035    /* trigger for all modules to read the debug/log level properties */
2036    CAM_INTF_PARM_UPDATE_DEBUG_LEVEL,
2037
2038    /* OTP : WB gr/gb */
2039    CAM_INTF_META_OTP_WB_GRGB,
2040    /* LED override for EZTUNE */
2041    CAM_INTF_META_LED_MODE_OVERRIDE,
2042    /* auto lens position info */
2043    CAM_INTF_META_FOCUS_POSITION,
2044    /* Manual exposure time */
2045    CAM_INTF_PARM_EXPOSURE_TIME,
2046    /* AWB meta data info */
2047    CAM_INTF_META_AWB_INFO,
2048    /* Manual lens position info */
2049    CAM_INTF_PARM_MANUAL_FOCUS_POS, /* 180 */
2050    /* Manual White balance gains */
2051    CAM_INTF_PARM_WB_MANUAL,
2052    /* Offline Data Overwrite */
2053    CAM_INTF_PARM_HW_DATA_OVERWRITE,
2054    /* IMG LIB reprocess debug section */
2055    CAM_INTF_META_IMGLIB, /* cam_intf_meta_imglib_t */
2056    /* OEM specific parameters */
2057    CAM_INTF_PARM_CUSTOM,
2058    /* parameters added for related cameras */
2059    /* fetch calibration info for related cam subsystem */
2060    CAM_INTF_PARM_RELATED_SENSORS_CALIBRATION,
2061    /* focal length ratio info */
2062    CAM_INTF_META_AF_FOCAL_LENGTH_RATIO,
2063    /* crop for binning & FOV adjust */
2064    CAM_INTF_META_SNAP_CROP_INFO_SENSOR,
2065    /* crop for trimming edge pixels */
2066    CAM_INTF_META_SNAP_CROP_INFO_CAMIF,
2067    /* crop for FOV adjust and zoom */
2068    CAM_INTF_META_SNAP_CROP_INFO_ISP,
2069    /* crop for image-stabilization and zoom */
2070    CAM_INTF_META_SNAP_CROP_INFO_CPP, /* 190 */
2071    /* parameter for enabling DCRF */
2072    CAM_INTF_PARM_DCRF,
2073    /* metadata tag for DCRF info */
2074    CAM_INTF_META_DCRF,
2075    /* FLIP mode parameter*/
2076    CAM_INTF_PARM_FLIP,
2077    /*Frame divert info from ISP*/
2078    CAM_INTF_BUF_DIVERT_INFO,
2079    /* Use AV timer */
2080    CAM_INTF_META_USE_AV_TIMER,
2081    CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR,
2082    /* Special event to request stream frames*/
2083    CAM_INTF_PARM_REQUEST_FRAMES,
2084    /* Special event to request operational mode*/
2085    CAM_INTF_PARM_REQUEST_OPS_MODE,
2086    /*Black level parameters*/
2087    CAM_INTF_META_LDAF_EXIF,
2088    CAM_INTF_META_BLACK_LEVEL_SOURCE_PATTERN,
2089    CAM_INTF_META_BLACK_LEVEL_APPLIED_PATTERN, /* 200 */
2090    CAM_INTF_META_CDS_DATA,
2091    /*3A low light level information*/
2092    CAM_INTF_META_LOW_LIGHT,
2093    /* dynamic feature detection */
2094    CAM_INTF_META_IMG_DYN_FEAT, /* 200 */
2095    /*Parameter entry to communicate manual
2096    capture type*/
2097    CAM_INTF_PARM_MANUAL_CAPTURE_TYPE,
2098    /*AF state change detected by AF module*/
2099    CAM_INTF_AF_STATE_TRANSITION,
2100    /* face recognition */
2101    CAM_INTF_META_FACE_RECOG,
2102    /* face blink detection */
2103    CAM_INTF_META_FACE_BLINK,
2104    /* face gaze detection */
2105    CAM_INTF_META_FACE_GAZE,
2106    /* face smile detection */
2107    CAM_INTF_META_FACE_SMILE,
2108    /* face landmark detection */
2109    CAM_INTF_META_FACE_LANDMARK, /* 210 */
2110    /* face contour detection */
2111    CAM_INTF_META_FACE_CONTOUR,
2112    /* Whether EIS is enabled */
2113    CAM_INTF_META_VIDEO_STAB_MODE,
2114    /* Touch exposure compensation (EV) status */
2115    CAM_INTF_META_TOUCH_AE_RESULT,
2116    /* Param for updating initial exposure index value*/
2117    CAM_INTF_PARM_INITIAL_EXPOSURE_INDEX,
2118    /* Gain applied post raw captrue.
2119       ISP digital gain */
2120    CAM_INTF_META_ISP_SENSITIVITY,
2121    /* Param for enabling instant aec*/
2122    CAM_INTF_PARM_INSTANT_AEC,
2123    CAM_INTF_PARM_MAX
2124} cam_intf_parm_type_t;
2125
2126typedef struct {
2127    uint32_t forced;
2128    union {
2129      uint32_t force_linecount_value;
2130      float    force_gain_value;
2131      float    force_snap_exp_value;
2132      float    force_exp_value;
2133      uint32_t force_snap_linecount_value;
2134      float    force_snap_gain_value;
2135    } u;
2136} cam_ez_force_params_t;
2137
2138typedef struct {
2139    float cam_black_level[4];
2140} cam_black_level_metadata_t;
2141
2142typedef enum {
2143    CAM_EZTUNE_CMD_STATUS,
2144    CAM_EZTUNE_CMD_AEC_ENABLE,
2145    CAM_EZTUNE_CMD_AWB_ENABLE,
2146    CAM_EZTUNE_CMD_AF_ENABLE,
2147    CAM_EZTUNE_CMD_AEC_FORCE_LINECOUNT,
2148    CAM_EZTUNE_CMD_AEC_FORCE_GAIN,
2149    CAM_EZTUNE_CMD_AEC_FORCE_EXP,
2150    CAM_EZTUNE_CMD_AEC_FORCE_SNAP_LC,
2151    CAM_EZTUNE_CMD_AEC_FORCE_SNAP_GAIN,
2152    CAM_EZTUNE_CMD_AEC_FORCE_SNAP_EXP,
2153    CAM_EZTUNE_CMD_AWB_MODE,
2154    CAM_EZTUNE_CMD_AWB_FORCE_DUAL_LED_IDX,
2155} cam_eztune_cmd_type_t;
2156
2157typedef struct {
2158  cam_eztune_cmd_type_t   cmd;
2159  union {
2160    int32_t running;
2161    int32_t aec_enable;
2162    int32_t awb_enable;
2163    int32_t af_enable;
2164    cam_ez_force_params_t ez_force_param;
2165    int32_t awb_mode;
2166    int32_t ez_force_dual_led_idx;
2167  } u;
2168} cam_eztune_cmd_data_t;
2169
2170
2171/*****************************************************************************
2172 *                 Code for HAL3 data types                                  *
2173 ****************************************************************************/
2174typedef enum {
2175    CAM_INTF_METADATA_MAX
2176} cam_intf_metadata_type_t;
2177
2178typedef enum {
2179    CAM_INTENT_CUSTOM,
2180    CAM_INTENT_PREVIEW,
2181    CAM_INTENT_STILL_CAPTURE,
2182    CAM_INTENT_VIDEO_RECORD,
2183    CAM_INTENT_VIDEO_SNAPSHOT,
2184    CAM_INTENT_ZERO_SHUTTER_LAG,
2185    CAM_INTENT_MAX,
2186} cam_intent_t;
2187
2188typedef enum {
2189    /* Full application control of pipeline. All 3A routines are disabled,
2190     * no other settings in android.control.* have any effect */
2191    CAM_CONTROL_OFF,
2192    /* Use settings for each individual 3A routine. Manual control of capture
2193     * parameters is disabled. All controls in android.control.* besides sceneMode
2194     * take effect */
2195    CAM_CONTROL_AUTO,
2196    /* Use specific scene mode. Enabling this disables control.aeMode,
2197     * control.awbMode and control.afMode controls; the HAL must ignore those
2198     * settings while USE_SCENE_MODE is active (except for FACE_PRIORITY scene mode).
2199     * Other control entries are still active. This setting can only be used if
2200     * availableSceneModes != UNSUPPORTED. TODO: Should we remove this and handle this
2201     * in HAL ?*/
2202    CAM_CONTROL_USE_SCENE_MODE,
2203    CAM_CONTROL_MAX
2204} cam_control_mode_t;
2205
2206typedef enum {
2207    /* Use the android.colorCorrection.transform matrix to do color conversion */
2208    CAM_COLOR_CORRECTION_TRANSFORM_MATRIX,
2209    /* Must not slow down frame rate relative to raw bayer output */
2210    CAM_COLOR_CORRECTION_FAST,
2211    /* Frame rate may be reduced by high quality */
2212    CAM_COLOR_CORRECTION_HIGH_QUALITY,
2213} cam_color_correct_mode_t;
2214
2215typedef enum {
2216    CAM_COLOR_CORRECTION_ABERRATION_OFF,
2217    CAM_COLOR_CORRECTION_ABERRATION_FAST,
2218    CAM_COLOR_CORRECTION_ABERRATION_HIGH_QUALITY,
2219    CAM_COLOR_CORRECTION_ABERRATION_MAX
2220} cam_aberration_mode_t;
2221
2222#define CC_MATRIX_ROWS 3
2223#define CC_MATRIX_COLS 3
2224
2225typedef struct {
2226    /* 3x3 float matrix in row-major order. each element is in range of (0, 1) */
2227    cam_rational_type_t transform_matrix[CC_MATRIX_ROWS][CC_MATRIX_COLS];
2228} cam_color_correct_matrix_t;
2229
2230#define CAM_FOCAL_LENGTHS_MAX     1
2231#define CAM_APERTURES_MAX         1
2232#define CAM_FILTER_DENSITIES_MAX  1
2233#define CAM_MAX_MAP_HEIGHT        6
2234#define CAM_MAX_MAP_WIDTH         6
2235#define CAM_MAX_SHADING_MAP_WIDTH 17
2236#define CAM_MAX_SHADING_MAP_HEIGHT 13
2237#define CAM_MAX_TONEMAP_CURVE_SIZE    512
2238#define CAM_MAX_FLASH_BRACKETING    5
2239
2240typedef struct {
2241    /* A 1D array of pairs of floats.
2242     * Mapping a 0-1 input range to a 0-1 output range.
2243     * The input range must be monotonically increasing with N,
2244     * and values between entries should be linearly interpolated.
2245     * For example, if the array is: [0.0, 0.0, 0.3, 0.5, 1.0, 1.0],
2246     * then the input->output mapping for a few sample points would be:
2247     * 0 -> 0, 0.15 -> 0.25, 0.3 -> 0.5, 0.5 -> 0.64 */
2248    float tonemap_points[CAM_MAX_TONEMAP_CURVE_SIZE][2];
2249} cam_tonemap_curve_t;
2250
2251typedef struct {
2252   size_t tonemap_points_cnt;
2253   cam_tonemap_curve_t curves[3];
2254} cam_rgb_tonemap_curves;
2255
2256typedef struct {
2257   size_t tonemap_points_cnt;
2258   cam_tonemap_curve_t curve;
2259} cam_profile_tone_curve;
2260
2261#define NEUTRAL_COL_POINTS 3
2262
2263typedef struct {
2264    cam_rational_type_t neutral_col_point[NEUTRAL_COL_POINTS];
2265} cam_neutral_col_point_t;
2266
2267typedef enum {
2268    OFF,
2269    FAST,
2270    QUALITY,
2271} cam_quality_preference_t;
2272
2273typedef enum {
2274    CAM_FLASH_CTRL_OFF,
2275    CAM_FLASH_CTRL_SINGLE,
2276    CAM_FLASH_CTRL_TORCH
2277} cam_flash_ctrl_t;
2278
2279typedef struct {
2280    uint8_t frame_dropped; /*  This flag indicates whether any stream buffer is dropped or not */
2281    cam_stream_ID_t cam_stream_ID; /* if dropped, Stream ID of dropped streams */
2282} cam_frame_dropped_t;
2283
2284typedef struct {
2285    uint8_t ae_mode;
2286    uint8_t awb_mode;
2287    uint8_t af_mode;
2288} cam_scene_mode_overrides_t;
2289
2290typedef struct {
2291    int32_t left;
2292    int32_t top;
2293    int32_t width;
2294    int32_t height;
2295} cam_crop_region_t;
2296
2297typedef struct {
2298    /* Estimated sharpness for each region of the input image.
2299     * Normalized to be between 0 and maxSharpnessMapValue.
2300     * Higher values mean sharper (better focused) */
2301    int32_t sharpness[CAM_MAX_MAP_WIDTH][CAM_MAX_MAP_HEIGHT];
2302} cam_sharpness_map_t;
2303
2304typedef struct {
2305   float lens_shading[4*CAM_MAX_SHADING_MAP_HEIGHT*CAM_MAX_SHADING_MAP_WIDTH];
2306} cam_lens_shading_map_t;
2307
2308typedef struct {
2309    int32_t min_value;
2310    int32_t max_value;
2311    int32_t def_value;
2312    int32_t step;
2313} cam_control_range_t;
2314
2315#define CAM_QCOM_FEATURE_NONE            0U
2316#define CAM_QCOM_FEATURE_FACE_DETECTION (1U<<0)
2317#define CAM_QCOM_FEATURE_DENOISE2D      (1U<<1)
2318#define CAM_QCOM_FEATURE_CROP           (1U<<2)
2319#define CAM_QCOM_FEATURE_ROTATION       (1U<<3)
2320#define CAM_QCOM_FEATURE_FLIP           (1U<<4)
2321#define CAM_QCOM_FEATURE_HDR            (1U<<5)
2322#define CAM_QCOM_FEATURE_REGISTER_FACE  (1U<<6)
2323#define CAM_QCOM_FEATURE_SHARPNESS      (1U<<7)
2324#define CAM_QCOM_FEATURE_VIDEO_HDR      (1U<<8)
2325#define CAM_QCOM_FEATURE_CAC            (1U<<9)
2326#define CAM_QCOM_FEATURE_SCALE          (1U<<10)
2327#define CAM_QCOM_FEATURE_EFFECT         (1U<<11)
2328#define CAM_QCOM_FEATURE_UBIFOCUS       (1U<<12)
2329#define CAM_QCOM_FEATURE_CHROMA_FLASH   (1U<<13)
2330#define CAM_QCOM_FEATURE_OPTIZOOM       (1U<<14)
2331#define CAM_QCOM_FEATURE_SENSOR_HDR     (1U<<15)
2332#define CAM_QCOM_FEATURE_REFOCUS        (1U<<16)
2333#define CAM_QCOM_FEATURE_CPP_TNR        (1U<<17)
2334#define CAM_QCOM_FEATURE_RAW_PROCESSING (1U<<18)
2335#define CAM_QCOM_FEATURE_TRUEPORTRAIT   (1U<<19)
2336#define CAM_QCOM_FEATURE_LLVD           (1U<<20)
2337#define CAM_QCOM_FEATURE_DIS20          (1U<<21)
2338#define CAM_QCOM_FEATURE_STILLMORE      (1U<<22)
2339#define CAM_QCOM_FEATURE_DCRF           (1U<<23)
2340#define CAM_QCOM_FEATURE_CDS            (1U<<24)
2341#define CAM_QCOM_FEATURE_EZTUNE         (1U<<25)
2342#define CAM_QCOM_FEATURE_DSDN           (1U<<26) //Special CDS in CPP block
2343#define CAM_QCOM_FEATURE_SW2D           (1U<<27)
2344#define CAM_OEM_FEATURE_1               (1U<<28)
2345#define CAM_OEM_FEATURE_2               (1U<<29)
2346#define CAM_QTI_FEATURE_SW_TNR          (1U<<30)
2347#define CAM_QCOM_FEATURE_METADATA_PROCESSING (1U<<31)
2348#define CAM_QCOM_FEATURE_MAX            32
2349#define CAM_QCOM_FEATURE_PP_SUPERSET    (CAM_QCOM_FEATURE_DENOISE2D|CAM_QCOM_FEATURE_CROP|\
2350                                         CAM_QCOM_FEATURE_ROTATION|CAM_QCOM_FEATURE_SHARPNESS|\
2351                                         CAM_QCOM_FEATURE_SCALE|CAM_QCOM_FEATURE_CAC|\
2352                                         CAM_QCOM_FEATURE_EZTUNE|CAM_QCOM_FEATURE_CPP_TNR|\
2353                                         CAM_QCOM_FEATURE_LLVD)
2354
2355#define CAM_QCOM_FEATURE_PP_PASS_1      CAM_QCOM_FEATURE_PP_SUPERSET
2356#define CAM_QCOM_FEATURE_PP_PASS_2      CAM_QCOM_FEATURE_SCALE | CAM_QCOM_FEATURE_CROP;
2357
2358// Counter clock wise
2359typedef enum {
2360    ROTATE_0 = 1<<0,
2361    ROTATE_90 = 1<<1,
2362    ROTATE_180 = 1<<2,
2363    ROTATE_270 = 1<<3,
2364} cam_rotation_t;
2365
2366typedef struct {
2367   cam_rotation_t rotation;         /* jpeg rotation */
2368   cam_rotation_t device_rotation;  /* device rotation */
2369   uint32_t streamId;
2370} cam_rotation_info_t;
2371
2372typedef enum {
2373    FLIP_NONE = 0, /* 00b */
2374    FLIP_H = 1,    /* 01b */
2375    FLIP_V = 2,    /* 10b */
2376    FLIP_V_H = 3,  /* 11b */
2377} cam_flip_t;
2378
2379typedef struct {
2380    uint32_t bundle_id;                            /* bundle id */
2381    uint8_t num_of_streams;                        /* number of streams in the bundle */
2382    uint32_t stream_ids[MAX_STREAM_NUM_IN_BUNDLE]; /* array of stream ids to be bundled */
2383} cam_bundle_config_t;
2384
2385typedef enum {
2386    CAM_ONLINE_REPROCESS_TYPE,    /* online reprocess, frames from running streams */
2387    CAM_OFFLINE_REPROCESS_TYPE,   /* offline reprocess, frames from external source */
2388} cam_reprocess_type_enum_t;
2389
2390typedef struct {
2391    uint8_t burst_count;
2392    uint8_t min_burst_count;
2393    uint8_t max_burst_count;
2394} cam_still_more_t;
2395
2396typedef struct {
2397    uint8_t burst_count;
2398    uint8_t output_count;
2399    uint8_t flash_bracketing[CAM_MAX_FLASH_BRACKETING];
2400    uint8_t metadata_index;
2401} cam_chroma_flash_t;
2402
2403typedef enum {
2404    CAM_HDR_MODE_SINGLEFRAME,    /* Single frame HDR mode which does only tone mapping */
2405    CAM_HDR_MODE_MULTIFRAME,     /* Multi frame HDR mode which needs two frames with 0.5x and 2x exposure respectively */
2406} cam_hdr_mode_enum_t;
2407
2408typedef struct {
2409    uint32_t hdr_enable;
2410    uint32_t hdr_need_1x; /* when CAM_QCOM_FEATURE_HDR enabled, indicate if 1x is needed for output */
2411    cam_hdr_mode_enum_t hdr_mode;
2412} cam_hdr_param_t;
2413
2414typedef struct {
2415    int32_t output_width;
2416    int32_t output_height;
2417} cam_scale_param_t;
2418
2419typedef struct {
2420    uint8_t enable;
2421    uint8_t burst_count;
2422    uint8_t focus_steps[MAX_AF_BRACKETING_VALUES];
2423    uint8_t output_count;
2424    uint32_t meta_max_size;
2425} cam_af_bracketing_t;
2426
2427typedef struct {
2428    uint8_t enable;
2429    uint8_t burst_count;
2430} cam_flash_bracketing_t;
2431
2432typedef struct {
2433    uint8_t enable;
2434    uint8_t burst_count;
2435    uint8_t zoom_threshold;
2436} cam_opti_zoom_t;
2437
2438typedef struct {
2439    size_t meta_max_size;
2440} cam_true_portrait_t;
2441
2442typedef enum {
2443    CAM_FLASH_OFF,
2444    CAM_FLASH_ON
2445} cam_flash_value_t;
2446
2447typedef struct {
2448    cam_sensor_t sens_type;
2449    cam_format_t native_format;
2450} cam_sensor_type_t;
2451
2452typedef struct {
2453    uint32_t result;
2454    uint32_t header_size;
2455    uint32_t width;
2456    uint32_t height;
2457    uint8_t data[0];
2458} cam_misc_buf_t;
2459
2460typedef struct {
2461    uint32_t misc_buffer_index;
2462} cam_misc_buf_param_t;
2463
2464typedef struct {
2465    /* reprocess feature mask */
2466    uint32_t feature_mask;
2467
2468    /* individual setting for features to be reprocessed */
2469    cam_denoise_param_t denoise2d;
2470    cam_rect_t input_crop;
2471    cam_rotation_t rotation;
2472    uint32_t flip;
2473    int32_t sharpness;
2474    int32_t effect;
2475    cam_hdr_param_t hdr_param;
2476    cam_scale_param_t scale_param;
2477
2478    uint8_t zoom_level;
2479    cam_flash_value_t flash_value;
2480    cam_misc_buf_param_t misc_buf_param;
2481    uint32_t burst_cnt;
2482    uint8_t cur_reproc_count;
2483    uint8_t total_reproc_count;
2484} cam_pp_feature_config_t;
2485
2486typedef struct {
2487    uint32_t input_stream_id;
2488    /* input source stream type */
2489    cam_stream_type_t input_stream_type;
2490} cam_pp_online_src_config_t;
2491
2492typedef struct {
2493    /* image format */
2494    cam_format_t input_fmt;
2495
2496    /* image dimension */
2497    cam_dimension_t input_dim;
2498
2499    /* buffer plane information, will be calc based on stream_type, fmt,
2500       dim, and padding_info(from stream config). Info including:
2501       offset_x, offset_y, stride, scanline, plane offset */
2502    cam_stream_buf_plane_info_t input_buf_planes;
2503
2504    /* number of input reprocess buffers */
2505    uint8_t num_of_bufs;
2506
2507    /* input source type */
2508    cam_stream_type_t input_type;
2509
2510} cam_pp_offline_src_config_t;
2511
2512/* reprocess stream input configuration */
2513typedef struct {
2514    /* input source config */
2515    cam_reprocess_type_enum_t pp_type;
2516    union {
2517        cam_pp_online_src_config_t online;
2518        cam_pp_offline_src_config_t offline;
2519    };
2520
2521    /* pp feature config */
2522    cam_pp_feature_config_t pp_feature_config;
2523} cam_stream_reproc_config_t;
2524
2525typedef struct {
2526    uint8_t crop_enabled;
2527    cam_rect_t input_crop;
2528} cam_crop_param_t;
2529
2530typedef struct {
2531    uint8_t trigger;
2532    int32_t trigger_id;
2533} cam_trigger_t;
2534
2535typedef struct {
2536    cam_denoise_param_t denoise2d;
2537    cam_crop_param_t crop;
2538    uint32_t flip;     /* 0 means no flip */
2539    uint32_t uv_upsample; /* 0 means no chroma upsampling */
2540    int32_t sharpness; /* 0 means no sharpness */
2541    int32_t effect;
2542    cam_rotation_t rotation;
2543    cam_rotation_t device_rotation;
2544} cam_per_frame_pp_config_t;
2545
2546typedef enum {
2547    CAM_OPT_STAB_OFF,
2548    CAM_OPT_STAB_ON,
2549    CAM_OPT_STAB_MAX
2550} cam_optical_stab_modes_t;
2551
2552typedef enum {
2553    CAM_FILTER_ARRANGEMENT_RGGB,
2554    CAM_FILTER_ARRANGEMENT_GRBG,
2555    CAM_FILTER_ARRANGEMENT_GBRG,
2556    CAM_FILTER_ARRANGEMENT_BGGR,
2557
2558    /* Sensor is not Bayer; output has 3 16-bit values for each pixel,
2559     * instead of just 1 16-bit value per pixel.*/
2560    CAM_FILTER_ARRANGEMENT_RGB,
2561    /* Sensor is YUV; SW do not have access to actual RAW,
2562     * output is interleaved UYVY */
2563    CAM_FILTER_ARRANGEMENT_UYVY,
2564    CAM_FILTER_ARRANGEMENT_YUYV,
2565    CAM_FILTER_ARRANGEMENT_Y
2566} cam_color_filter_arrangement_t;
2567
2568typedef enum {
2569  CAM_AF_LENS_STATE_STATIONARY,
2570  CAM_AF_LENS_STATE_MOVING,
2571} cam_af_lens_state_t;
2572
2573typedef enum {
2574    CAM_AWB_STATE_INACTIVE,
2575    CAM_AWB_STATE_SEARCHING,
2576    CAM_AWB_STATE_CONVERGED,
2577    CAM_AWB_STATE_LOCKED
2578} cam_awb_state_t;
2579
2580typedef enum {
2581    CAM_FOCUS_UNCALIBRATED,
2582    CAM_FOCUS_APPROXIMATE,
2583    CAM_FOCUS_CALIBRATED
2584} cam_focus_calibration_t;
2585
2586typedef enum {
2587    CAM_TEST_PATTERN_OFF,
2588    CAM_TEST_PATTERN_SOLID_COLOR,
2589    CAM_TEST_PATTERN_COLOR_BARS,
2590    CAM_TEST_PATTERN_COLOR_BARS_FADE_TO_GRAY,
2591    CAM_TEST_PATTERN_PN9,
2592    CAM_TEST_PATTERN_CUSTOM1 = 256
2593} cam_test_pattern_mode_t;
2594
2595typedef struct {
2596    cam_test_pattern_mode_t mode;
2597    int32_t r;
2598    int32_t gr;
2599    int32_t gb;
2600    int32_t b;
2601} cam_test_pattern_data_t;
2602
2603typedef enum {
2604    CAM_AWB_D50,
2605    CAM_AWB_D65,
2606    CAM_AWB_D75,
2607    CAM_AWB_A,
2608    CAM_AWB_CUSTOM_A,
2609    CAM_AWB_WARM_FLO,
2610    CAM_AWB_COLD_FLO,
2611    CAM_AWB_CUSTOM_FLO,
2612    CAM_AWB_NOON,
2613    CAM_AWB_CUSTOM_DAYLIGHT,
2614    CAM_AWB_INVALID_ALL_LIGHT,
2615} cam_illuminat_t;
2616
2617typedef enum {
2618    LEGACY_RAW,
2619    MIPI_RAW,
2620} cam_opaque_raw_format_t;
2621
2622typedef enum {
2623    CAM_PERF_NORMAL = 0,
2624    CAM_PERF_HIGH,
2625    CAM_PERF_HIGH_PERFORMANCE,
2626} cam_perf_mode_t;
2627
2628typedef struct {
2629    float real_gain;
2630    float lux_idx;
2631    float exp_time;
2632} cam_intf_aec_t;
2633
2634#define CAM_INTF_AEC_DATA_MAX   (10)
2635
2636typedef struct {
2637    uint32_t frame_count;
2638    cam_intf_aec_t aec_data[CAM_INTF_AEC_DATA_MAX];
2639} cam_intf_meta_imglib_input_aec_t;
2640
2641typedef struct {
2642    cam_intf_meta_imglib_input_aec_t meta_imglib_input_aec;
2643} cam_intf_meta_imglib_t;
2644
2645typedef struct {
2646    uint8_t previewOnly;
2647    uint64_t value;
2648} cam_intf_parm_manual_3a_t;
2649
2650typedef enum {
2651    CAM_MANUAL_CAPTURE_TYPE_OFF, /*Manual capture mode disabled*/
2652    CAM_MANUAL_CAPTURE_TYPE_1,   /*Normal ZSL capture with limited 3A settings*/
2653    CAM_MANUAL_CAPTURE_TYPE_2,   /*Low light capture mode */
2654    CAM_MANUAL_CAPTURE_TYPE_3,   /*Offline RAW processing */
2655    CAM_MANUAL_CAPTURE_TYPE_4    /*Offline RAW processing with multiple RAW*/
2656} cam_manual_capture_type;
2657
2658/***********************************
2659* ENUM definition for custom parameter type
2660************************************/
2661typedef enum {
2662    CAM_CUSTOM_PARM_EXAMPLE,
2663    CAM_CUSTOM_PARM_MAX,
2664} cam_custom_parm_type;
2665#endif /* __QCAMERA_TYPES_H__ */
2666