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