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