1 /* Copyright (c) 2012, 2016, 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 // System dependencies 34 #include <pthread.h> 35 #include <stdint.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 */ 56 typedef uint32_t exif_tag_id_t; 57 58 /* Exif Info (opaque definition) */ 59 struct exif_info_t; 60 typedef struct exif_info_t * exif_info_obj_t; 61 62 typedef enum { 63 BACK_CAMERA, 64 FRONT_CAMERA, 65 }cam_position_t; 66 67 typedef 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 76 typedef 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 92 typedef 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 105 typedef 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 113 typedef 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 119 typedef 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 129 typedef 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 138 typedef 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 145 typedef 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 155 typedef enum { 156 CAM_VIDEO_FRAME, 157 CAM_SNAPSHOT_FRAME, 158 CAM_PREVIEW_FRAME, 159 }cam_frame_type_t; 160 161 162 typedef 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 171 typedef 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 178 typedef struct { 179 camera_mode_t mode; 180 int8_t camera_id; 181 camera_mode_t cammode; 182 }config_params_t; 183 184 typedef struct { 185 uint32_t len; 186 uint32_t y_offset; 187 uint32_t cbcr_offset; 188 } cam_sp_len_offset_t; 189 190 typedef struct{ 191 uint32_t len; 192 uint32_t offset; 193 } cam_mp_len_offset_t; 194 195 typedef 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 204 typedef 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 230 typedef 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 291 typedef struct { 292 uint16_t type; 293 uint16_t width; 294 uint16_t height; 295 } cam_stats_buf_dimension_t; 296 297 typedef 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 304 typedef 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 310 typedef 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 322 typedef 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 331 typedef 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 336 typedef 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 */ 342 typedef 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 456 typedef 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 464 typedef 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 606 typedef 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 645 typedef enum { 646 CAMERA_PP_MASK_TYPE_WNR = 0x01 647 } camera_pp_mask_type; 648 649 typedef 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 */ 660 typedef 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 671 typedef enum { 672 MM_CAMERA_FACIAL_FEATURE_FD, // facial detection 673 MM_CAMERA_FACIAL_FEATURE_MAX 674 } camera_facial_features; 675 676 typedef enum { 677 AEC_ROI_OFF, 678 AEC_ROI_ON 679 } aec_roi_ctrl_t; 680 681 typedef enum { 682 AEC_ROI_BY_INDEX, 683 AEC_ROI_BY_COORDINATE, 684 } aec_roi_type_t; 685 686 typedef 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 696 typedef struct { 697 uint16_t x; 698 uint16_t y; 699 uint16_t dx; 700 uint16_t dy; 701 } roi_t; 702 703 typedef 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 712 typedef 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 */ 720 typedef 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 */ 734 typedef struct 735 { 736 uint32_t num; // Numerator 737 uint32_t denom; // Denominator 738 739 } rat_t; 740 741 /* Exif Signed Rational Data Type */ 742 typedef struct 743 { 744 int32_t num; // Numerator 745 int32_t denom; // Denominator 746 747 } srat_t; 748 749 typedef 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 773 typedef struct { 774 uint32_t tag_id; 775 exif_tag_entry_t tag_entry; 776 } exif_tags_info_t; 777 778 779 typedef enum { 780 HDR_BRACKETING_OFF, 781 HDR_MODE, 782 EXP_BRACKETING_MODE 783 } hdr_mode; 784 785 typedef 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; 792 typedef struct { 793 roi_t mtr_area[MAX_ROI]; 794 uint32_t num_area; 795 int weight[MAX_ROI]; 796 } aec_mtr_area_t; 797 798 typedef 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 805 struct camera_size_type { 806 int width; 807 int height; 808 }; 809 #endif 810 811 typedef 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 818 typedef struct { 819 int x; 820 int y; 821 }cam_point_t; 822 823 typedef 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 840 typedef 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*/ 849 struct fifo_node 850 { 851 struct fifo_node *next; 852 void *f; 853 }; 854 855 struct 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 865 typedef 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 872 typedef 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 883 typedef 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 889 typedef 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 898 typedef struct { 899 uint32_t ch; 900 mm_camera_ch_event_type_t evt; 901 } mm_camera_ch_event_t; 902 903 typedef struct { 904 uint32_t index; 905 /* TBD: need more fields for histo stats? */ 906 } mm_camera_stats_histo_t; 907 908 typedef 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 915 typedef enum { 916 FD_ROI_TYPE_HEADER, 917 FD_ROI_TYPE_DATA 918 } fd_roi_type_t; 919 920 typedef struct { 921 int fd_mode; 922 int num_fd; 923 } fd_set_parm_t; 924 925 typedef struct { 926 uint32_t frame_id; 927 int16_t num_face_detected; 928 } fd_roi_header_type; 929 930 struct fd_rect_t { 931 uint16_t x; 932 uint16_t y; 933 uint16_t dx; 934 uint16_t dy; 935 }; 936 937 typedef 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 958 typedef struct { 959 uint32_t frame_id; 960 uint8_t idx; 961 fd_face_type face; 962 } fd_roi_data_type; 963 964 struct 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 972 typedef 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 980 typedef 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 987 typedef 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 996 typedef 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 1007 typedef 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 */ 1019 typedef 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 1028 typedef struct { 1029 uint32_t addr_offset; 1030 uint32_t length; 1031 uint32_t data_offset; 1032 } mm_camera_repro_plane_t; 1033 1034 typedef 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 1047 typedef 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 1052 typedef 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 1060 typedef 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 1067 typedef 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 1073 typedef 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 1079 typedef 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 1100 typedef 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 */ 1115 typedef 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 *****************************************************************************/ 1142 int 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