cam_types.h revision 2c0ec473291d45f54a48e48d2f7471630119f08d
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 24
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
53typedef enum {
54    CAM_HAL_V1 = 1,
55    CAM_HAL_V3 = 3
56} cam_hal_version_t;
57
58typedef enum {
59    CAM_STATUS_SUCCESS,       /* Operation Succeded */
60    CAM_STATUS_FAILED,        /* Failure in doing operation */
61    CAM_STATUS_INVALID_PARM,  /* Inavlid parameter provided */
62    CAM_STATUS_NOT_SUPPORTED, /* Parameter/operation not supported */
63    CAM_STATUS_ACCEPTED,      /* Parameter accepted */
64    CAM_STATUS_MAX,
65} cam_status_t;
66
67typedef enum {
68    CAM_POSITION_BACK,
69    CAM_POSITION_FRONT
70} cam_position_t;
71
72typedef enum {
73    CAM_FORMAT_JPEG = 0,
74    CAM_FORMAT_YUV_420_NV12 = 1,
75    CAM_FORMAT_YUV_420_NV21,
76    CAM_FORMAT_YUV_420_NV21_ADRENO,
77    CAM_FORMAT_YUV_420_YV12,
78    CAM_FORMAT_YUV_422_NV16,
79    CAM_FORMAT_YUV_422_NV61,
80    CAM_FORMAT_YUV_420_NV12_VENUS,
81
82    /* Please note below are the defintions for raw image.
83     * Any format other than raw image format should be declared
84     * before this line!!!!!!!!!!!!! */
85
86    /* Note: For all raw formats, each scanline needs to be 16 bytes aligned */
87
88    /* Packed YUV/YVU raw format, 16 bpp: 8 bits Y and 8 bits UV.
89     * U and V are interleaved with Y: YUYV or YVYV */
90    CAM_FORMAT_YUV_RAW_8BIT_YUYV,
91    CAM_FORMAT_YUV_RAW_8BIT_YVYU,
92    CAM_FORMAT_YUV_RAW_8BIT_UYVY,
93    CAM_FORMAT_YUV_RAW_8BIT_VYUY,
94
95    /* QCOM RAW formats where data is packed into 64bit word.
96     * 8BPP: 1 64-bit word contains 8 pixels p0 - p7, where p0 is
97     *       stored at LSB.
98     * 10BPP: 1 64-bit word contains 6 pixels p0 - p5, where most
99     *       significant 4 bits are set to 0. P0 is stored at LSB.
100     * 12BPP: 1 64-bit word contains 5 pixels p0 - p4, where most
101     *       significant 4 bits are set to 0. P0 is stored at LSB. */
102    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG,
103    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG,
104    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB,
105    CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR,
106    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG,
107    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG,
108    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB,
109    CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR,
110    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG,
111    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG,
112    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB,
113    CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR,
114    /* MIPI RAW formats based on MIPI CSI-2 specifiction.
115     * 8BPP: Each pixel occupies one bytes, starting at LSB.
116     *       Output with of image has no restrictons.
117     * 10BPP: Four pixels are held in every 5 bytes. The output
118     *       with of image must be a multiple of 4 pixels.
119     * 12BPP: Two pixels are held in every 3 bytes. The output
120     *       width of image must be a multiple of 2 pixels. */
121    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG,
122    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG,
123    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB,
124    CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR,
125    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG,
126    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG,
127    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB,
128    CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR,
129    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG,
130    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG,
131    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB,
132    CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR,
133    /* Ideal raw formats where image data has gone through black
134     * correction, lens rolloff, demux/channel gain, bad pixel
135     * correction, and ABF.
136     * Ideal raw formats could output any of QCOM_RAW and MIPI_RAW
137     * formats, plus plain8 8bbp, plain16 800, plain16 10bpp, and
138     * plain 16 12bpp */
139    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG,
140    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG,
141    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB,
142    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR,
143    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG,
144    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG,
145    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB,
146    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR,
147    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG,
148    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG,
149    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB,
150    CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR,
151    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG,
152    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG,
153    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB,
154    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR,
155    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG,
156    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG,
157    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB,
158    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR,
159    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG,
160    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG,
161    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB,
162    CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR,
163    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG,
164    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG,
165    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB,
166    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR,
167    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG,
168    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG,
169    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB,
170    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR,
171    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG,
172    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG,
173    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB,
174    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR,
175    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG,
176    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG,
177    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB,
178    CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR,
179
180    /* generic 8-bit raw */
181    CAM_FORMAT_JPEG_RAW_8BIT,
182    CAM_FORMAT_META_RAW_8BIT,
183
184    CAM_FORMAT_MAX
185} cam_format_t;
186
187typedef enum {
188    /* applies to HAL 1 */
189    CAM_STREAM_TYPE_DEFAULT,       /* default stream type */
190    CAM_STREAM_TYPE_PREVIEW,       /* preview */
191    CAM_STREAM_TYPE_POSTVIEW,      /* postview */
192    CAM_STREAM_TYPE_SNAPSHOT,      /* snapshot */
193    CAM_STREAM_TYPE_VIDEO,         /* video */
194
195    /* applies to HAL 3 */
196    CAM_STREAM_TYPE_IMPL_DEFINED, /* opaque format: could be display, video enc, ZSL YUV */
197    CAM_STREAM_TYPE_YUV,          /* app requested callback stream type */
198
199    /* applies to both HAL 1 and HAL 3 */
200    CAM_STREAM_TYPE_METADATA,      /* meta data */
201    CAM_STREAM_TYPE_RAW,           /* raw dump from camif */
202    CAM_STREAM_TYPE_OFFLINE_PROC,  /* offline process */
203    CAM_STREAM_TYPE_MAX,
204} cam_stream_type_t;
205
206typedef enum {
207    CAM_PAD_NONE = 1,
208    CAM_PAD_TO_2 = 2,
209    CAM_PAD_TO_4 = 4,
210    CAM_PAD_TO_WORD = CAM_PAD_TO_4,
211    CAM_PAD_TO_8 = 8,
212    CAM_PAD_TO_16 = 16,
213    CAM_PAD_TO_32 = 32,
214    CAM_PAD_TO_64 = 64,
215    CAM_PAD_TO_1K = 1024,
216    CAM_PAD_TO_2K = 2048,
217    CAM_PAD_TO_4K = 4096,
218    CAM_PAD_TO_8K = 8192
219} cam_pad_format_t;
220
221typedef enum {
222    /* followings are per camera */
223    CAM_MAPPING_BUF_TYPE_CAPABILITY,  /* mapping camera capability buffer */
224    CAM_MAPPING_BUF_TYPE_PARM_BUF,    /* mapping parameters buffer */
225
226    /* followings are per stream */
227    CAM_MAPPING_BUF_TYPE_STREAM_BUF,        /* mapping stream buffers */
228    CAM_MAPPING_BUF_TYPE_STREAM_INFO,       /* mapping stream information buffer */
229    CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF, /* mapping offline process input buffer */
230    CAM_MAPPING_BUF_TYPE_MAX
231} cam_mapping_buf_type;
232
233typedef struct {
234    cam_mapping_buf_type type;
235    uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
236    uint32_t frame_idx;   /* frame index: valid if type is STREAM_BUF */
237    int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
238                           * -1 means all planners shanre the same fd;
239                           * otherwise, each planner has its own fd */
240    unsigned long cookie; /* could be job_id(uint32_t) to identify mapping job */
241    int fd;               /* origin fd */
242    uint32_t size;        /* size of the buffer */
243} cam_buf_map_type;
244
245typedef struct {
246    cam_mapping_buf_type type;
247    uint32_t stream_id;   /* stream id: valid if STREAM_BUF */
248    uint32_t frame_idx;   /* frame index: valid if STREAM_BUF or HIST_BUF */
249    int32_t plane_idx;    /* planner index. valid if type is STREAM_BUF.
250                           * -1 means all planners shanre the same fd;
251                           * otherwise, each planner has its own fd */
252    unsigned long cookie; /* could be job_id(uint32_t) to identify unmapping job */
253} cam_buf_unmap_type;
254
255typedef enum {
256    CAM_MAPPING_TYPE_FD_MAPPING,
257    CAM_MAPPING_TYPE_FD_UNMAPPING,
258    CAM_MAPPING_TYPE_MAX
259} cam_mapping_type;
260
261typedef struct {
262    cam_mapping_type msg_type;
263    union {
264        cam_buf_map_type buf_map;
265        cam_buf_unmap_type buf_unmap;
266    } payload;
267} cam_sock_packet_t;
268
269typedef enum {
270    CAM_MODE_2D = (1<<0),
271    CAM_MODE_3D = (1<<1)
272} cam_mode_t;
273
274typedef struct {
275    uint32_t len;
276    uint32_t y_offset;
277    uint32_t cbcr_offset;
278} cam_sp_len_offset_t;
279
280typedef struct{
281    uint32_t len;
282    uint32_t offset;
283    int32_t offset_x;
284    int32_t offset_y;
285    int32_t stride;
286    int32_t scanline;
287} cam_mp_len_offset_t;
288
289typedef struct {
290    uint32_t width_padding;
291    uint32_t height_padding;
292    uint32_t plane_padding;
293} cam_padding_info_t;
294
295typedef struct {
296    int num_planes;
297    union {
298        cam_sp_len_offset_t sp;
299        cam_mp_len_offset_t mp[VIDEO_MAX_PLANES];
300    };
301    uint32_t frame_len;
302} cam_frame_len_offset_t;
303
304typedef struct {
305    int32_t width;
306    int32_t height;
307} cam_dimension_t;
308
309typedef struct {
310    cam_frame_len_offset_t plane_info;
311} cam_stream_buf_plane_info_t;
312
313typedef struct {
314    float min_fps;
315    float max_fps;
316} cam_fps_range_t;
317
318typedef struct {
319    int32_t min_sensitivity;
320    int32_t max_sensitivity;
321} cam_sensitivity_range_t;
322
323typedef enum {
324    CAM_HFR_MODE_OFF,
325    CAM_HFR_MODE_60FPS,
326    CAM_HFR_MODE_90FPS,
327    CAM_HFR_MODE_120FPS,
328    CAM_HFR_MODE_150FPS,
329    CAM_HFR_MODE_MAX
330} cam_hfr_mode_t;
331
332typedef struct {
333    cam_hfr_mode_t mode;
334    cam_dimension_t dim;
335    uint8_t frame_skip;
336    uint8_t livesnapshot_sizes_tbl_cnt;                     /* livesnapshot sizes table size */
337    cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT];  /* livesnapshot sizes table */
338} cam_hfr_info_t;
339
340typedef enum {
341    CAM_WB_MODE_AUTO,
342    CAM_WB_MODE_CUSTOM,
343    CAM_WB_MODE_INCANDESCENT,
344    CAM_WB_MODE_FLUORESCENT,
345    CAM_WB_MODE_WARM_FLUORESCENT,
346    CAM_WB_MODE_DAYLIGHT,
347    CAM_WB_MODE_CLOUDY_DAYLIGHT,
348    CAM_WB_MODE_TWILIGHT,
349    CAM_WB_MODE_SHADE,
350    CAM_WB_MODE_OFF,
351    CAM_WB_MODE_MAX
352} cam_wb_mode_type;
353
354typedef enum {
355    CAM_ANTIBANDING_MODE_OFF,
356    CAM_ANTIBANDING_MODE_60HZ,
357    CAM_ANTIBANDING_MODE_50HZ,
358    CAM_ANTIBANDING_MODE_AUTO,
359    CAM_ANTIBANDING_MODE_AUTO_50HZ,
360    CAM_ANTIBANDING_MODE_AUTO_60HZ,
361    CAM_ANTIBANDING_MODE_MAX,
362} cam_antibanding_mode_type;
363
364/* Enum Type for different ISO Mode supported */
365typedef enum {
366    CAM_ISO_MODE_AUTO,
367    CAM_ISO_MODE_DEBLUR,
368    CAM_ISO_MODE_100,
369    CAM_ISO_MODE_200,
370    CAM_ISO_MODE_400,
371    CAM_ISO_MODE_800,
372    CAM_ISO_MODE_1600,
373    CAM_ISO_MODE_MAX
374} cam_iso_mode_type;
375
376typedef enum {
377    CAM_AEC_MODE_FRAME_AVERAGE,
378    CAM_AEC_MODE_CENTER_WEIGHTED,
379    CAM_AEC_MODE_SPOT_METERING,
380    CAM_AEC_MODE_SMART_METERING,
381    CAM_AEC_MODE_USER_METERING,
382    CAM_AEC_MODE_SPOT_METERING_ADV,
383    CAM_AEC_MODE_CENTER_WEIGHTED_ADV,
384    CAM_AEC_MODE_MAX
385} cam_auto_exposure_mode_type;
386
387typedef enum {
388    CAM_AE_MODE_OFF,
389    CAM_AE_MODE_ON,
390    CAM_AE_MODE_MAX
391} cam_ae_mode_type;
392
393typedef enum {
394    CAM_FOCUS_ALGO_AUTO,
395    CAM_FOCUS_ALGO_SPOT,
396    CAM_FOCUS_ALGO_CENTER_WEIGHTED,
397    CAM_FOCUS_ALGO_AVERAGE,
398    CAM_FOCUS_ALGO_MAX
399} cam_focus_algorithm_type;
400
401/* Auto focus mode */
402typedef enum {
403    CAM_FOCUS_MODE_AUTO,
404    CAM_FOCUS_MODE_INFINITY,
405    CAM_FOCUS_MODE_MACRO,
406    CAM_FOCUS_MODE_FIXED,
407    CAM_FOCUS_MODE_EDOF,
408    CAM_FOCUS_MODE_CONTINOUS_VIDEO,
409    CAM_FOCUS_MODE_CONTINOUS_PICTURE,
410    CAM_FOCUS_MODE_MAX
411} cam_focus_mode_type;
412
413typedef enum {
414    CAM_SCENE_MODE_OFF,
415    CAM_SCENE_MODE_AUTO,
416    CAM_SCENE_MODE_LANDSCAPE,
417    CAM_SCENE_MODE_SNOW,
418    CAM_SCENE_MODE_BEACH,
419    CAM_SCENE_MODE_SUNSET,
420    CAM_SCENE_MODE_NIGHT,
421    CAM_SCENE_MODE_PORTRAIT,
422    CAM_SCENE_MODE_BACKLIGHT,
423    CAM_SCENE_MODE_SPORTS,
424    CAM_SCENE_MODE_ANTISHAKE,
425    CAM_SCENE_MODE_FLOWERS,
426    CAM_SCENE_MODE_CANDLELIGHT,
427    CAM_SCENE_MODE_FIREWORKS,
428    CAM_SCENE_MODE_PARTY,
429    CAM_SCENE_MODE_NIGHT_PORTRAIT,
430    CAM_SCENE_MODE_THEATRE,
431    CAM_SCENE_MODE_ACTION,
432    CAM_SCENE_MODE_AR,
433    CAM_SCENE_MODE_FACE_PRIORITY,
434    CAM_SCENE_MODE_BARCODE,
435    CAM_SCENE_MODE_MAX
436} cam_scene_mode_type;
437
438typedef enum {
439    CAM_EFFECT_MODE_OFF,
440    CAM_EFFECT_MODE_MONO,
441    CAM_EFFECT_MODE_NEGATIVE,
442    CAM_EFFECT_MODE_SOLARIZE,
443    CAM_EFFECT_MODE_SEPIA,
444    CAM_EFFECT_MODE_POSTERIZE,
445    CAM_EFFECT_MODE_WHITEBOARD,
446    CAM_EFFECT_MODE_BLACKBOARD,
447    CAM_EFFECT_MODE_AQUA,
448    CAM_EFFECT_MODE_EMBOSS,
449    CAM_EFFECT_MODE_SKETCH,
450    CAM_EFFECT_MODE_NEON,
451    CAM_EFFECT_MODE_MAX
452} cam_effect_mode_type;
453
454typedef enum {
455    CAM_FLASH_MODE_OFF,
456    CAM_FLASH_MODE_AUTO,
457    CAM_FLASH_MODE_ON,
458    CAM_FLASH_MODE_TORCH,
459    CAM_FLASH_MODE_SINGLE,
460    CAM_FLASH_MODE_MAX
461} cam_flash_mode_t;
462
463typedef enum {
464    CAM_AEC_TRIGGER_IDLE,
465    CAM_AEC_TRIGGER_START
466} cam_aec_trigger_type_t;
467
468typedef enum {
469    CAM_AF_TRIGGER_IDLE,
470    CAM_AF_TRIGGER_START,
471    CAM_AF_TRIGGER_CANCEL
472} cam_af_trigger_type_t;
473
474typedef enum {
475    CAM_AE_STATE_INACTIVE,
476    CAM_AE_STATE_SEARCHING,
477    CAM_AE_STATE_CONVERGED,
478    CAM_AE_STATE_LOCKED,
479    CAM_AE_STATE_FLASH_REQUIRED,
480    CAM_AE_STATE_PRECAPTURE
481} cam_ae_state_t;
482
483typedef struct  {
484    int32_t left;
485    int32_t top;
486    int32_t width;
487    int32_t height;
488} cam_rect_t;
489
490typedef struct  {
491    cam_rect_t rect;
492    int32_t weight; /* weight of the area, valid for focusing/metering areas */
493} cam_area_t;
494
495typedef enum {
496    CAM_STREAMING_MODE_CONTINUOUS, /* continous streaming */
497    CAM_STREAMING_MODE_BURST,      /* burst streaming */
498    CAM_STREAMING_MODE_MAX
499} cam_streaming_mode_t;
500
501#define CAM_REPROCESS_MASK_TYPE_WNR (1<<0)
502
503/* event from server */
504typedef enum {
505    CAM_EVENT_TYPE_MAP_UNMAP_DONE  = (1<<0),
506    CAM_EVENT_TYPE_AUTO_FOCUS_DONE = (1<<1),
507    CAM_EVENT_TYPE_ZOOM_DONE       = (1<<2),
508    CAM_EVENT_TYPE_DAEMON_DIED     = (1<<3),
509    CAM_EVENT_TYPE_MAX
510} cam_event_type_t;
511
512typedef enum {
513    CAM_EXP_BRACKETING_OFF,
514    CAM_EXP_BRACKETING_ON
515} cam_bracket_mode;
516
517typedef struct {
518    cam_bracket_mode mode;
519    char values[MAX_EXP_BRACKETING_LENGTH];  /* user defined values */
520} cam_exp_bracketing_t;
521
522typedef enum {
523    CAM_AEC_ROI_OFF,
524    CAM_AEC_ROI_ON
525} cam_aec_roi_ctrl_t;
526
527typedef enum {
528    CAM_AEC_ROI_BY_INDEX,
529    CAM_AEC_ROI_BY_COORDINATE,
530} cam_aec_roi_type_t;
531
532typedef struct {
533    uint32_t x;
534    uint32_t y;
535} cam_coordinate_type_t;
536
537typedef struct {
538    int32_t numerator;
539    int32_t denominator;
540} cam_rational_type_t;
541
542typedef struct {
543    cam_aec_roi_ctrl_t aec_roi_enable;
544    cam_aec_roi_type_t aec_roi_type;
545    union {
546        cam_coordinate_type_t coordinate[MAX_ROI];
547        uint32_t aec_roi_idx[MAX_ROI];
548    } cam_aec_roi_position;
549} cam_set_aec_roi_t;
550
551typedef struct {
552    uint32_t frm_id;
553    uint8_t num_roi;
554    cam_rect_t roi[MAX_ROI];
555    int32_t weight[MAX_ROI];
556    uint8_t is_multiwindow;
557} cam_roi_info_t;
558
559typedef enum {
560    CAM_WAVELET_DENOISE_YCBCR_PLANE,
561    CAM_WAVELET_DENOISE_CBCR_ONLY,
562    CAM_WAVELET_DENOISE_STREAMLINE_YCBCR,
563    CAM_WAVELET_DENOISE_STREAMLINED_CBCR
564} cam_denoise_process_type_t;
565
566typedef struct {
567    int denoise_enable;
568    cam_denoise_process_type_t process_plates;
569} cam_denoise_param_t;
570
571#define CAM_FACE_PROCESS_MASK_DETECTION    (1<<0)
572#define CAM_FACE_PROCESS_MASK_RECOGNITION  (1<<1)
573typedef struct {
574    int fd_mode;               /* mask of face process */
575    int num_fd;
576} cam_fd_set_parm_t;
577
578typedef struct {
579    int8_t face_id;            /* unique id for face tracking within view unless view changes */
580    int8_t score;              /* score of confidence (0, -100) */
581    cam_rect_t face_boundary;  /* boundary of face detected */
582    cam_coordinate_type_t left_eye_center;  /* coordinate of center of left eye */
583    cam_coordinate_type_t right_eye_center; /* coordinate of center of right eye */
584    cam_coordinate_type_t mouth_center;     /* coordinate of center of mouth */
585    uint8_t smile_degree;      /* smile degree (0, -100) */
586    uint8_t smile_confidence;  /* smile confidence (0, 100) */
587    uint8_t face_recognised;   /* if face is recognised */
588    int8_t gaze_angle;         /* -90 -45 0 45 90 for head left to rigth tilt */
589    int8_t updown_dir;         /* up down direction (-90, 90) */
590    int8_t leftright_dir;      /* left right direction (-90, 90) */
591    int8_t roll_dir;           /* roll direction (-90, 90) */
592    int8_t left_right_gaze;    /* left right gaze degree (-50, 50) */
593    int8_t top_bottom_gaze;    /* up down gaze degree (-50, 50) */
594    uint8_t blink_detected;    /* if blink is detected */
595    uint8_t left_blink;        /* left eye blink degeree (0, -100) */
596    uint8_t right_blink;       /* right eye blink degree (0, - 100) */
597} cam_face_detection_info_t;
598
599typedef struct {
600    uint32_t frame_id;                         /* frame index of which faces are detected */
601    uint8_t num_faces_detected;                /* number of faces detected */
602    cam_face_detection_info_t faces[MAX_ROI];  /* detailed information of faces detected */
603} cam_face_detection_data_t;
604
605#define CAM_HISTOGRAM_STATS_SIZE 256
606typedef struct {
607    uint32_t max_hist_value;
608    uint32_t hist_buf[CAM_HISTOGRAM_STATS_SIZE]; /* buf holding histogram stats data */
609} cam_histogram_data_t;
610
611typedef struct {
612    cam_histogram_data_t r_stats;
613    cam_histogram_data_t b_stats;
614    cam_histogram_data_t gr_stats;
615    cam_histogram_data_t gb_stats;
616} cam_bayer_hist_stats_t;
617
618typedef enum {
619    CAM_HISTOGRAM_TYPE_BAYER,
620    CAM_HISTOGRAM_TYPE_YUV
621} cam_histogram_type_t;
622
623typedef struct {
624    cam_histogram_type_t type;
625    union {
626        cam_bayer_hist_stats_t bayer_stats;
627        cam_histogram_data_t yuv_stats;
628    };
629} cam_hist_stats_t;
630
631enum cam_focus_distance_index{
632  CAM_FOCUS_DISTANCE_NEAR_INDEX,  /* 0 */
633  CAM_FOCUS_DISTANCE_OPTIMAL_INDEX,
634  CAM_FOCUS_DISTANCE_FAR_INDEX,
635  CAM_FOCUS_DISTANCE_MAX_INDEX
636};
637
638typedef struct {
639  float focus_distance[CAM_FOCUS_DISTANCE_MAX_INDEX];
640} cam_focus_distances_info_t;
641
642/* Different autofocus cycle when calling do_autoFocus
643 * CAM_AF_COMPLETE_EXISTING_SWEEP: Complete existing sweep
644 * if one is ongoing, and lock.
645 * CAM_AF_DO_ONE_FULL_SWEEP: Do one full sweep, regardless
646 * of the current state, and lock.
647 * CAM_AF_START_CONTINUOUS_SWEEP: Start continous sweep.
648 * After do_autoFocus, HAL receives an event: CAM_AF_FOCUSED,
649 * or CAM_AF_NOT_FOCUSED.
650 * cancel_autoFocus stops any lens movement.
651 * Each do_autoFocus call only produces 1 FOCUSED/NOT_FOCUSED
652 * event, not both.
653 */
654typedef enum {
655    CAM_AF_COMPLETE_EXISTING_SWEEP,
656    CAM_AF_DO_ONE_FULL_SWEEP,
657    CAM_AF_START_CONTINUOUS_SWEEP
658} cam_autofocus_cycle_t;
659
660typedef enum {
661    CAM_AF_SCANNING,
662    CAM_AF_FOCUSED,
663    CAM_AF_NOT_FOCUSED
664} cam_autofocus_state_t;
665
666typedef struct {
667    cam_autofocus_state_t focus_state;           /* state of focus */
668    cam_focus_distances_info_t focus_dist;       /* focus distance */
669} cam_auto_focus_data_t;
670
671typedef struct {
672    uint32_t stream_id;
673    cam_rect_t crop;
674} cam_stream_crop_info_t;
675
676typedef struct {
677    uint8_t num_of_streams;
678    cam_stream_crop_info_t crop_info[MAX_NUM_STREAMS];
679} cam_crop_data_t;
680
681typedef enum {
682    DO_NOT_NEED_FUTURE_FRAME,
683    NEED_FUTURE_FRAME,
684} cam_prep_snapshot_state_t;
685
686typedef struct {
687    uint32_t min_frame_idx;
688    uint32_t max_frame_idx;
689} cam_frame_idx_range_t;
690
691typedef  struct {
692    uint8_t is_stats_valid;               /* if histgram data is valid */
693    cam_hist_stats_t stats_data;          /* histogram data */
694
695    uint8_t is_faces_valid;               /* if face detection data is valid */
696    cam_face_detection_data_t faces_data; /* face detection result */
697
698    uint8_t is_focus_valid;               /* if focus data is valid */
699    cam_auto_focus_data_t focus_data;     /* focus data */
700
701    uint8_t is_crop_valid;                /* if crop data is valid */
702    cam_crop_data_t crop_data;            /* crop data */
703
704    uint8_t is_prep_snapshot_done_valid;  /* if prep snapshot done is valid */
705    cam_prep_snapshot_state_t prep_snapshot_done_state;  /* prepare snapshot done state */
706
707    /* if good frame idx range is valid */
708    uint8_t is_good_frame_idx_range_valid;
709    /* good frame idx range, make sure:
710     * 1. good_frame_idx_range.min_frame_idx > current_frame_idx
711     * 2. good_frame_idx_range.min_frame_idx - current_frame_idx < 100 */
712    cam_frame_idx_range_t good_frame_idx_range;
713
714    char private_metadata[MAX_METADATA_PAYLOAD_SIZE];
715
716} cam_metadata_info_t;
717
718typedef enum {
719    CAM_INTF_PARM_HAL_VERSION,
720    /* common between HAL1 and HAL3 */
721    CAM_INTF_PARM_ANTIBANDING,
722    CAM_INTF_PARM_EXPOSURE_COMPENSATION,
723    CAM_INTF_PARM_AEC_LOCK,
724    CAM_INTF_PARM_FPS_RANGE,
725    CAM_INTF_PARM_AWB_LOCK,
726    CAM_INTF_PARM_WHITE_BALANCE,
727    CAM_INTF_PARM_EFFECT,
728    CAM_INTF_PARM_BESTSHOT_MODE,
729    CAM_INTF_PARM_DIS_ENABLE,
730    CAM_INTF_PARM_LED_MODE,
731    CAM_INTF_META_HISTOGRAM, /* 10 */
732    CAM_INTF_META_FACE_DETECTION,
733    CAM_INTF_META_AUTOFOCUS_DATA,
734
735    /* specific to HAl1 */
736    CAM_INTF_PARM_QUERY_FLASH4SNAP,
737    CAM_INTF_PARM_EXPOSURE,
738    CAM_INTF_PARM_SHARPNESS,
739    CAM_INTF_PARM_CONTRAST,
740    CAM_INTF_PARM_SATURATION,
741    CAM_INTF_PARM_BRIGHTNESS,
742    CAM_INTF_PARM_ISO,
743    CAM_INTF_PARM_ZOOM, /* 20 */
744    CAM_INTF_PARM_ROLLOFF,
745    CAM_INTF_PARM_MODE,             /* camera mode */
746    CAM_INTF_PARM_AEC_ALGO_TYPE,    /* auto exposure algorithm */
747    CAM_INTF_PARM_FOCUS_ALGO_TYPE,  /* focus algorithm */
748    CAM_INTF_PARM_AEC_ROI,
749    CAM_INTF_PARM_AF_ROI,
750    CAM_INTF_PARM_FOCUS_MODE,
751    CAM_INTF_PARM_SCE_FACTOR,
752    CAM_INTF_PARM_FD,
753    CAM_INTF_PARM_MCE, /* 30 */
754    CAM_INTF_PARM_HFR,
755    CAM_INTF_PARM_REDEYE_REDUCTION,
756    CAM_INTF_PARM_WAVELET_DENOISE,
757    CAM_INTF_PARM_HISTOGRAM,
758    CAM_INTF_PARM_ASD_ENABLE,
759    CAM_INTF_PARM_RECORDING_HINT,
760    CAM_INTF_PARM_HDR,
761    CAM_INTF_PARM_FRAMESKIP,
762    CAM_INTF_PARM_ZSL_MODE,  /* indicating if it's running in ZSL mode */
763    CAM_INTF_PARM_HDR_NEED_1X, /* if HDR needs 1x output */ /* 40 */
764    CAM_INTF_PARM_LOCK_CAF,
765    CAM_INTF_PARM_VIDEO_HDR,
766    CAM_INTF_PARM_ROTATION,
767    CAM_INTF_META_CROP_DATA,
768    CAM_INTF_META_PREP_SNAPSHOT_DONE,
769    CAM_INTF_META_GOOD_FRAME_IDX_RANGE,
770
771    /* stream based parameters */
772    CAM_INTF_PARM_DO_REPROCESS,
773    CAM_INTF_PARM_SET_BUNDLE,
774
775    /* specific to HAL3 */
776    /* Whether the metadata maps to a valid frame number */
777    CAM_INTF_META_FRAME_NUMBER_VALID,
778    /* Number of pending requests yet to be processed */
779    CAM_INTF_META_PENDING_REQUESTS,
780    /* COLOR CORRECTION.*/
781    CAM_INTF_META_COLOR_CORRECT_MODE,
782    /* A transform matrix to chromatically adapt pixels in the CIE XYZ (1931)
783     * color space from the scene illuminant to the sRGB-standard D65-illuminant. */
784    CAM_INTF_META_COLOR_CORRECT_TRANSFORM, /* 50 */
785    /* CONTROL */
786//    CAM_INTF_META_REQUEST_ID,
787    /* A frame counter set by the framework. Must be maintained unchanged in
788     * output frame. */
789    CAM_INTF_META_FRAME_NUMBER,
790    /* Whether AE is currently updating the sensor exposure and sensitivity
791     * fields */
792    CAM_INTF_META_AEC_MODE,
793    /* List of areas to use for metering */
794    CAM_INTF_META_AEC_ROI,
795    /* Whether the HAL must trigger precapture metering.*/
796    CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,
797    /* The ID sent with the latest CAMERA2_TRIGGER_PRECAPTURE_METERING call */
798    CAM_INTF_META_AEC_PRECAPTURE_ID,
799    /* Current state of AE algorithm */
800    CAM_INTF_META_AEC_STATE,
801    /* List of areas to use for focus estimation */
802    CAM_INTF_META_AF_ROI,
803    /* Whether the HAL must trigger autofocus. */
804    CAM_INTF_META_AF_TRIGGER,
805    /* Current state of AF algorithm */
806    CAM_INTF_META_AF_STATE,
807    /* The ID sent with the latest CAMERA2_TRIGGER_AUTOFOCUS call */
808    CAM_INTF_META_AF_TRIGGER_ID,
809    /* List of areas to use for illuminant estimation */
810    CAM_INTF_META_AWB_REGIONS,
811    /* Current state of AWB algorithm */
812    CAM_INTF_META_AWB_STATE,
813    /* Information to 3A routines about the purpose of this capture, to help
814     * decide optimal 3A strategy */
815    CAM_INTF_META_CAPTURE_INTENT,
816    /* Overall mode of 3A control routines. We need to have this parameter
817     * because not all android.control.* have an OFF option, for example,
818     * AE_FPS_Range, aePrecaptureTrigger */
819    CAM_INTF_META_MODE,
820    /* DEMOSAIC */
821    /* Controls the quality of the demosaicing processing */
822    CAM_INTF_META_DEMOSAIC,
823    /* EDGE */
824    /* Operation mode for edge enhancement */
825    CAM_INTF_META_EDGE,
826    /* Control the amount of edge enhancement applied to the images.*/
827    /* 1-10; 10 is maximum sharpening */
828    CAM_INTF_META_SHARPNESS_STRENGTH,
829    /* FLASH */
830    /* Power for flash firing/torch, 10 is max power; 0 is no flash. Linear */
831    CAM_INTF_META_FLASH_POWER,
832    /* Firing time of flash relative to start of exposure, in nanoseconds*/
833    CAM_INTF_META_FLASH_FIRING_TIME,
834    /* Current state of the flash unit */
835    CAM_INTF_META_FLASH_STATE,
836    /* GEOMETRIC */
837    /* Operating mode of geometric correction */
838    CAM_INTF_META_GEOMETRIC_MODE,
839    /* Control the amount of shading correction applied to the images */
840    CAM_INTF_META_GEOMETRIC_STRENGTH,
841    /* HOT PIXEL */
842    /* Set operational mode for hot pixel correction */
843    CAM_INTF_META_HOTPIXEL_MODE,
844    /* LENS */
845    /* Size of the lens aperture */
846    CAM_INTF_META_LENS_APERTURE,
847    /* State of lens neutral density filter(s) */
848    CAM_INTF_META_LENS_FILTERDENSITY,
849    /* Lens optical zoom setting */
850    CAM_INTF_META_LENS_FOCAL_LENGTH,
851    /* Distance to plane of sharpest focus, measured from frontmost surface
852     * of the lens */
853    CAM_INTF_META_LENS_FOCUS_DISTANCE,
854    /* The range of scene distances that are in sharp focus (depth of field) */
855    CAM_INTF_META_LENS_FOCUS_RANGE,
856    /* Whether optical image stabilization is enabled. */
857    CAM_INTF_META_LENS_OPT_STAB_MODE,
858    /* Current lens status */
859    CAM_INTF_META_LENS_STATE,
860    /* NOISE REDUCTION */
861    /* Mode of operation for the noise reduction algorithm */
862    CAM_INTF_META_NOISE_REDUCTION_MODE,
863   /* Control the amount of noise reduction applied to the images.
864    * 1-10; 10 is max noise reduction */
865    CAM_INTF_META_NOISE_REDUCTION_STRENGTH,
866    /* SCALER */
867    /* Top-left corner and width of the output region to select from the active
868     * pixel array */
869    CAM_INTF_META_SCALER_CROP_REGION,
870    /* SENSOR */
871    /* Duration each pixel is exposed to light, in nanoseconds */
872    CAM_INTF_META_SENSOR_EXPOSURE_TIME,
873    /* Duration from start of frame exposure to start of next frame exposure,
874     * in nanoseconds */
875    CAM_INTF_META_SENSOR_FRAME_DURATION,
876    /* Gain applied to image data. Must be implemented through analog gain only
877     * if set to values below 'maximum analog sensitivity'. */
878    CAM_INTF_META_SENSOR_SENSITIVITY,
879    /* Time at start of exposure of first row */
880    CAM_INTF_META_SENSOR_TIMESTAMP,
881    /* SHADING */
882    /* Quality of lens shading correction applied to the image data */
883    CAM_INTF_META_SHADING_MODE,
884    /* Control the amount of shading correction applied to the images.
885     * unitless: 1-10; 10 is full shading compensation */
886    CAM_INTF_META_SHADING_STRENGTH,
887    /* STATISTICS */
888    /* State of the face detector unit */
889    CAM_INTF_META_STATS_FACEDETECT_MODE,
890    /* Operating mode for histogram generation */
891    CAM_INTF_META_STATS_HISTOGRAM_MODE,
892    /* Operating mode for sharpness map generation */
893    CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,
894    /* A 3-channel sharpness map, based on the raw sensor data,
895     * If only a monochrome sharpness map is supported, all channels
896     * should have the same data
897     */
898    CAM_INTF_META_STATS_SHARPNESS_MAP,
899
900    /* TONEMAP */
901    /* Table mapping blue input values to output values */
902    CAM_INTF_META_TONEMAP_CURVE_BLUE,
903    /* Table mapping green input values to output values */
904    CAM_INTF_META_TONEMAP_CURVE_GREEN,
905    /* Table mapping red input values to output values */
906    CAM_INTF_META_TONEMAP_CURVE_RED,
907    /* Tone map mode */
908    CAM_INTF_META_TONEMAP_MODE,
909    CAM_INTF_META_FLASH_MODE,
910    CAM_INTF_META_PRIVATE_DATA,
911    CAM_INTF_PARM_MAX
912} cam_intf_parm_type_t;
913
914/*****************************************************************************
915 *                 Code for HAL3 data types                                  *
916 ****************************************************************************/
917typedef enum {
918    CAM_INTF_METADATA_MAX
919} cam_intf_metadata_type_t;
920
921typedef enum {
922    CAM_INTENT_CUSTOM,
923    CAM_INTENT_PREVIEW,
924    CAM_INTENT_STILL_CAPTURE,
925    CAM_INTENT_VIDEO_RECORD,
926    CAM_INTENT_VIDEO_SNAPSHOT,
927    CAM_INTENT_ZERO_SHUTTER_LAG,
928    CAM_INTENT_MAX,
929} cam_intent_t;
930
931typedef enum {
932    /* Full application control of pipeline. All 3A routines are disabled,
933     * no other settings in android.control.* have any effect */
934    CAM_CONTROL_OFF,
935    /* Use settings for each individual 3A routine. Manual control of capture
936     * parameters is disabled. All controls in android.control.* besides sceneMode
937     * take effect */
938    CAM_CONTROL_AUTO,
939    /* Use specific scene mode. Enabling this disables control.aeMode,
940     * control.awbMode and control.afMode controls; the HAL must ignore those
941     * settings while USE_SCENE_MODE is active (except for FACE_PRIORITY scene mode).
942     * Other control entries are still active. This setting can only be used if
943     * availableSceneModes != UNSUPPORTED. TODO: Should we remove this and handle this
944     * in HAL ?*/
945    CAM_CONTROL_USE_SCENE_MODE,
946    CAM_CONTROL_MAX
947} cam_control_mode_t;
948
949typedef enum {
950    /* Use the android.colorCorrection.transform matrix to do color conversion */
951    CAM_COLOR_CORRECTION_TRANSFORM_MATRIX,
952    /* Must not slow down frame rate relative to raw bayer output */
953    CAM_COLOR_CORRECTION_FAST,
954    /* Frame rate may be reduced by high quality */
955    CAM_COLOR_CORRECTION_HIGH_QUALITY,
956} cam_color_correct_mode_t;
957
958typedef struct {
959    /* 3x3 float matrix in row-major order. each element is in range of (0, 1) */
960    float transform[3][3];
961} cam_color_correct_matrix_t;
962
963#define CAM_FOCAL_LENGTHS_MAX     1
964#define CAM_APERTURES_MAX         1
965#define CAM_FILTER_DENSITIES_MAX  1
966#define CAM_MAX_MAP_HEIGHT        6
967#define CAM_MAX_MAP_WIDTH         6
968
969#define CAM_MAX_TONEMAP_CURVE_SIZE    128
970
971typedef struct {
972    int tonemap_points_cnt;
973
974    /* A 1D array of pairs of floats.
975     * Mapping a 0-1 input range to a 0-1 output range.
976     * The input range must be monotonically increasing with N,
977     * and values between entries should be linearly interpolated.
978     * For example, if the array is: [0.0, 0.0, 0.3, 0.5, 1.0, 1.0],
979     * then the input->output mapping for a few sample points would be:
980     * 0 -> 0, 0.15 -> 0.25, 0.3 -> 0.5, 0.5 -> 0.64 */
981    float tonemap_points[CAM_MAX_TONEMAP_CURVE_SIZE][2];
982} cam_tonemap_curve_t;
983
984typedef enum {
985    OFF,
986    FAST,
987    QUALITY,
988} cam_quality_preference_t;
989
990typedef enum {
991    CAM_FLASH_CTRL_OFF,
992    CAM_FLASH_CTRL_SINGLE,
993    CAM_FLASH_CTRL_TORCH
994} cam_flash_ctrl_t;
995
996typedef struct {
997    uint8_t ae_mode;
998    uint8_t awb_mode;
999    uint8_t af_mode;
1000} cam_scene_mode_overrides_t;
1001
1002typedef struct {
1003    int32_t left;
1004    int32_t top;
1005    int32_t width;
1006    int32_t height;
1007} cam_crop_region_t;
1008
1009typedef struct {
1010    /* Estimated sharpness for each region of the input image.
1011     * Normalized to be between 0 and maxSharpnessMapValue.
1012     * Higher values mean sharper (better focused) */
1013    int32_t sharpness[CAM_MAX_MAP_WIDTH][CAM_MAX_MAP_HEIGHT];
1014} cam_sharpness_map_t;
1015
1016typedef struct {
1017    int32_t min_value;
1018    int32_t max_value;
1019    int32_t def_value;
1020    int32_t step;
1021} cam_control_range_t;
1022
1023#define CAM_QCOM_FEATURE_FACE_DETECTION (1<<0)
1024#define CAM_QCOM_FEATURE_DENOISE2D      (1<<1)
1025#define CAM_QCOM_FEATURE_CROP           (1<<2)
1026#define CAM_QCOM_FEATURE_ROTATION       (1<<3)
1027#define CAM_QCOM_FEATURE_FLIP           (1<<4)
1028#define CAM_QCOM_FEATURE_HDR            (1<<5)
1029#define CAM_QCOM_FEATURE_REGISTER_FACE  (1<<6)
1030#define CAM_QCOM_FEATURE_SHARPNESS      (1<<7)
1031#define CAM_QCOM_FEATURE_VIDEO_HDR      (1<<8)
1032#define CAM_QCOM_FEATURE_CAC            (1<<9)
1033
1034// Counter clock wise
1035typedef enum {
1036    ROTATE_0 = 1<<0,
1037    ROTATE_90 = 1<<1,
1038    ROTATE_180 = 1<<2,
1039    ROTATE_270 = 1<<3,
1040} cam_rotation_t;
1041
1042typedef enum {
1043    FLIP_H = 1<<0,
1044    FLIP_V = 1<<1,
1045} cam_flip_t;
1046
1047typedef struct {
1048    uint32_t bundle_id;                            /* bundle id */
1049    uint8_t num_of_streams;                        /* number of streams in the bundle */
1050    uint32_t stream_ids[MAX_STREAM_NUM_IN_BUNDLE]; /* array of stream ids to be bundled */
1051} cam_bundle_config_t;
1052
1053typedef enum {
1054    CAM_ONLINE_REPROCESS_TYPE,    /* online reprocess, frames from running streams */
1055    CAM_OFFLINE_REPROCESS_TYPE,   /* offline reprocess, frames from external source */
1056} cam_reprocess_type_enum_t;
1057
1058typedef struct {
1059    /* reprocess feature mask */
1060    uint32_t feature_mask;
1061
1062    /* individual setting for features to be reprocessed */
1063    cam_denoise_param_t denoise2d;
1064    cam_rect_t input_crop;
1065    cam_rotation_t rotation;
1066    uint32_t flip;
1067    int32_t sharpness;
1068    int32_t hdr_need_1x; /* when CAM_QCOM_FEATURE_HDR enabled, indicate if 1x is needed for output */
1069} cam_pp_feature_config_t;
1070
1071typedef struct {
1072    uint32_t input_stream_id;
1073    /* input source stream type */
1074    cam_stream_type_t input_stream_type;
1075} cam_pp_online_src_config_t;
1076
1077typedef struct {
1078    /* image format */
1079    cam_format_t input_fmt;
1080
1081    /* image dimension */
1082    cam_dimension_t input_dim;
1083
1084    /* buffer plane information, will be calc based on stream_type, fmt,
1085       dim, and padding_info(from stream config). Info including:
1086       offset_x, offset_y, stride, scanline, plane offset */
1087    cam_stream_buf_plane_info_t input_buf_planes;
1088
1089    /* number of input reprocess buffers */
1090    uint8_t num_of_bufs;
1091} cam_pp_offline_src_config_t;
1092
1093/* reprocess stream input configuration */
1094typedef struct {
1095    /* input source config */
1096    cam_reprocess_type_enum_t pp_type;
1097    union {
1098        cam_pp_online_src_config_t online;
1099        cam_pp_offline_src_config_t offline;
1100    };
1101
1102    /* pp feature config */
1103    cam_pp_feature_config_t pp_feature_config;
1104} cam_stream_reproc_config_t;
1105
1106typedef struct {
1107    uint8_t crop_enabled;
1108    cam_rect_t input_crop;
1109} cam_crop_param_t;
1110
1111typedef struct {
1112    uint8_t trigger;
1113    int32_t trigger_id;
1114} cam_trigger_t;
1115
1116typedef struct {
1117    cam_denoise_param_t denoise;
1118    cam_crop_param_t crop;
1119    uint32_t flip;     /* 0 means no flip */
1120    int32_t sharpness; /* 0 means no sharpness */
1121} cam_per_frame_pp_config_t;
1122
1123typedef enum {
1124    CAM_OPT_STAB_OFF,
1125    CAM_OPT_STAB_ON,
1126    CAM_OPT_STAB_MAX
1127} cam_optical_stab_modes_t;
1128
1129typedef enum {
1130    CAM_FILTER_ARRANGEMENT_RGGB,
1131    CAM_FILTER_ARRANGEMENT_GRBG,
1132    CAM_FILTER_ARRANGEMENT_GBRG,
1133    CAM_FILTER_ARRANGEMENT_BGGR,
1134
1135    /* Sensor is not Bayer; output has 3 16-bit values for each pixel,
1136     * instead of just 1 16-bit value per pixel.*/
1137    CAM_FILTER_ARRANGEMENT_RGB
1138} cam_color_filter_arrangement_t;
1139
1140typedef enum {
1141    CAM_AF_STATE_INACTIVE,
1142    CAM_AF_STATE_PASSIVE_SCAN,
1143    CAM_AF_STATE_PASSIVE_FOCUSED,
1144    CAM_AF_STATE_ACTIVE_SCAN,
1145    CAM_AF_STATE_FOCUSED_LOCKED,
1146    CAM_AF_STATE_NOT_FOCUSED_LOCKED
1147} cam_af_state_t;
1148
1149typedef enum {
1150    CAM_AWB_STATE_INACTIVE,
1151    CAM_AWB_STATE_SEARCHING,
1152    CAM_AWB_STATE_CONVERGED,
1153    CAM_AWB_STATE_LOCKED
1154} cam_awb_state_t;
1155
1156#endif /* __QCAMERA_TYPES_H__ */
1157