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