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