1 /* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29 30 #ifndef __QCAMERA_INTF_H__ 31 #define __QCAMERA_INTF_H__ 32 33 #include <string.h> 34 #include <media/msmb_isp.h> 35 #include "cam_types.h" 36 37 #define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + 14) 38 typedef enum { 39 /* session based parameters */ 40 CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE, 41 /* session based action: do auto focus.*/ 42 CAM_PRIV_DO_AUTO_FOCUS, 43 /* session based action: cancel auto focus.*/ 44 CAM_PRIV_CANCEL_AUTO_FOCUS, 45 /* session based action: prepare for snapshot.*/ 46 CAM_PRIV_PREPARE_SNAPSHOT, 47 /* sync stream info.*/ 48 CAM_PRIV_STREAM_INFO_SYNC, 49 /* stream based parameters*/ 50 CAM_PRIV_STREAM_PARM, 51 /* start ZSL snapshot.*/ 52 CAM_PRIV_START_ZSL_SNAPSHOT, 53 /* stop ZSL snapshot.*/ 54 CAM_PRIV_STOP_ZSL_SNAPSHOT, 55 } cam_private_ioctl_enum_t; 56 57 /* capability struct definition for HAL 1*/ 58 typedef struct{ 59 cam_hal_version_t version; 60 61 cam_position_t position; /* sensor position: front, back */ 62 63 uint8_t auto_hdr_supported; 64 65 uint16_t isWnrSupported; 66 /* supported iso modes */ 67 size_t supported_iso_modes_cnt; 68 cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX]; 69 70 /* supported flash modes */ 71 size_t supported_flash_modes_cnt; 72 cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX]; 73 74 size_t zoom_ratio_tbl_cnt; /* table size for zoom ratios */ 75 uint32_t zoom_ratio_tbl[MAX_ZOOMS_CNT]; /* zoom ratios table */ 76 77 /* supported effect modes */ 78 size_t supported_effects_cnt; 79 cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX]; 80 81 /* supported scene modes */ 82 size_t supported_scene_modes_cnt; 83 cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX]; 84 85 /* supported auto exposure modes */ 86 size_t supported_aec_modes_cnt; 87 cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX]; 88 89 size_t fps_ranges_tbl_cnt; /* fps ranges table size */ 90 cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT]; /* fps ranges table */ 91 92 /* supported antibanding modes */ 93 size_t supported_antibandings_cnt; 94 cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX]; 95 96 /* supported white balance modes */ 97 size_t supported_white_balances_cnt; 98 cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX]; 99 100 /* supported manual wb cct */ 101 int32_t min_wb_cct; 102 int32_t max_wb_cct; 103 104 /* supported manual wb rgb gains */ 105 float min_wb_gain; 106 float max_wb_gain; 107 108 /* supported focus modes */ 109 size_t supported_focus_modes_cnt; 110 cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX]; 111 112 /* supported manual focus position */ 113 float min_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX]; 114 float max_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX]; 115 116 int32_t exposure_compensation_min; /* min value of exposure compensation index */ 117 int32_t exposure_compensation_max; /* max value of exposure compensation index */ 118 int32_t exposure_compensation_default; /* default value of exposure compensation index */ 119 float exposure_compensation_step; 120 cam_rational_type_t exp_compensation_step; /* exposure compensation step value */ 121 122 uint8_t video_stablization_supported; /* flag id video stablization is supported */ 123 124 size_t picture_sizes_tbl_cnt; /* picture sizes table size */ 125 cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT]; /* picture sizes table */ 126 /* The minimum frame duration that is supported for each 127 * resolution in availableProcessedSizes. Should correspond 128 * to the frame duration when only that processed stream 129 * is active, with all processing set to FAST */ 130 int64_t picture_min_duration[MAX_SIZES_CNT]; 131 132 /* capabilities specific to HAL 1 */ 133 134 int32_t modes_supported; /* mask of modes supported: 2D, 3D */ 135 uint32_t sensor_mount_angle; /* sensor mount angle */ 136 137 float focal_length; /* focal length */ 138 float hor_view_angle; /* horizontal view angle */ 139 float ver_view_angle; /* vertical view angle */ 140 141 size_t preview_sizes_tbl_cnt; /* preview sizes table size */ 142 cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT]; /* preiew sizes table */ 143 144 size_t video_sizes_tbl_cnt; /* video sizes table size */ 145 cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT]; /* video sizes table */ 146 147 148 size_t livesnapshot_sizes_tbl_cnt; /* livesnapshot sizes table size */ 149 cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* livesnapshot sizes table */ 150 151 size_t hfr_tbl_cnt; /* table size for HFR */ 152 cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX]; /* HFR table */ 153 154 /* supported preview formats */ 155 size_t supported_preview_fmt_cnt; 156 cam_format_t supported_preview_fmts[CAM_FORMAT_MAX]; 157 158 /* supported picture formats */ 159 size_t supported_picture_fmt_cnt; 160 cam_format_t supported_picture_fmts[CAM_FORMAT_MAX]; 161 162 uint8_t max_downscale_factor; 163 164 /* dimension and supported output format of raw dump from camif */ 165 size_t supported_raw_dim_cnt; 166 cam_dimension_t raw_dim[MAX_SIZES_CNT]; 167 size_t supported_raw_fmt_cnt; 168 cam_format_t supported_raw_fmts[CAM_FORMAT_MAX]; 169 /* The minimum frame duration that is supported for above 170 raw resolution */ 171 int64_t raw_min_duration[MAX_SIZES_CNT]; 172 173 /* supported focus algorithms */ 174 size_t supported_focus_algos_cnt; 175 cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX]; 176 177 178 uint8_t auto_wb_lock_supported; /* flag if auto white balance lock is supported */ 179 uint8_t zoom_supported; /* flag if zoom is supported */ 180 uint8_t smooth_zoom_supported; /* flag if smooth zoom is supported */ 181 uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */ 182 uint8_t video_snapshot_supported; /* flag if video snapshot is supported */ 183 184 uint8_t max_num_roi; /* max number of roi can be detected */ 185 uint8_t max_num_focus_areas; /* max num of focus areas */ 186 uint8_t max_num_metering_areas; /* max num opf metering areas */ 187 uint8_t max_zoom_step; /* max zoom step value */ 188 189 /* QCOM specific control */ 190 cam_control_range_t brightness_ctrl; /* brightness */ 191 cam_control_range_t sharpness_ctrl; /* sharpness */ 192 cam_control_range_t contrast_ctrl; /* contrast */ 193 cam_control_range_t saturation_ctrl; /* saturation */ 194 cam_control_range_t sce_ctrl; /* skintone enhancement factor */ 195 196 /* QCOM HDR specific control. Indicates number of frames and exposure needs for the frames */ 197 cam_hdr_bracketing_info_t hdr_bracketing_setting; 198 199 uint32_t qcom_supported_feature_mask; /* mask of qcom specific features supported: 200 * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/ 201 cam_padding_info_t padding_info; /* padding information from PP */ 202 uint32_t min_num_pp_bufs; /* minimum number of buffers needed by postproc module */ 203 uint32_t min_required_pp_mask; /* min required pp feature masks for ZSL. 204 * depends on hardware limitation, i.e. for 8974, 205 * sharpness is required for all ZSL snapshot frames */ 206 cam_format_t rdi_mode_stream_fmt; /* stream format supported in rdi mode */ 207 208 /* capabilities specific to HAL 3 */ 209 210 float min_focus_distance; 211 float hyper_focal_distance; 212 213 float focal_lengths[CAM_FOCAL_LENGTHS_MAX]; 214 uint8_t focal_lengths_count; 215 216 /* Needs to be regular f number instead of APEX */ 217 float apertures[CAM_APERTURES_MAX]; 218 uint8_t apertures_count; 219 220 float filter_densities[CAM_FILTER_DENSITIES_MAX]; 221 uint8_t filter_densities_count; 222 223 uint8_t optical_stab_modes[CAM_OPT_STAB_MAX]; 224 uint8_t optical_stab_modes_count; 225 226 cam_dimension_t lens_shading_map_size; 227 float lens_shading_map[3 * CAM_MAX_MAP_WIDTH * 228 CAM_MAX_MAP_HEIGHT]; 229 230 cam_dimension_t geo_correction_map_size; 231 float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH * 232 CAM_MAX_MAP_HEIGHT]; 233 234 float lens_position[3]; 235 236 /* nano seconds */ 237 int64_t exposure_time_range[EXPOSURE_TIME_RANGE_CNT]; 238 239 /* nano seconds */ 240 int64_t max_frame_duration; 241 242 cam_color_filter_arrangement_t color_arrangement; 243 uint8_t num_color_channels; 244 245 /* parameters required to calculate S and O co-efficients */ 246 double gradient_S; 247 double offset_S; 248 double gradient_O; 249 double offset_O; 250 251 float sensor_physical_size[SENSOR_PHYSICAL_SIZE_CNT]; 252 253 /* Dimensions of full pixel array, possibly including 254 black calibration pixels */ 255 cam_dimension_t pixel_array_size; 256 /* Area of raw data which corresponds to only active 257 pixels; smaller or equal to pixelArraySize. */ 258 cam_rect_t active_array_size; 259 260 /* Maximum raw value output by sensor */ 261 int32_t white_level; 262 263 /* A fixed black level offset for each of the Bayer 264 mosaic channels */ 265 int32_t black_level_pattern[BLACK_LEVEL_PATTERN_CNT]; 266 267 /* Time taken before flash can fire again in nano secs */ 268 int64_t flash_charge_duration; 269 270 /* flash firing power */ 271 size_t supported_flash_firing_level_cnt; 272 cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX]; 273 274 /* Flash Firing Time */ 275 int64_t flash_firing_time; 276 277 /* Flash Ciolor Temperature */ 278 uint8_t flash_color_temp; 279 280 /* Flash max Energy */ 281 uint8_t flash_max_energy; 282 283 /* Maximum number of supported points in the tonemap 284 curve */ 285 int32_t max_tone_map_curve_points; 286 287 /* supported formats */ 288 size_t supported_scalar_format_cnt; 289 cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX]; 290 291 uint32_t max_face_detection_count; 292 uint8_t hw_analysis_supported; 293 294 uint8_t histogram_supported; 295 /* Number of histogram buckets supported */ 296 int32_t histogram_size; 297 /* Maximum value possible for a histogram bucket */ 298 int32_t max_histogram_count; 299 300 cam_dimension_t sharpness_map_size; 301 302 /* Maximum value possible for a sharpness map region */ 303 int32_t max_sharpness_map_value; 304 305 /*Autoexposure modes for camera 3 api*/ 306 size_t supported_ae_modes_cnt; 307 cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX]; 308 309 310 cam_sensitivity_range_t sensitivity_range; 311 int32_t max_analog_sensitivity; 312 313 /* picture sizes need scale*/ 314 cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX]; 315 size_t scale_picture_sizes_cnt; 316 cam_dimension_t scale_picture_sizes[MAX_SCALE_SIZES_CNT]; 317 318 uint8_t flash_available; 319 320 cam_rational_type_t base_gain_factor; /* sensor base gain factor */ 321 /* AF Bracketing info */ 322 cam_af_bracketing_t ubifocus_af_bracketing_need; 323 cam_af_bracketing_t refocus_af_bracketing_need; 324 /* opti Zoom info */ 325 cam_opti_zoom_t opti_zoom_settings_need; 326 /* still more info */ 327 cam_still_more_t stillmore_settings_need; 328 /* chroma flash info */ 329 cam_chroma_flash_t chroma_flash_settings_need; 330 331 cam_rational_type_t forward_matrix[3][3]; 332 cam_rational_type_t color_transform[3][3]; 333 334 uint8_t focus_dist_calibrated; 335 uint8_t supported_test_pattern_modes_cnt; 336 cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT]; 337 338 int64_t stall_durations[MAX_SIZES_CNT]; 339 340 cam_illuminat_t reference_illuminant1; 341 cam_illuminat_t reference_illuminant2; 342 343 int64_t jpeg_stall_durations[MAX_SIZES_CNT]; 344 int64_t raw16_stall_durations[MAX_SIZES_CNT]; 345 cam_rational_type_t forward_matrix1[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS]; 346 cam_rational_type_t forward_matrix2[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS]; 347 cam_rational_type_t color_transform1[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS]; 348 cam_rational_type_t color_transform2[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS]; 349 cam_rational_type_t calibration_transform1[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS]; 350 cam_rational_type_t calibration_transform2[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS]; 351 uint16_t isCacSupported; 352 353 cam_opaque_raw_format_t opaque_raw_fmt; 354 355 /* true Portrait info */ 356 cam_true_portrait_t true_portrait_settings_need; 357 358 /* Sensor type information */ 359 cam_sensor_type_t sensor_type; 360 361 cam_aberration_mode_t aberration_modes[CAM_COLOR_CORRECTION_ABERRATION_MAX]; 362 uint32_t aberration_modes_count; 363 364 /* Can the sensor timestamp be compared to 365 * timestamps from other sub-systems (gyro, accelerometer etc.) */ 366 uint8_t isTimestampCalibrated; 367 368 /* Analysis stream max supported size */ 369 cam_dimension_t analysis_max_res; 370 /* Analysis stream padding info */ 371 cam_padding_info_t analysis_padding_info; 372 /* Max size supported by ISP viewfinder path */ 373 cam_dimension_t max_viewfinder_size; 374 375 /* Analysis recommended size */ 376 cam_dimension_t analysis_recommended_res; 377 378 /* This is set to 'true' if sensor cannot guarantee per frame control */ 379 /* Default value of this capability is 'false' indicating per-frame */ 380 /* control is supported */ 381 uint8_t no_per_frame_control_support; 382 383 /* EIS information */ 384 uint8_t supported_is_types_cnt; 385 uint32_t supported_is_types[IS_TYPE_MAX]; 386 /*for each type, specify the margin needed. Margin will be 387 the decimal representation of a percentage 388 ex: 10% margin = 0.1 */ 389 float supported_is_type_margins[IS_TYPE_MAX]; 390 391 /* Max cpp batch size */ 392 uint8_t max_batch_bufs_supported; 393 } cam_capability_t; 394 395 typedef enum { 396 CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS, 397 CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE, 398 CAM_STREAM_PARAM_TYPE_SET_FLIP = CAM_INTF_PARM_STREAM_FLIP, 399 CAM_STREAM_PARAM_TYPE_GET_OUTPUT_CROP = CAM_INTF_PARM_GET_OUTPUT_CROP, 400 CAM_STREAM_PARAM_TYPE_GET_IMG_PROP = CAM_INTF_PARM_GET_IMG_PROP, 401 CAM_STREAM_PARAM_TYPE_MAX 402 } cam_stream_param_type_e; 403 404 typedef struct { 405 uint32_t buf_index; /* buf index to the source frame buffer that needs reprocess, 406 (assume buffer is already mapped)*/ 407 uint32_t frame_idx; /* frame id of source frame to be reprocessed */ 408 int32_t ret_val; /* return value from reprocess. Could have different meanings. 409 i.e., faceID in the case of face registration. */ 410 uint8_t meta_present; /* if there is meta data associated with this reprocess frame */ 411 uint32_t meta_stream_handle; /* meta data stream ID. only valid if meta_present != 0 */ 412 uint32_t meta_buf_index; /* buf index to meta data buffer. only valid if meta_present != 0 */ 413 414 /* opaque metadata required for reprocessing */ 415 int32_t private_data[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES]; 416 cam_rect_t crop_rect; 417 } cam_reprocess_param; 418 419 typedef struct { 420 uint32_t flip_mask; 421 } cam_flip_mode_t; 422 423 #define IMG_NAME_SIZE 32 424 typedef struct { 425 cam_rect_t crop; /* crop info for the image */ 426 cam_dimension_t input; /* input dimension of the image */ 427 cam_dimension_t output; /* output dimension of the image */ 428 char name[IMG_NAME_SIZE]; /* optional name of the ext*/ 429 cam_format_t format; /* image format */ 430 } cam_stream_img_prop_t; 431 432 typedef struct { 433 cam_stream_param_type_e type; 434 union { 435 cam_reprocess_param reprocess; /* do reprocess */ 436 cam_bundle_config_t bundleInfo; /* set bundle info*/ 437 cam_flip_mode_t flipInfo; /* flip mode */ 438 cam_crop_data_t outputCrop; /* output crop for current frame */ 439 cam_stream_img_prop_t imgProp; /* image properties of current frame */ 440 }; 441 } cam_stream_parm_buffer_t; 442 443 /* stream info */ 444 typedef struct { 445 /* stream ID from server */ 446 uint32_t stream_svr_id; 447 448 /* stream type */ 449 cam_stream_type_t stream_type; 450 451 /* image format */ 452 cam_format_t fmt; 453 454 /* image dimension */ 455 cam_dimension_t dim; 456 457 /* buffer plane information, will be calc based on stream_type, fmt, 458 dim, and padding_info(from stream config). Info including: 459 offset_x, offset_y, stride, scanline, plane offset */ 460 cam_stream_buf_plane_info_t buf_planes; 461 462 /* number of stream bufs will be allocated */ 463 uint32_t num_bufs; 464 465 /* streaming type */ 466 cam_streaming_mode_t streaming_mode; 467 468 /* num of frames needs to be generated. 469 * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */ 470 uint8_t num_of_burst; 471 472 /* num of frames in one batch. 473 * only valid when streaming_mode = CAM_STREAMING_MODE_BATCH */ 474 cam_stream_user_buf_info_t user_buf_info; 475 476 /* stream specific pp config */ 477 cam_pp_feature_config_t pp_config; 478 479 /* this section is valid if offline reprocess type stream */ 480 cam_stream_reproc_config_t reprocess_config; 481 482 cam_stream_parm_buffer_t parm_buf; /* stream based parameters */ 483 484 uint8_t dis_enable; 485 486 /* Image Stabilization type */ 487 cam_is_type_t is_type; 488 489 /* Signifies Secure stream mode */ 490 cam_stream_secure_t is_secure; 491 492 /* Preferred Performance mode */ 493 cam_perf_mode_t perf_mode; 494 495 /* if frames will not be received */ 496 uint8_t noFrameExpected; 497 } cam_stream_info_t; 498 499 /***************************************************************************** 500 * Code for Domain Socket Based Parameters * 501 ****************************************************************************/ 502 #define INCLUDE(PARAM_ID,DATATYPE,COUNT) \ 503 DATATYPE member_variable_##PARAM_ID[ COUNT ] 504 505 #define POINTER_OF_META(META_ID, TABLE_PTR) \ 506 ((NULL != TABLE_PTR) ? \ 507 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : (NULL)) 508 509 #define SIZE_OF_PARAM(META_ID, TABLE_PTR) \ 510 sizeof(TABLE_PTR->data.member_variable_##META_ID) 511 512 #define IF_META_AVAILABLE(META_TYPE, META_PTR_NAME, META_ID, TABLE_PTR) \ 513 META_TYPE *META_PTR_NAME = \ 514 (((NULL != TABLE_PTR) && (TABLE_PTR->is_valid[META_ID])) ? \ 515 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : \ 516 (NULL)); \ 517 if (NULL != META_PTR_NAME) \ 518 519 #define ADD_SET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID, DATA) \ 520 ((NULL != TABLE_PTR) ? \ 521 ((TABLE_PTR->data.member_variable_##META_ID[ 0 ] = DATA), \ 522 (TABLE_PTR->is_valid[META_ID] = 1), (0)) : \ 523 ((ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d", \ 524 __func__, __LINE__, TABLE_PTR, META_ID)), (-1))) \ 525 526 #define ADD_SET_PARAM_ARRAY_TO_BATCH(TABLE_PTR, META_ID, PDATA, COUNT, RCOUNT) \ 527 { \ 528 if ((NULL != TABLE_PTR) && \ 529 (0 < COUNT) && \ 530 ((sizeof(TABLE_PTR->data.member_variable_##META_ID) / \ 531 sizeof(TABLE_PTR->data.member_variable_##META_ID[ 0 ])) \ 532 >= COUNT)) { \ 533 for (size_t _i = 0; _i < COUNT ; _i++) { \ 534 TABLE_PTR->data.member_variable_##META_ID[ _i ] = PDATA [ _i ]; \ 535 } \ 536 TABLE_PTR->is_valid[META_ID] = 1; \ 537 RCOUNT = COUNT; \ 538 } else { \ 539 ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d COUNT:%zu", \ 540 __func__, __LINE__, TABLE_PTR, META_ID, COUNT); \ 541 RCOUNT = 0; \ 542 } \ 543 } 544 545 #define ADD_GET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID) \ 546 { \ 547 if (NULL != TABLE_PTR) { \ 548 TABLE_PTR->is_reqd[META_ID] = 1; \ 549 } else { \ 550 ALOGE("%s: %d, Unable to get metadata TABLE_PTR:%p META_ID:%d", \ 551 __func__, __LINE__, TABLE_PTR, META_ID); \ 552 } \ 553 } 554 555 #define READ_PARAM_ENTRY(TABLE_PTR, META_ID, DATA) \ 556 { \ 557 if (NULL != TABLE_PTR) { \ 558 DATA = TABLE_PTR->data.member_variable_##META_ID[ 0 ]; \ 559 } else { \ 560 ALOGE("%s: %d, Unable to read metadata TABLE_PTR:%p META_ID:%d", \ 561 __func__, __LINE__, TABLE_PTR, META_ID); \ 562 } \ 563 } 564 565 typedef struct { 566 /************************************************************************************** 567 * ID from (cam_intf_metadata_type_t) DATATYPE COUNT 568 **************************************************************************************/ 569 /* common between HAL1 and HAL3 */ 570 INCLUDE(CAM_INTF_META_HISTOGRAM, cam_hist_stats_t, 1); 571 INCLUDE(CAM_INTF_META_FACE_DETECTION, cam_face_detection_data_t, 1); 572 INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA, cam_auto_focus_data_t, 1); 573 INCLUDE(CAM_INTF_PARM_UPDATE_DEBUG_LEVEL, uint32_t, 1); 574 575 /* Specific to HAl1 */ 576 INCLUDE(CAM_INTF_META_CROP_DATA, cam_crop_data_t, 1); 577 INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE, int32_t, 1); 578 INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE, cam_frame_idx_range_t, 1); 579 INCLUDE(CAM_INTF_META_ASD_HDR_SCENE_DATA, cam_asd_hdr_scene_data_t, 1); 580 INCLUDE(CAM_INTF_META_ASD_SCENE_TYPE, int32_t, 1); 581 INCLUDE(CAM_INTF_META_CURRENT_SCENE, cam_scene_mode_type, 1); 582 INCLUDE(CAM_INTF_META_AWB_INFO, cam_awb_params_t, 1); 583 INCLUDE(CAM_INTF_META_FOCUS_POSITION, cam_focus_pos_info_t, 1); 584 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ISP, cam_chromatix_lite_isp_t, 1); 585 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_PP, cam_chromatix_lite_pp_t, 1); 586 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AE, cam_chromatix_lite_ae_stats_t, 1); 587 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AWB, cam_chromatix_lite_awb_stats_t, 1); 588 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AF, cam_chromatix_lite_af_stats_t, 1); 589 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ASD, cam_chromatix_lite_asd_stats_t, 1); 590 INCLUDE(CAM_INTF_BUF_DIVERT_INFO, cam_buf_divert_info_t, 1); 591 592 /* Specific to HAL3 */ 593 INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID, int32_t, 1); 594 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID, int32_t, 1); 595 INCLUDE(CAM_INTF_META_FRAME_DROPPED, cam_frame_dropped_t, 1); 596 INCLUDE(CAM_INTF_META_FRAME_NUMBER, uint32_t, 1); 597 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER, uint32_t, 1); 598 INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE, uint32_t, 1); 599 INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1); 600 INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1); 601 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1); 602 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1); 603 INCLUDE(CAM_INTF_META_AEC_ROI, cam_area_t, 1); 604 INCLUDE(CAM_INTF_META_AEC_STATE, uint32_t, 1); 605 INCLUDE(CAM_INTF_PARM_FOCUS_MODE, uint32_t, 1); 606 INCLUDE(CAM_INTF_PARM_MANUAL_FOCUS_POS, cam_manual_focus_parm_t, 1); 607 INCLUDE(CAM_INTF_META_AF_ROI, cam_area_t, 1); 608 INCLUDE(CAM_INTF_META_AF_STATE, uint32_t, 1); 609 INCLUDE(CAM_INTF_PARM_WHITE_BALANCE, int32_t, 1); 610 INCLUDE(CAM_INTF_META_AWB_REGIONS, cam_area_t, 1); 611 INCLUDE(CAM_INTF_META_AWB_STATE, uint32_t, 1); 612 INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK, uint32_t, 1); 613 INCLUDE(CAM_INTF_META_MODE, uint32_t, 1); 614 INCLUDE(CAM_INTF_META_EDGE_MODE, cam_edge_application_t, 1); 615 INCLUDE(CAM_INTF_META_FLASH_POWER, uint32_t, 1); 616 INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME, int64_t, 1); 617 INCLUDE(CAM_INTF_META_FLASH_MODE, uint32_t, 1); 618 INCLUDE(CAM_INTF_META_FLASH_STATE, int32_t, 1); 619 INCLUDE(CAM_INTF_META_HOTPIXEL_MODE, uint32_t, 1); 620 INCLUDE(CAM_INTF_META_LENS_APERTURE, float, 1); 621 INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY, float, 1); 622 INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH, float, 1); 623 INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE, float, 1); 624 INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE, float, 2); 625 INCLUDE(CAM_INTF_META_LENS_STATE, cam_af_lens_state_t, 1); 626 INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE, uint32_t, 1); 627 INCLUDE(CAM_INTF_META_LENS_FOCUS_STATE, uint32_t, 1); 628 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE, uint32_t, 1); 629 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, uint32_t, 1); 630 INCLUDE(CAM_INTF_META_SCALER_CROP_REGION, cam_crop_region_t, 1); 631 INCLUDE(CAM_INTF_META_SCENE_FLICKER, uint32_t, 1); 632 INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME, int64_t, 1); 633 INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION, int64_t, 1); 634 INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY, int32_t, 1); 635 INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP, int64_t, 1); 636 INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW, int64_t, 1); 637 INCLUDE(CAM_INTF_META_SHADING_MODE, uint32_t, 1); 638 INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE, uint32_t, 1); 639 INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE, uint32_t, 1); 640 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, uint32_t, 1); 641 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP, cam_sharpness_map_t, 3); 642 INCLUDE(CAM_INTF_META_TONEMAP_CURVES, cam_rgb_tonemap_curves, 1); 643 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP, cam_lens_shading_map_t, 1); 644 INCLUDE(CAM_INTF_META_AEC_INFO, cam_3a_params_t, 1); 645 INCLUDE(CAM_INTF_META_SENSOR_INFO, cam_sensor_params_t, 1); 646 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AE, cam_ae_exif_debug_t, 1); 647 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AWB, cam_awb_exif_debug_t, 1); 648 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AF, cam_af_exif_debug_t, 1); 649 INCLUDE(CAM_INTF_META_EXIF_DEBUG_ASD, cam_asd_exif_debug_t, 1); 650 INCLUDE(CAM_INTF_META_EXIF_DEBUG_STATS, cam_stats_buffer_exif_debug_t, 1); 651 INCLUDE(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE, cam_auto_scene_t, 1); 652 INCLUDE(CAM_INTF_PARM_EFFECT, uint32_t, 1); 653 /* Defining as int32_t so that this array is 4 byte aligned */ 654 INCLUDE(CAM_INTF_META_PRIVATE_DATA, int32_t, 655 MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES / 4); 656 657 /* Following are Params only and not metadata currently */ 658 INCLUDE(CAM_INTF_PARM_HAL_VERSION, int32_t, 1); 659 /* Shared between HAL1 and HAL3 */ 660 INCLUDE(CAM_INTF_PARM_ANTIBANDING, uint32_t, 1); 661 INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION, int32_t, 1); 662 INCLUDE(CAM_INTF_PARM_EV_STEP, cam_rational_type_t, 1); 663 INCLUDE(CAM_INTF_PARM_AEC_LOCK, uint32_t, 1); 664 INCLUDE(CAM_INTF_PARM_FPS_RANGE, cam_fps_range_t, 1); 665 INCLUDE(CAM_INTF_PARM_AWB_LOCK, uint32_t, 1); 666 INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE, uint32_t, 1); 667 INCLUDE(CAM_INTF_PARM_DIS_ENABLE, int32_t, 1); 668 INCLUDE(CAM_INTF_PARM_LED_MODE, int32_t, 1); 669 INCLUDE(CAM_INTF_META_LED_MODE_OVERRIDE, uint32_t, 1); 670 671 /* HAL1 specific */ 672 /* read only */ 673 INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP, int32_t, 1); 674 INCLUDE(CAM_INTF_PARM_EXPOSURE, int32_t, 1); 675 INCLUDE(CAM_INTF_PARM_SHARPNESS, int32_t, 1); 676 INCLUDE(CAM_INTF_PARM_CONTRAST, int32_t, 1); 677 INCLUDE(CAM_INTF_PARM_SATURATION, int32_t, 1); 678 INCLUDE(CAM_INTF_PARM_BRIGHTNESS, int32_t, 1); 679 INCLUDE(CAM_INTF_PARM_ISO, int32_t, 1); 680 INCLUDE(CAM_INTF_PARM_EXPOSURE_TIME, uint64_t, 1); 681 INCLUDE(CAM_INTF_PARM_ZOOM, int32_t, 1); 682 INCLUDE(CAM_INTF_PARM_ROLLOFF, int32_t, 1); 683 INCLUDE(CAM_INTF_PARM_MODE, int32_t, 1); 684 INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE, int32_t, 1); 685 INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE, int32_t, 1); 686 INCLUDE(CAM_INTF_PARM_AEC_ROI, cam_set_aec_roi_t, 1); 687 INCLUDE(CAM_INTF_PARM_AF_ROI, cam_roi_info_t, 1); 688 INCLUDE(CAM_INTF_PARM_SCE_FACTOR, int32_t, 1); 689 INCLUDE(CAM_INTF_PARM_FD, cam_fd_set_parm_t, 1); 690 INCLUDE(CAM_INTF_PARM_MCE, int32_t, 1); 691 INCLUDE(CAM_INTF_PARM_HFR, int32_t, 1); 692 INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION, int32_t, 1); 693 INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE, cam_denoise_param_t, 1); 694 INCLUDE(CAM_INTF_PARM_TEMPORAL_DENOISE, cam_denoise_param_t, 1); 695 INCLUDE(CAM_INTF_PARM_HISTOGRAM, int32_t, 1); 696 INCLUDE(CAM_INTF_PARM_ASD_ENABLE, int32_t, 1); 697 INCLUDE(CAM_INTF_PARM_RECORDING_HINT, int32_t, 1); 698 INCLUDE(CAM_INTF_PARM_HDR, cam_exp_bracketing_t, 1); 699 INCLUDE(CAM_INTF_PARM_FRAMESKIP, int32_t, 1); 700 INCLUDE(CAM_INTF_PARM_ZSL_MODE, int32_t, 1); 701 INCLUDE(CAM_INTF_PARM_HDR_NEED_1X, int32_t, 1); 702 INCLUDE(CAM_INTF_PARM_LOCK_CAF, int32_t, 1); 703 INCLUDE(CAM_INTF_PARM_VIDEO_HDR, int32_t, 1); 704 INCLUDE(CAM_INTF_PARM_SENSOR_HDR, int32_t, 1); 705 INCLUDE(CAM_INTF_PARM_VT, int32_t, 1); 706 INCLUDE(CAM_INTF_PARM_GET_CHROMATIX, tune_chromatix_t, 1); 707 INCLUDE(CAM_INTF_PARM_SET_RELOAD_CHROMATIX, tune_chromatix_t, 1); 708 INCLUDE(CAM_INTF_PARM_GET_AFTUNE, tune_autofocus_t, 1); 709 INCLUDE(CAM_INTF_PARM_SET_RELOAD_AFTUNE, tune_autofocus_t, 1); 710 INCLUDE(CAM_INTF_PARM_SET_AUTOFOCUSTUNING, tune_actuator_t, 1); 711 INCLUDE(CAM_INTF_PARM_SET_VFE_COMMAND, tune_cmd_t, 1); 712 INCLUDE(CAM_INTF_PARM_SET_PP_COMMAND, tune_cmd_t, 1); 713 INCLUDE(CAM_INTF_PARM_MAX_DIMENSION, cam_dimension_t, 1); 714 INCLUDE(CAM_INTF_PARM_RAW_DIMENSION, cam_dimension_t, 1); 715 INCLUDE(CAM_INTF_PARM_TINTLESS, int32_t, 1); 716 INCLUDE(CAM_INTF_PARM_WB_MANUAL, cam_manual_wb_parm_t, 1); 717 INCLUDE(CAM_INTF_PARM_CDS_MODE, int32_t, 1); 718 INCLUDE(CAM_INTF_PARM_EZTUNE_CMD, cam_eztune_cmd_data_t, 1); 719 INCLUDE(CAM_INTF_PARM_INT_EVT, cam_int_evt_params_t, 1); 720 INCLUDE(CAM_INTF_PARM_RDI_MODE, int32_t, 1); 721 INCLUDE(CAM_INTF_PARM_BURST_NUM, uint32_t, 1); 722 INCLUDE(CAM_INTF_PARM_RETRO_BURST_NUM, uint32_t, 1); 723 INCLUDE(CAM_INTF_PARM_BURST_LED_ON_PERIOD, uint32_t, 1); 724 INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE, int8_t, 1); 725 INCLUDE(CAM_INTF_PARM_TONE_MAP_MODE, uint32_t, 1); 726 727 /* HAL3 specific */ 728 INCLUDE(CAM_INTF_META_STREAM_INFO, cam_stream_size_info_t, 1); 729 INCLUDE(CAM_INTF_META_AEC_MODE, uint32_t, 1); 730 INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, cam_trigger_t, 1); 731 INCLUDE(CAM_INTF_META_AF_TRIGGER, cam_trigger_t, 1); 732 INCLUDE(CAM_INTF_META_CAPTURE_INTENT, uint32_t, 1); 733 INCLUDE(CAM_INTF_META_DEMOSAIC, int32_t, 1); 734 INCLUDE(CAM_INTF_META_SHARPNESS_STRENGTH, int32_t, 1); 735 INCLUDE(CAM_INTF_META_GEOMETRIC_MODE, uint32_t, 1); 736 INCLUDE(CAM_INTF_META_GEOMETRIC_STRENGTH, uint32_t, 1); 737 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE, uint32_t, 1); 738 INCLUDE(CAM_INTF_META_SHADING_STRENGTH, uint32_t, 1); 739 INCLUDE(CAM_INTF_META_TONEMAP_MODE, uint32_t, 1); 740 INCLUDE(CAM_INTF_META_STREAM_ID, cam_stream_ID_t, 1); 741 INCLUDE(CAM_INTF_PARM_STATS_DEBUG_MASK, uint32_t, 1); 742 INCLUDE(CAM_INTF_PARM_STATS_AF_PAAF, uint32_t, 1); 743 INCLUDE(CAM_INTF_PARM_FOCUS_BRACKETING, cam_af_bracketing_t, 1); 744 INCLUDE(CAM_INTF_PARM_FLASH_BRACKETING, cam_flash_bracketing_t, 1); 745 INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES, double, 3); 746 INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS, uint8_t, GPS_PROCESSING_METHOD_SIZE); 747 INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP, int64_t, 1); 748 INCLUDE(CAM_INTF_META_JPEG_ORIENTATION, int32_t, 1); 749 INCLUDE(CAM_INTF_META_JPEG_QUALITY, uint32_t, 1); 750 INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY, uint32_t, 1); 751 INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE, cam_dimension_t, 1); 752 INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA, cam_test_pattern_data_t, 1); 753 INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE, cam_profile_tone_curve, 1); 754 INCLUDE(CAM_INTF_META_OTP_WB_GRGB, float, 1); 755 INCLUDE(CAM_INTF_PARM_CAC, cam_aberration_mode_t, 1); 756 INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT, cam_neutral_col_point_t, 1); 757 INCLUDE(CAM_INTF_PARM_ROTATION, cam_rotation_info_t, 1); 758 INCLUDE(CAM_INTF_META_IMGLIB, cam_intf_meta_imglib_t, 1); 759 INCLUDE(CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, cam_capture_frame_config_t, 1); 760 INCLUDE(CAM_INTF_PARM_FLIP, int32_t, 1); 761 INCLUDE(CAM_INTF_META_USE_AV_TIMER, uint8_t, 1); 762 INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, float, 1); 763 } metadata_data_t; 764 765 /* Update clear_metadata_buffer() function when a new is_xxx_valid is added to 766 * or removed from this structure */ 767 typedef struct { 768 union{ 769 /* Hash table of 'is valid' flags */ 770 uint8_t is_valid[CAM_INTF_PARM_MAX]; 771 772 /* Hash table of 'is required' flags for the GET PARAM */ 773 uint8_t is_reqd[CAM_INTF_PARM_MAX]; 774 }; 775 metadata_data_t data; 776 /*Tuning Data */ 777 uint8_t is_tuning_params_valid; 778 tuning_params_t tuning_params; 779 780 /* Mobicat Params */ 781 uint8_t is_mobicat_aec_params_valid; 782 cam_3a_params_t mobicat_aec_params; 783 784 /* Stats 3A Debug Params */ 785 uint8_t is_statsdebug_ae_params_valid; 786 cam_ae_exif_debug_t statsdebug_ae_data; 787 788 uint8_t is_statsdebug_awb_params_valid; 789 cam_awb_exif_debug_t statsdebug_awb_data; 790 791 uint8_t is_statsdebug_af_params_valid; 792 cam_af_exif_debug_t statsdebug_af_data; 793 794 uint8_t is_statsdebug_asd_params_valid; 795 cam_asd_exif_debug_t statsdebug_asd_data; 796 797 uint8_t is_statsdebug_stats_params_valid; 798 cam_stats_buffer_exif_debug_t statsdebug_stats_buffer_data; 799 } metadata_buffer_t; 800 801 typedef metadata_buffer_t parm_buffer_t; 802 803 #ifdef __cplusplus 804 extern "C" { 805 #endif 806 807 /* Update this inline function when a new is_xxx_valid is added to 808 * or removed from metadata_buffer_t */ 809 static inline void clear_metadata_buffer(metadata_buffer_t *meta) 810 { 811 memset(meta->is_valid, 0, CAM_INTF_PARM_MAX); 812 meta->is_tuning_params_valid = 0; 813 meta->is_mobicat_aec_params_valid = 0; 814 meta->is_statsdebug_ae_params_valid = 0; 815 meta->is_statsdebug_awb_params_valid = 0; 816 meta->is_statsdebug_af_params_valid = 0; 817 meta->is_statsdebug_asd_params_valid = 0; 818 meta->is_statsdebug_stats_params_valid = 0; 819 } 820 821 #ifdef __cplusplus 822 } 823 #endif 824 825 #endif /* __QCAMERA_INTF_H__ */ 826