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