QCamera_Intf.h revision bf1bd919afd1e5e15eaeda79f8b5f83abc1ecb7a
1/* Copyright (c) 2012, Code Aurora Forum. 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 Code Aurora Forum, Inc. 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_INTF_H__
31#define __QCAMERA_INTF_H__
32
33#include <stdint.h>
34#include <pthread.h>
35#include <inttypes.h>
36
37#define PAD_TO_WORD(a)               (((a)+3)&~3)
38#define PAD_TO_2K(a)                 (((a)+2047)&~2047)
39#define PAD_TO_4K(a)                 (((a)+4095)&~4095)
40#define PAD_TO_8K(a)                 (((a)+8191)&~8191)
41
42#define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
43#define CEILING16(X) (((X) + 0x000F) & 0xFFF0)
44#define CEILING4(X)  (((X) + 0x0003) & 0xFFFC)
45#define CEILING2(X)  (((X) + 0x0001) & 0xFFFE)
46
47#define MAX_ROI 2
48#define MAX_NUM_PARM 5
49#define MAX_NUM_OPS 2
50#define VIDEO_MAX_PLANES 8
51#define MAX_SNAPSHOT_BUFFERS 5
52#define MAX_EXP_BRACKETING_LENGTH 32
53
54
55/* Exif Tag ID */
56typedef uint32_t exif_tag_id_t;
57
58/* Exif Info (opaque definition) */
59struct exif_info_t;
60typedef struct exif_info_t * exif_info_obj_t;
61
62typedef enum {
63  BACK_CAMERA,
64  FRONT_CAMERA,
65}cam_position_t;
66
67typedef enum {
68  CAM_CTRL_FAILED,        /* Failure in doing operation */
69  CAM_CTRL_SUCCESS,       /* Operation Succeded */
70  CAM_CTRL_INVALID_PARM,  /* Inavlid parameter provided */
71  CAM_CTRL_NOT_SUPPORTED, /* Parameter/operation not supported */
72  CAM_CTRL_ACCEPTED,      /* Parameter accepted */
73  CAM_CTRL_MAX,
74} cam_ctrl_status_t;
75
76typedef enum {
77  CAMERA_YUV_420_NV12,
78  CAMERA_YUV_420_NV21,
79  CAMERA_YUV_420_NV21_ADRENO,
80  CAMERA_BAYER_SBGGR10,
81  CAMERA_RDI,
82  CAMERA_YUV_420_YV12,
83  CAMERA_YUV_422_NV16,
84  CAMERA_YUV_422_NV61
85} cam_format_t;
86
87typedef enum {
88  CAMERA_PAD_NONE,
89  CAMERA_PAD_TO_WORD,   /*2 bytes*/
90  CAMERA_PAD_TO_LONG_WORD, /*4 bytes*/
91  CAMERA_PAD_TO_8, /*8 bytes*/
92  CAMERA_PAD_TO_16, /*16 bytes*/
93
94  CAMERA_PAD_TO_1K, /*1k bytes*/
95  CAMERA_PAD_TO_2K, /*2k bytes*/
96  CAMERA_PAD_TO_4K,
97  CAMERA_PAD_TO_8K
98} cam_pad_format_t;
99
100typedef struct {
101  int ext_mode;   /* preview, main, thumbnail, video, raw, etc */
102  int frame_idx;  /* frame index */
103  int fd;         /* origin fd */
104  uint32_t size;
105} mm_camera_frame_map_type;
106
107typedef struct {
108  int ext_mode;   /* preview, main, thumbnail, video, raw, etc */
109  int frame_idx;  /* frame index */
110} mm_camera_frame_unmap_type;
111
112typedef enum {
113  CAM_SOCK_MSG_TYPE_FD_MAPPING,
114  CAM_SOCK_MSG_TYPE_FD_UNMAPPING,
115  CAM_SOCK_MSG_TYPE_WDN_START,
116  CAM_SOCK_MSG_TYPE_HIST_MAPPING,
117  CAM_SOCK_MSG_TYPE_HIST_UNMAPPING,
118  CAM_SOCK_MSG_TYPE_MAX
119}mm_camera_socket_msg_type;
120
121#define MM_MAX_WDN_NUM 2
122typedef struct {
123  unsigned long cookie;
124  int num_frames;
125  int ext_mode[MM_MAX_WDN_NUM];
126  int frame_idx[MM_MAX_WDN_NUM];
127} mm_camera_wdn_start_type;
128
129typedef struct {
130  mm_camera_socket_msg_type msg_type;
131  union {
132    mm_camera_frame_map_type frame_fd_map;
133    mm_camera_frame_unmap_type frame_fd_unmap;
134    mm_camera_wdn_start_type wdn_start;
135  } payload;
136} cam_sock_packet_t;
137
138
139typedef enum {
140  CAM_VIDEO_FRAME,
141  CAM_SNAPSHOT_FRAME,
142  CAM_PREVIEW_FRAME,
143}cam_frame_type_t;
144
145
146typedef enum {
147  CAMERA_MODE_2D = (1<<0),
148  CAMERA_MODE_3D = (1<<1),
149  CAMERA_NONZSL_MODE = (1<<2),
150  CAMERA_ZSL_MODE = (1<<3),
151  CAMERA_MODE_MAX = CAMERA_ZSL_MODE,
152} camera_mode_t;
153
154
155typedef struct {
156  int  modes_supported;
157  int8_t camera_id;
158  cam_position_t position;
159  uint32_t sensor_mount_angle;
160}camera_info_t;
161
162typedef struct {
163  camera_mode_t mode;
164  int8_t camera_id;
165  camera_mode_t cammode;
166}config_params_t;
167
168typedef struct {
169  uint32_t len;
170  uint32_t y_offset;
171  uint32_t cbcr_offset;
172} cam_sp_len_offset_t;
173
174typedef struct{
175  uint32_t len;
176  uint32_t offset;
177} cam_mp_len_offset_t;
178
179typedef struct {
180  int num_planes;
181  union {
182    cam_sp_len_offset_t sp;
183    cam_mp_len_offset_t mp[8];
184  };
185  uint32_t frame_len;
186} cam_frame_len_offset_t;
187
188typedef struct {
189  uint32_t parm[MAX_NUM_PARM];
190  uint32_t ops[MAX_NUM_OPS];
191  uint8_t yuv_output;
192  uint8_t jpeg_capture;
193  uint32_t max_pict_width;
194  uint32_t max_pict_height;
195  uint32_t max_preview_width;
196  uint32_t max_preview_height;
197  uint32_t max_video_width;
198  uint32_t max_video_height;
199  uint32_t effect;
200  camera_mode_t modes;
201  uint8_t preview_format;
202  uint32_t preview_sizes_cnt;
203  uint32_t thumb_sizes_cnt;
204  uint32_t video_sizes_cnt;
205  uint32_t hfr_sizes_cnt;
206  uint8_t vfe_output_enable;
207  uint8_t hfr_frame_skip;
208  uint32_t default_preview_width;
209  uint32_t default_preview_height;
210  uint32_t bestshot_reconfigure;
211}cam_prop_t;
212
213typedef struct {
214  uint16_t video_width;         /* Video width seen by VFE could be different than orig. Ex. DIS */
215  uint16_t video_height;        /* Video height seen by VFE */
216  uint16_t picture_width;       /* Picture width seen by VFE */
217  uint16_t picture_height;      /* Picture height seen by VFE */
218  uint16_t display_width;       /* width of display */
219  uint16_t display_height;      /* height of display */
220  uint16_t orig_video_width;    /* original video width received */
221  uint16_t orig_video_height;   /* original video height received */
222  uint16_t orig_picture_dx;     /* original picture width received */
223  uint16_t orig_picture_dy;     /* original picture height received */
224  uint16_t ui_thumbnail_height; /* Just like orig_picture_dx */
225  uint16_t ui_thumbnail_width;  /* Just like orig_picture_dy */
226  uint16_t thumbnail_height;
227  uint16_t thumbnail_width;
228  uint16_t orig_picture_width;
229  uint16_t orig_picture_height;
230  uint16_t orig_thumb_width;
231  uint16_t orig_thumb_height;
232  uint16_t raw_picture_height;
233  uint16_t raw_picture_width;
234  uint32_t hjr_xtra_buff_for_bayer_filtering;
235  cam_format_t    prev_format;
236  cam_format_t    enc_format;
237  cam_format_t    thumb_format;
238  cam_format_t    main_img_format;
239  cam_pad_format_t prev_padding_format;
240  cam_pad_format_t enc_padding_format;
241  cam_pad_format_t thumb_padding_format;
242  cam_pad_format_t main_padding_format;
243  uint16_t display_luma_width;
244  uint16_t display_luma_height;
245  uint16_t display_chroma_width;
246  uint16_t display_chroma_height;
247  uint16_t video_luma_width;
248  uint16_t video_luma_height;
249  uint16_t video_chroma_width;
250  uint16_t video_chroma_height;
251  uint16_t thumbnail_luma_width;
252  uint16_t thumbnail_luma_height;
253  uint16_t thumbnail_chroma_width;
254  uint16_t thumbnail_chroma_height;
255  uint16_t main_img_luma_width;
256  uint16_t main_img_luma_height;
257  uint16_t main_img_chroma_width;
258  uint16_t main_img_chroma_height;
259  int rotation;
260  cam_frame_len_offset_t display_frame_offset;
261  cam_frame_len_offset_t video_frame_offset;
262  cam_frame_len_offset_t picture_frame_offset;
263  cam_frame_len_offset_t thumb_frame_offset;
264} cam_ctrl_dimension_t;
265
266/* Add enumenrations at the bottom but before MM_CAMERA_PARM_MAX */
267typedef enum {
268    MM_CAMERA_PARM_PICT_SIZE,
269    MM_CAMERA_PARM_ZOOM_RATIO,
270    MM_CAMERA_PARM_HISTOGRAM,
271    MM_CAMERA_PARM_DIMENSION,
272    MM_CAMERA_PARM_FPS,
273    MM_CAMERA_PARM_FPS_MODE, /*5*/
274    MM_CAMERA_PARM_EFFECT,
275    MM_CAMERA_PARM_EXPOSURE_COMPENSATION,
276    MM_CAMERA_PARM_EXPOSURE,
277    MM_CAMERA_PARM_SHARPNESS,
278    MM_CAMERA_PARM_CONTRAST, /*10*/
279    MM_CAMERA_PARM_SATURATION,
280    MM_CAMERA_PARM_BRIGHTNESS,
281    MM_CAMERA_PARM_WHITE_BALANCE,
282    MM_CAMERA_PARM_LED_MODE,
283    MM_CAMERA_PARM_ANTIBANDING, /*15*/
284    MM_CAMERA_PARM_ROLLOFF,
285    MM_CAMERA_PARM_CONTINUOUS_AF,
286    MM_CAMERA_PARM_FOCUS_RECT,
287    MM_CAMERA_PARM_AEC_ROI,
288    MM_CAMERA_PARM_AF_ROI, /*20*/
289    MM_CAMERA_PARM_HJR,
290    MM_CAMERA_PARM_ISO,
291    MM_CAMERA_PARM_BL_DETECTION,
292    MM_CAMERA_PARM_SNOW_DETECTION,
293    MM_CAMERA_PARM_BESTSHOT_MODE, /*25*/
294    MM_CAMERA_PARM_ZOOM,
295    MM_CAMERA_PARM_VIDEO_DIS,
296    MM_CAMERA_PARM_VIDEO_ROT,
297    MM_CAMERA_PARM_SCE_FACTOR,
298    MM_CAMERA_PARM_FD, /*30*/
299    MM_CAMERA_PARM_MODE,
300    /* 2nd 32 bits */
301    MM_CAMERA_PARM_3D_FRAME_FORMAT,
302    MM_CAMERA_PARM_CAMERA_ID,
303    MM_CAMERA_PARM_CAMERA_INFO,
304    MM_CAMERA_PARM_PREVIEW_SIZE, /*35*/
305    MM_CAMERA_PARM_QUERY_FALSH4SNAP,
306    MM_CAMERA_PARM_FOCUS_DISTANCES,
307    MM_CAMERA_PARM_BUFFER_INFO,
308    MM_CAMERA_PARM_JPEG_ROTATION,
309    MM_CAMERA_PARM_JPEG_MAINIMG_QUALITY, /* 40 */
310    MM_CAMERA_PARM_JPEG_THUMB_QUALITY,
311    MM_CAMERA_PARM_ZSL_ENABLE,
312    MM_CAMERA_PARM_FOCAL_LENGTH,
313    MM_CAMERA_PARM_HORIZONTAL_VIEW_ANGLE,
314    MM_CAMERA_PARM_VERTICAL_VIEW_ANGLE, /* 45 */
315    MM_CAMERA_PARM_MCE,
316    MM_CAMERA_PARM_RESET_LENS_TO_INFINITY,
317    MM_CAMERA_PARM_SNAPSHOTDATA,
318    MM_CAMERA_PARM_HFR,
319    MM_CAMERA_PARM_REDEYE_REDUCTION, /* 50 */
320    MM_CAMERA_PARM_WAVELET_DENOISE,
321    MM_CAMERA_PARM_3D_DISPLAY_DISTANCE,
322    MM_CAMERA_PARM_3D_VIEW_ANGLE,
323    MM_CAMERA_PARM_PREVIEW_FORMAT,
324    MM_CAMERA_PARM_HFR_SIZE, /* 55 */
325    MM_CAMERA_PARM_3D_EFFECT,
326    MM_CAMERA_PARM_3D_MANUAL_CONV_RANGE,
327    MM_CAMERA_PARM_3D_MANUAL_CONV_VALUE,
328    MM_CAMERA_PARM_ENABLE_3D_MANUAL_CONVERGENCE,
329    /* These are new parameters defined here */
330    MM_CAMERA_PARM_CH_IMAGE_FMT, /* 60 */       // mm_camera_ch_image_fmt_parm_t
331    MM_CAMERA_PARM_OP_MODE,             // camera state, sub state also
332    MM_CAMERA_PARM_SHARPNESS_CAP,       //
333    MM_CAMERA_PARM_SNAPSHOT_BURST_NUM,  // num shots per snapshot action
334    MM_CAMERA_PARM_LIVESHOT_MAIN,       // enable/disable full size live shot
335    MM_CAMERA_PARM_MAXZOOM, /* 65 */
336    MM_CAMERA_PARM_LUMA_ADAPTATION,     // enable/disable
337    MM_CAMERA_PARM_HDR,
338    MM_CAMERA_PARM_CROP,
339    MM_CAMERA_PARM_MAX_PICTURE_SIZE,
340    MM_CAMERA_PARM_MAX_PREVIEW_SIZE, /* 70 */
341    MM_CAMERA_PARM_ASD_ENABLE,
342    MM_CAMERA_PARM_RECORDING_HINT,
343    MM_CAMERA_PARM_CAF_ENABLE,
344    MM_CAMERA_PARM_FULL_LIVESHOT,
345    MM_CAMERA_PARM_DIS_ENABLE, /* 75 */
346    MM_CAMERA_PARM_AEC_LOCK,
347    MM_CAMERA_PARM_AWB_LOCK,
348    MM_CAMERA_PARM_AF_MTR_AREA,
349    MM_CAMERA_PARM_AEC_MTR_AREA,
350    MM_CAMERA_PARM_LOW_POWER_MODE,
351    MM_CAMERA_PARM_MAX_HFR_MODE, /* 80 */
352    MM_CAMERA_PARM_MAX_VIDEO_SIZE,
353    MM_CAMERA_PARM_DEF_PREVIEW_SIZES,
354    MM_CAMERA_PARM_DEF_VIDEO_SIZES,
355    MM_CAMERA_PARM_DEF_THUMB_SIZES,
356    MM_CAMERA_PARM_DEF_HFR_SIZES,
357    MM_CAMERA_PARM_PREVIEW_SIZES_CNT,
358    MM_CAMERA_PARM_VIDEO_SIZES_CNT,
359    MM_CAMERA_PARM_THUMB_SIZES_CNT,
360    MM_CAMERA_PARM_HFR_SIZES_CNT,
361    MM_CAMERA_PARM_GRALLOC_USAGE,
362    MM_CAMERA_PARM_VFE_OUTPUT_ENABLE, //to check whether both oputputs are
363    MM_CAMERA_PARM_DEFAULT_PREVIEW_WIDTH,
364    MM_CAMERA_PARM_DEFAULT_PREVIEW_HEIGHT,
365    MM_CAMERA_PARM_FOCUS_MODE,
366    MM_CAMERA_PARM_HFR_FRAME_SKIP,
367    //or single output enabled to differentiate 7x27a with others
368    MM_CAMERA_PARM_BESTSHOT_RECONFIGURE,
369    MM_CAMERA_MAX_NUM_FACES_DECT,
370    MM_CAMERA_PARM_FPS_RANGE,
371    MM_CAMERA_PARM_MAX
372} mm_camera_parm_type_t;
373
374typedef enum {
375  CAMERA_SET_PARM_DISPLAY_INFO,
376  CAMERA_SET_PARM_DIMENSION,
377
378  CAMERA_SET_PARM_ZOOM,
379  CAMERA_SET_PARM_SENSOR_POSITION,
380  CAMERA_SET_PARM_FOCUS_RECT,
381  CAMERA_SET_PARM_LUMA_ADAPTATION,
382  CAMERA_SET_PARM_CONTRAST,
383  CAMERA_SET_PARM_BRIGHTNESS,
384  CAMERA_SET_PARM_EXPOSURE_COMPENSATION,
385  CAMERA_SET_PARM_SHARPNESS,
386  CAMERA_SET_PARM_HUE,  /* 10 */
387  CAMERA_SET_PARM_SATURATION,
388  CAMERA_SET_PARM_EXPOSURE,
389  CAMERA_SET_PARM_AUTO_FOCUS,
390  CAMERA_SET_PARM_WB,
391  CAMERA_SET_PARM_EFFECT,
392  CAMERA_SET_PARM_FPS,
393  CAMERA_SET_PARM_FLASH,
394  CAMERA_SET_PARM_NIGHTSHOT_MODE,
395  CAMERA_SET_PARM_REFLECT,
396  CAMERA_SET_PARM_PREVIEW_MODE,  /* 20 */
397  CAMERA_SET_PARM_ANTIBANDING,
398  CAMERA_SET_PARM_RED_EYE_REDUCTION,
399  CAMERA_SET_PARM_FOCUS_STEP,
400  CAMERA_SET_PARM_EXPOSURE_METERING,
401  CAMERA_SET_PARM_AUTO_EXPOSURE_MODE,
402  CAMERA_SET_PARM_ISO,
403  CAMERA_SET_PARM_BESTSHOT_MODE,
404  CAMERA_SET_PARM_ENCODE_ROTATION,
405
406  CAMERA_SET_PARM_PREVIEW_FPS,
407  CAMERA_SET_PARM_AF_MODE,  /* 30 */
408  CAMERA_SET_PARM_HISTOGRAM,
409  CAMERA_SET_PARM_FLASH_STATE,
410  CAMERA_SET_PARM_FRAME_TIMESTAMP,
411  CAMERA_SET_PARM_STROBE_FLASH,
412  CAMERA_SET_PARM_FPS_LIST,
413  CAMERA_SET_PARM_HJR,
414  CAMERA_SET_PARM_ROLLOFF,
415
416  CAMERA_STOP_PREVIEW,
417  CAMERA_START_PREVIEW,
418  CAMERA_START_SNAPSHOT, /* 40 */
419  CAMERA_START_RAW_SNAPSHOT,
420  CAMERA_STOP_SNAPSHOT,
421  CAMERA_EXIT,
422  CAMERA_ENABLE_BSM,
423  CAMERA_DISABLE_BSM,
424  CAMERA_GET_PARM_ZOOM,
425  CAMERA_GET_PARM_MAXZOOM,
426  CAMERA_GET_PARM_ZOOMRATIOS,
427  CAMERA_GET_PARM_AF_SHARPNESS,
428  CAMERA_SET_PARM_LED_MODE, /* 50 */
429  CAMERA_SET_MOTION_ISO,
430  CAMERA_AUTO_FOCUS_CANCEL,
431  CAMERA_GET_PARM_FOCUS_STEP,
432  CAMERA_ENABLE_AFD,
433  CAMERA_PREPARE_SNAPSHOT,
434  CAMERA_SET_FPS_MODE,
435  CAMERA_START_VIDEO,
436  CAMERA_STOP_VIDEO,
437  CAMERA_START_RECORDING,
438  CAMERA_STOP_RECORDING, /* 60 */
439  CAMERA_SET_VIDEO_DIS_PARAMS,
440  CAMERA_SET_VIDEO_ROT_PARAMS,
441  CAMERA_SET_PARM_AEC_ROI,
442  CAMERA_SET_CAF,
443  CAMERA_SET_PARM_BL_DETECTION_ENABLE,
444  CAMERA_SET_PARM_SNOW_DETECTION_ENABLE,
445  CAMERA_SET_PARM_STROBE_FLASH_MODE,
446  CAMERA_SET_PARM_AF_ROI,
447  CAMERA_START_LIVESHOT,
448  CAMERA_SET_SCE_FACTOR, /* 70 */
449  CAMERA_GET_CAPABILITIES,
450  CAMERA_GET_PARM_DIMENSION,
451  CAMERA_GET_PARM_LED_MODE,
452  CAMERA_SET_PARM_FD,
453  CAMERA_GET_PARM_3D_FRAME_FORMAT,
454  CAMERA_QUERY_FLASH_FOR_SNAPSHOT,
455  CAMERA_GET_PARM_FOCUS_DISTANCES,
456  CAMERA_START_ZSL,
457  CAMERA_STOP_ZSL,
458  CAMERA_ENABLE_ZSL, /* 80 */
459  CAMERA_GET_PARM_FOCAL_LENGTH,
460  CAMERA_GET_PARM_HORIZONTAL_VIEW_ANGLE,
461  CAMERA_GET_PARM_VERTICAL_VIEW_ANGLE,
462  CAMERA_SET_PARM_WAVELET_DENOISE,
463  CAMERA_SET_PARM_MCE,
464  CAMERA_ENABLE_STEREO_CAM,
465  CAMERA_SET_PARM_RESET_LENS_TO_INFINITY,
466  CAMERA_GET_PARM_SNAPSHOTDATA,
467  CAMERA_SET_PARM_HFR,
468  CAMERA_SET_REDEYE_REDUCTION, /* 90 */
469  CAMERA_SET_PARM_3D_DISPLAY_DISTANCE,
470  CAMERA_SET_PARM_3D_VIEW_ANGLE,
471  CAMERA_SET_PARM_3D_EFFECT,
472  CAMERA_SET_PARM_PREVIEW_FORMAT,
473  CAMERA_GET_PARM_3D_DISPLAY_DISTANCE, /* 95 */
474  CAMERA_GET_PARM_3D_VIEW_ANGLE,
475  CAMERA_GET_PARM_3D_EFFECT,
476  CAMERA_GET_PARM_3D_MANUAL_CONV_RANGE,
477  CAMERA_SET_PARM_3D_MANUAL_CONV_VALUE,
478  CAMERA_ENABLE_3D_MANUAL_CONVERGENCE, /* 100 */
479  CAMERA_SET_PARM_HDR,
480  CAMERA_SET_ASD_ENABLE,
481  CAMERA_POSTPROC_ABORT,
482  CAMERA_SET_AEC_MTR_AREA,
483  CAMERA_SET_AEC_LOCK,       /*105*/
484  CAMERA_SET_AWB_LOCK,
485  CAMERA_SET_RECORDING_HINT,
486  CAMERA_SET_PARM_CAF,
487  CAMERA_SET_FULL_LIVESHOT,
488  CAMERA_SET_DIS_ENABLE,  /*110*/
489  CAMERA_GET_PARM_MAX_HFR_MODE,
490  CAMERA_SET_LOW_POWER_MODE,
491  CAMERA_GET_PARM_DEF_PREVIEW_SIZES,
492  CAMERA_GET_PARM_DEF_VIDEO_SIZES,
493  CAMERA_GET_PARM_DEF_THUMB_SIZES, /*115*/
494  CAMERA_GET_PARM_DEF_HFR_SIZES,
495  CAMERA_GET_PARM_MAX_LIVESHOT_SIZE,
496  CAMERA_GET_PARM_FPS_RANGE,
497  CAMERA_SET_3A_CONVERGENCE,
498  CAMERA_SET_PREVIEW_HFR, /*120*/
499  CAMERA_GET_MAX_DIMENSION,
500  CAMERA_GET_MAX_NUM_FACES_DECT,
501  CAMERA_CTRL_PARM_MAX
502} cam_ctrl_type;
503
504typedef enum {
505  CAMERA_ERROR_NO_MEMORY,
506  CAMERA_ERROR_EFS_FAIL,                /* Low-level operation failed */
507  CAMERA_ERROR_EFS_FILE_OPEN,           /* File already opened */
508  CAMERA_ERROR_EFS_FILE_NOT_OPEN,       /* File not opened */
509  CAMERA_ERROR_EFS_FILE_ALREADY_EXISTS, /* File already exists */
510  CAMERA_ERROR_EFS_NONEXISTENT_DIR,     /* User directory doesn't exist */
511  CAMERA_ERROR_EFS_NONEXISTENT_FILE,    /* User directory doesn't exist */
512  CAMERA_ERROR_EFS_BAD_FILE_NAME,       /* Client specified invalid file/directory name*/
513  CAMERA_ERROR_EFS_BAD_FILE_HANDLE,     /* Client specified invalid file/directory name*/
514  CAMERA_ERROR_EFS_SPACE_EXHAUSTED,     /* Out of file system space */
515  CAMERA_ERROR_EFS_OPEN_TABLE_FULL,     /* Out of open-file table slots                */
516  CAMERA_ERROR_EFS_OTHER_ERROR,         /* Other error                                 */
517  CAMERA_ERROR_CONFIG,
518  CAMERA_ERROR_EXIF_ENCODE,
519  CAMERA_ERROR_VIDEO_ENGINE,
520  CAMERA_ERROR_IPL,
521  CAMERA_ERROR_INVALID_FORMAT,
522  CAMERA_ERROR_TIMEOUT,
523  CAMERA_ERROR_ESD,
524  CAMERA_ERROR_MAX
525} camera_error_type;
526
527#if defined CAMERA_ANTIBANDING_OFF
528#undef CAMERA_ANTIBANDING_OFF
529#endif
530
531#if defined CAMERA_ANTIBANDING_60HZ
532#undef CAMERA_ANTIBANDING_60HZ
533#endif
534
535#if defined CAMERA_ANTIBANDING_50HZ
536#undef CAMERA_ANTIBANDING_50HZ
537#endif
538
539#if defined CAMERA_ANTIBANDING_AUTO
540#undef CAMERA_ANTIBANDING_AUTO
541#endif
542
543typedef enum {
544  CAMERA_ANTIBANDING_OFF,
545  CAMERA_ANTIBANDING_60HZ,
546  CAMERA_ANTIBANDING_50HZ,
547  CAMERA_ANTIBANDING_AUTO,
548  CAMERA_ANTIBANDING_AUTO_50HZ,
549  CAMERA_ANTIBANDING_AUTO_60HZ,
550  CAMERA_MAX_ANTIBANDING,
551} camera_antibanding_type;
552
553/* Enum Type for different ISO Mode supported */
554typedef enum {
555  CAMERA_ISO_AUTO = 0,
556  CAMERA_ISO_DEBLUR,
557  CAMERA_ISO_100,
558  CAMERA_ISO_200,
559  CAMERA_ISO_400,
560  CAMERA_ISO_800,
561  CAMERA_ISO_1600,
562  CAMERA_ISO_MAX
563} camera_iso_mode_type;
564
565
566typedef enum {
567  AEC_ROI_OFF,
568  AEC_ROI_ON
569} aec_roi_ctrl_t;
570
571typedef enum {
572  AEC_ROI_BY_INDEX,
573  AEC_ROI_BY_COORDINATE,
574} aec_roi_type_t;
575
576typedef struct {
577  uint32_t x;
578  uint32_t y;
579} cam_coordinate_type_t;
580
581/*
582 * Define DRAW_RECTANGLES to draw rectangles on screen. Just for test purpose.
583 */
584//#define DRAW_RECTANGLES
585
586typedef struct {
587  uint16_t x;
588  uint16_t y;
589  uint16_t dx;
590  uint16_t dy;
591} roi_t;
592
593typedef struct {
594  aec_roi_ctrl_t aec_roi_enable;
595  aec_roi_type_t aec_roi_type;
596  union {
597    cam_coordinate_type_t coordinate;
598    uint32_t aec_roi_idx;
599  } aec_roi_position;
600} cam_set_aec_roi_t;
601
602typedef struct {
603  uint32_t frm_id;
604  uint8_t num_roi;
605  roi_t roi[MAX_ROI];
606  uint8_t is_multiwindow;
607} roi_info_t;
608
609/* Exif Tag Data Type */
610typedef enum
611{
612    EXIF_BYTE      = 1,
613    EXIF_ASCII     = 2,
614    EXIF_SHORT     = 3,
615    EXIF_LONG      = 4,
616    EXIF_RATIONAL  = 5,
617    EXIF_UNDEFINED = 7,
618    EXIF_SLONG     = 9,
619    EXIF_SRATIONAL = 10
620} exif_tag_type_t;
621
622
623/* Exif Rational Data Type */
624typedef struct
625{
626    uint32_t  num;    // Numerator
627    uint32_t  denom;  // Denominator
628
629} rat_t;
630
631/* Exif Signed Rational Data Type */
632typedef struct
633{
634    int32_t  num;    // Numerator
635    int32_t  denom;  // Denominator
636
637} srat_t;
638
639typedef struct
640{
641  exif_tag_type_t type;
642  uint8_t copy;
643  uint32_t count;
644  union
645  {
646    char      *_ascii;
647    uint8_t   *_bytes;
648    uint8_t    _byte;
649    uint16_t  *_shorts;
650    uint16_t   _short;
651    uint32_t  *_longs;
652    uint32_t   _long;
653    rat_t     *_rats;
654    rat_t      _rat;
655    uint8_t   *_undefined;
656    int32_t   *_slongs;
657    int32_t    _slong;
658    srat_t    *_srats;
659    srat_t     _srat;
660  } data;
661} exif_tag_entry_t;
662
663typedef struct {
664    uint32_t      tag_id;
665    exif_tag_entry_t  tag_entry;
666} exif_tags_info_t;
667
668
669typedef enum {
670 HDR_BRACKETING_OFF,
671 HDR_MODE,
672 EXP_BRACKETING_MODE
673 } hdr_mode;
674
675typedef struct {
676  hdr_mode mode;
677  uint32_t hdr_enable;
678  uint32_t total_frames;
679  uint32_t total_hal_frames;
680  char values[MAX_EXP_BRACKETING_LENGTH];  /* user defined values */
681} exp_bracketing_t;
682typedef struct {
683  roi_t      mtr_area[MAX_ROI];
684  uint32_t   num_area;
685  int        weight[MAX_ROI];
686} aec_mtr_area_t;
687
688typedef struct {
689  int denoise_enable;
690  int process_plates;
691} denoise_param_t;
692
693#ifndef HAVE_CAMERA_SIZE_TYPE
694  #define HAVE_CAMERA_SIZE_TYPE
695struct camera_size_type {
696  int width;
697  int height;
698};
699#endif
700
701typedef struct {
702  uint32_t yoffset;
703  uint32_t cbcr_offset;
704  uint32_t size;
705  struct camera_size_type resolution;
706}cam_buf_info_t;
707
708typedef struct {
709  int x;
710  int y;
711}cam_point_t;
712
713typedef struct {
714  /* AF parameters */
715  uint8_t focus_position;
716  /* AEC parameters */
717  uint32_t line_count;
718  uint8_t luma_target;
719  /* AWB parameters */
720  int32_t r_gain;
721  int32_t b_gain;
722  int32_t g_gain;
723  uint8_t exposure_mode;
724  uint8_t exposure_program;
725  float exposure_time;
726  uint32_t iso_speed;
727} snapshotData_info_t;
728
729
730typedef enum {
731  CAMERA_HFR_MODE_OFF = 1,
732  CAMERA_HFR_MODE_60FPS,
733  CAMERA_HFR_MODE_90FPS,
734  CAMERA_HFR_MODE_120FPS,
735  CAMERA_HFR_MODE_150FPS,
736} camera_hfr_mode_t;
737
738/* frame Q*/
739struct fifo_node
740{
741  struct fifo_node *next;
742  void *f;
743};
744
745struct fifo_queue
746{
747  int num_of_frames;
748  struct fifo_node *front;
749  struct fifo_node *back;
750  pthread_mutex_t mut;
751  pthread_cond_t wait;
752  char* name;
753};
754
755typedef struct {
756  uint32_t buf_len;
757  uint8_t num;
758  uint8_t pmem_type;
759  uint32_t vaddr[8];
760} mm_camera_histo_mem_info_t;
761
762typedef enum {
763  MM_CAMERA_CTRL_EVT_ZOOM_DONE,
764  MM_CAMERA_CTRL_EVT_AUTO_FOCUS_DONE,
765  MM_CAMERA_CTRL_EVT_PREP_SNAPSHOT,
766  MM_CAMERA_CTRL_EVT_SNAPSHOT_CONFIG_DONE,
767  MM_CAMERA_CTRL_EVT_WDN_DONE, // wavelet denoise done
768  MM_CAMERA_CTRL_EVT_ERROR,
769  MM_CAMERA_CTRL_EVT_MAX
770}mm_camera_ctrl_event_type_t;
771
772typedef struct {
773  mm_camera_ctrl_event_type_t evt;
774  cam_ctrl_status_t status;
775  unsigned long cookie;
776} mm_camera_ctrl_event_t;
777
778typedef enum {
779  MM_CAMERA_CH_EVT_STREAMING_ON,
780  MM_CAMERA_CH_EVT_STREAMING_OFF,
781  MM_CAMERA_CH_EVT_STREAMING_ERR,
782  MM_CAMERA_CH_EVT_DATA_DELIVERY_DONE,
783  MM_CAMERA_CH_EVT_DATA_REQUEST_MORE,
784  MM_CAMERA_CH_EVT_MAX
785}mm_camera_ch_event_type_t;
786
787typedef struct {
788  uint32_t ch;
789  mm_camera_ch_event_type_t evt;
790} mm_camera_ch_event_t;
791
792typedef struct {
793  uint32_t index;
794  /* TBD: need more fields for histo stats? */
795} mm_camera_stats_histo_t;
796
797typedef struct  {
798  uint32_t event_id;
799  union {
800    mm_camera_stats_histo_t    stats_histo;
801  } e;
802} mm_camera_stats_event_t;
803
804typedef enum {
805  FD_ROI_TYPE_HEADER,
806  FD_ROI_TYPE_DATA
807} fd_roi_type_t;
808
809typedef struct {
810  uint32_t frame_id;
811  int16_t num_face_detected;
812} fd_roi_header_type;
813
814struct fd_rect_t {
815  uint16_t x;
816  uint16_t y;
817  uint16_t dx;
818  uint16_t dy;
819};
820
821typedef struct {
822  struct fd_rect_t face_boundary;
823  uint16_t left_eye_center[2];
824  uint16_t right_eye_center[2];
825  uint16_t mouth_center[2];
826  uint8_t smile_degree;  //0 -100
827  uint8_t smile_confidence;  //
828  uint8_t blink_detected;  // 0 or 1
829  uint8_t is_face_recognised;  // 0 or 1
830  int8_t gaze_angle;  // -90 -45 0 45 90 for head left to rigth tilt
831  int8_t updown_dir;  // -90 to 90
832  int8_t leftright_dir;  //-90 to 90
833  int8_t roll_dir;  // -90 to 90
834  int8_t left_right_gaze;  // -50 to 50
835  int8_t top_bottom_gaze;  // -50 to 50
836  uint8_t left_blink;  // 0 - 100
837  uint8_t right_blink;  // 0 - 100
838  int8_t id;  // unique id for face tracking within view unless view changes
839  int8_t score;  // score of confidence( 0 -100)
840} fd_face_type;
841
842typedef struct {
843  uint32_t frame_id;
844  uint8_t idx;
845  fd_face_type face;
846} fd_roi_data_type;
847
848struct fd_roi_t {
849  fd_roi_type_t type;
850  union {
851    fd_roi_header_type hdr;
852    fd_roi_data_type data;
853  } d;
854};
855
856typedef struct  {
857  uint32_t event_id;
858  union {
859    mm_camera_histo_mem_info_t histo_mem_info;
860    struct fd_roi_t roi;
861  } e;
862} mm_camera_info_event_t;
863
864
865typedef enum {
866  MM_CAMERA_EVT_TYPE_CH,
867  MM_CAMERA_EVT_TYPE_CTRL,
868  MM_CAMERA_EVT_TYPE_STATS,
869  MM_CAMERA_EVT_TYPE_INFO,
870  MM_CAMERA_EVT_TYPE_MAX
871} mm_camera_event_type_t;
872
873/******************************************************************************
874 * Function: exif_set_tag
875 * Description: Inserts or modifies an Exif tag to the Exif Info object. Typical
876 *              use is to call this function multiple times - to insert all the
877 *              desired Exif Tags individually to the Exif Info object and
878 *              then pass the info object to the Jpeg Encoder object so
879 *              the inserted tags would be emitted as tags in the Exif header.
880 * Input parameters:
881 *   obj       - The Exif Info object where the tag would be inserted to or
882 *               modified from.
883 *   tag_id    - The Exif Tag ID of the tag to be inserted/modified.
884 *   p_entry   - The pointer to the tag entry structure which contains the
885 *               details of tag. The pointer can be set to NULL to un-do
886 *               previous insertion for a certain tag.
887 * Return values:
888 *     JPEGERR_SUCCESS
889 *     JPEGERR_ENULLPTR
890 *     JPEGERR_EFAILED
891 * (See jpegerr.h for description of error values.)
892 * Notes: none
893 *****************************************************************************/
894int exif_set_tag(exif_info_obj_t    obj,
895                 exif_tag_id_t      tag_id,
896                 exif_tag_entry_t  *p_entry);
897
898
899#endif /* __QCAMERA_INTF_H__ */
900