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