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