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