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