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 /* 3A version*/ 174 cam_q3a_version_t q3a_version; 175 /* supported focus algorithms */ 176 size_t supported_focus_algos_cnt; 177 cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX]; 178 179 180 uint8_t auto_wb_lock_supported; /* flag if auto white balance lock is supported */ 181 uint8_t zoom_supported; /* flag if zoom is supported */ 182 uint8_t smooth_zoom_supported; /* flag if smooth zoom is supported */ 183 uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */ 184 uint8_t video_snapshot_supported; /* flag if video snapshot is supported */ 185 186 uint8_t max_num_roi; /* max number of roi can be detected */ 187 uint8_t max_num_focus_areas; /* max num of focus areas */ 188 uint8_t max_num_metering_areas; /* max num opf metering areas */ 189 uint8_t max_zoom_step; /* max zoom step value */ 190 191 /* QCOM specific control */ 192 cam_control_range_t brightness_ctrl; /* brightness */ 193 cam_control_range_t sharpness_ctrl; /* sharpness */ 194 cam_control_range_t contrast_ctrl; /* contrast */ 195 cam_control_range_t saturation_ctrl; /* saturation */ 196 cam_control_range_t sce_ctrl; /* skintone enhancement factor */ 197 198 /* QCOM HDR specific control. Indicates number of frames and exposure needs for the frames */ 199 cam_hdr_bracketing_info_t hdr_bracketing_setting; 200 201 uint32_t qcom_supported_feature_mask; /* mask of qcom specific features supported: 202 * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/ 203 cam_padding_info_t padding_info; /* padding information from PP */ 204 uint32_t min_num_pp_bufs; /* minimum number of buffers needed by postproc module */ 205 uint32_t min_required_pp_mask; /* min required pp feature masks for ZSL. 206 * depends on hardware limitation, i.e. for 8974, 207 * sharpness is required for all ZSL snapshot frames */ 208 cam_format_t rdi_mode_stream_fmt; /* stream format supported in rdi mode */ 209 210 /* capabilities specific to HAL 3 */ 211 212 float min_focus_distance; 213 float hyper_focal_distance; 214 215 float focal_lengths[CAM_FOCAL_LENGTHS_MAX]; 216 uint8_t focal_lengths_count; 217 218 /* Needs to be regular f number instead of APEX */ 219 float apertures[CAM_APERTURES_MAX]; 220 uint8_t apertures_count; 221 222 float filter_densities[CAM_FILTER_DENSITIES_MAX]; 223 uint8_t filter_densities_count; 224 225 uint8_t optical_stab_modes[CAM_OPT_STAB_MAX]; 226 uint8_t optical_stab_modes_count; 227 228 cam_dimension_t lens_shading_map_size; 229 float lens_shading_map[3 * CAM_MAX_MAP_WIDTH * 230 CAM_MAX_MAP_HEIGHT]; 231 232 cam_dimension_t geo_correction_map_size; 233 float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH * 234 CAM_MAX_MAP_HEIGHT]; 235 236 float lens_position[3]; 237 238 /* nano seconds */ 239 int64_t exposure_time_range[EXPOSURE_TIME_RANGE_CNT]; 240 241 /* nano seconds */ 242 int64_t max_frame_duration; 243 244 cam_color_filter_arrangement_t color_arrangement; 245 uint8_t num_color_channels; 246 247 /* parameters required to calculate S and O co-efficients */ 248 double gradient_S; 249 double offset_S; 250 double gradient_O; 251 double offset_O; 252 253 float sensor_physical_size[SENSOR_PHYSICAL_SIZE_CNT]; 254 255 /* Dimensions of full pixel array, possibly including 256 black calibration pixels */ 257 cam_dimension_t pixel_array_size; 258 /* Area of raw data which corresponds to only active 259 pixels; smaller or equal to pixelArraySize. */ 260 cam_rect_t active_array_size; 261 262 /* Maximum raw value output by sensor */ 263 int32_t white_level; 264 265 /* A fixed black level offset for each of the Bayer 266 mosaic channels */ 267 int32_t black_level_pattern[BLACK_LEVEL_PATTERN_CNT]; 268 269 /* Time taken before flash can fire again in nano secs */ 270 int64_t flash_charge_duration; 271 272 /* flash firing power */ 273 size_t supported_flash_firing_level_cnt; 274 cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX]; 275 276 /* Flash Firing Time */ 277 int64_t flash_firing_time; 278 279 /* Flash Ciolor Temperature */ 280 uint8_t flash_color_temp; 281 282 /* Flash max Energy */ 283 uint8_t flash_max_energy; 284 285 /* Maximum number of supported points in the tonemap 286 curve */ 287 int32_t max_tone_map_curve_points; 288 289 /* supported formats */ 290 size_t supported_scalar_format_cnt; 291 cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX]; 292 293 uint32_t max_face_detection_count; 294 uint8_t hw_analysis_supported; 295 296 uint8_t histogram_supported; 297 /* Number of histogram buckets supported */ 298 int32_t histogram_size; 299 /* Maximum value possible for a histogram bucket */ 300 int32_t max_histogram_count; 301 302 cam_dimension_t sharpness_map_size; 303 304 /* Maximum value possible for a sharpness map region */ 305 int32_t max_sharpness_map_value; 306 307 /*Autoexposure modes for camera 3 api*/ 308 size_t supported_ae_modes_cnt; 309 cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX]; 310 311 312 cam_sensitivity_range_t sensitivity_range; 313 int32_t max_analog_sensitivity; 314 315 /* picture sizes need scale*/ 316 cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX]; 317 size_t scale_picture_sizes_cnt; 318 cam_dimension_t scale_picture_sizes[MAX_SCALE_SIZES_CNT]; 319 320 uint8_t flash_available; 321 322 cam_rational_type_t base_gain_factor; /* sensor base gain factor */ 323 /* AF Bracketing info */ 324 cam_af_bracketing_t ubifocus_af_bracketing_need; 325 cam_af_bracketing_t refocus_af_bracketing_need; 326 /* opti Zoom info */ 327 cam_opti_zoom_t opti_zoom_settings_need; 328 /* still more info */ 329 cam_still_more_t stillmore_settings_need; 330 /* chroma flash info */ 331 cam_chroma_flash_t chroma_flash_settings_need; 332 333 cam_rational_type_t forward_matrix[3][3]; 334 cam_rational_type_t color_transform[3][3]; 335 336 uint8_t focus_dist_calibrated; 337 uint8_t supported_test_pattern_modes_cnt; 338 cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT]; 339 340 int64_t stall_durations[MAX_SIZES_CNT]; 341 342 cam_illuminat_t reference_illuminant1; 343 cam_illuminat_t reference_illuminant2; 344 345 int64_t jpeg_stall_durations[MAX_SIZES_CNT]; 346 int64_t raw16_stall_durations[MAX_SIZES_CNT]; 347 cam_rational_type_t forward_matrix1[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS]; 348 cam_rational_type_t forward_matrix2[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS]; 349 cam_rational_type_t color_transform1[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS]; 350 cam_rational_type_t color_transform2[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS]; 351 cam_rational_type_t calibration_transform1[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS]; 352 cam_rational_type_t calibration_transform2[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS]; 353 uint16_t isCacSupported; 354 355 cam_opaque_raw_format_t opaque_raw_fmt; 356 357 /* true Portrait info */ 358 cam_true_portrait_t true_portrait_settings_need; 359 360 /* Sensor type information */ 361 cam_sensor_type_t sensor_type; 362 363 cam_aberration_mode_t aberration_modes[CAM_COLOR_CORRECTION_ABERRATION_MAX]; 364 uint32_t aberration_modes_count; 365 366 /* Can the sensor timestamp be compared to 367 * timestamps from other sub-systems (gyro, accelerometer etc.) */ 368 uint8_t isTimestampCalibrated; 369 370 /* Analysis stream max supported size */ 371 cam_dimension_t analysis_max_res; 372 /* Analysis stream padding info */ 373 cam_padding_info_t analysis_padding_info; 374 /* Max size supported by ISP viewfinder path */ 375 cam_dimension_t max_viewfinder_size; 376 377 /* Analysis recommended size */ 378 cam_dimension_t analysis_recommended_res; 379 380 /* Analysis recommended format */ 381 cam_format_t analysis_recommended_format; 382 383 /* This is set to 'true' if sensor cannot guarantee per frame control */ 384 /* Default value of this capability is 'false' indicating per-frame */ 385 /* control is supported */ 386 uint8_t no_per_frame_control_support; 387 388 /* EIS information */ 389 uint8_t supported_is_types_cnt; 390 uint32_t supported_is_types[IS_TYPE_MAX]; 391 /*for each type, specify the margin needed. Margin will be 392 the decimal representation of a percentage 393 ex: 10% margin = 0.1 */ 394 float supported_is_type_margins[IS_TYPE_MAX]; 395 396 /* Max cpp batch size */ 397 uint8_t max_batch_bufs_supported; 398 uint8_t flash_dev_name[QCAMERA_MAX_FILEPATH_LENGTH]; 399 uint8_t eeprom_version_info[MAX_EEPROM_VERSION_INFO_LEN]; 400 401 /* maximum pixel bandwidth shared between cameras */ 402 uint64_t max_pixel_bandwidth; 403 404 /* Array of K integers, where K%4==0, 405 as a list of rectangles in the pixelArray co-ord system 406 left, top, right, bottom */ 407 int32_t optical_black_regions[MAX_OPTICAL_BLACK_REGIONS * 4]; 408 /* Count is K/4 */ 409 uint8_t optical_black_region_count; 410 411 /* Whether camera timestamp is calibrated with sensor */ 412 uint8_t timestamp_calibrated; 413 } cam_capability_t; 414 415 typedef enum { 416 CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS, 417 CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE, 418 CAM_STREAM_PARAM_TYPE_SET_FLIP = CAM_INTF_PARM_STREAM_FLIP, 419 CAM_STREAM_PARAM_TYPE_GET_OUTPUT_CROP = CAM_INTF_PARM_GET_OUTPUT_CROP, 420 CAM_STREAM_PARAM_TYPE_GET_IMG_PROP = CAM_INTF_PARM_GET_IMG_PROP, 421 CAM_STREAM_PARAM_TYPE_MAX 422 } cam_stream_param_type_e; 423 424 typedef struct { 425 uint32_t buf_index; /* buf index to the source frame buffer that needs reprocess, 426 (assume buffer is already mapped)*/ 427 uint32_t frame_idx; /* frame id of source frame to be reprocessed */ 428 int32_t ret_val; /* return value from reprocess. Could have different meanings. 429 i.e., faceID in the case of face registration. */ 430 uint8_t meta_present; /* if there is meta data associated with this reprocess frame */ 431 uint32_t meta_stream_handle; /* meta data stream ID. only valid if meta_present != 0 */ 432 uint32_t meta_buf_index; /* buf index to meta data buffer. only valid if meta_present != 0 */ 433 434 /* opaque metadata required for reprocessing */ 435 int32_t private_data[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES]; 436 cam_rect_t crop_rect; 437 } cam_reprocess_param; 438 439 typedef struct { 440 uint32_t flip_mask; 441 } cam_flip_mode_t; 442 443 #define IMG_NAME_SIZE 32 444 typedef struct { 445 cam_rect_t crop; /* crop info for the image */ 446 cam_dimension_t input; /* input dimension of the image */ 447 cam_dimension_t output; /* output dimension of the image */ 448 char name[IMG_NAME_SIZE]; /* optional name of the ext*/ 449 cam_format_t format; /* image format */ 450 } cam_stream_img_prop_t; 451 452 typedef struct { 453 cam_stream_param_type_e type; 454 union { 455 cam_reprocess_param reprocess; /* do reprocess */ 456 cam_bundle_config_t bundleInfo; /* set bundle info*/ 457 cam_flip_mode_t flipInfo; /* flip mode */ 458 cam_crop_data_t outputCrop; /* output crop for current frame */ 459 cam_stream_img_prop_t imgProp; /* image properties of current frame */ 460 }; 461 } cam_stream_parm_buffer_t; 462 463 /* stream info */ 464 typedef struct { 465 /* stream ID from server */ 466 uint32_t stream_svr_id; 467 468 /* stream type */ 469 cam_stream_type_t stream_type; 470 471 /* image format */ 472 cam_format_t fmt; 473 474 /* image dimension */ 475 cam_dimension_t dim; 476 477 /* buffer plane information, will be calc based on stream_type, fmt, 478 dim, and padding_info(from stream config). Info including: 479 offset_x, offset_y, stride, scanline, plane offset */ 480 cam_stream_buf_plane_info_t buf_planes; 481 482 /* number of stream bufs will be allocated */ 483 uint32_t num_bufs; 484 485 /* streaming type */ 486 cam_streaming_mode_t streaming_mode; 487 488 /* num of frames needs to be generated. 489 * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */ 490 uint8_t num_of_burst; 491 492 /* num of frames in one batch. 493 * only valid when streaming_mode = CAM_STREAMING_MODE_BATCH */ 494 cam_stream_user_buf_info_t user_buf_info; 495 496 /* stream specific pp config */ 497 cam_pp_feature_config_t pp_config; 498 499 /* this section is valid if offline reprocess type stream */ 500 cam_stream_reproc_config_t reprocess_config; 501 502 cam_stream_parm_buffer_t parm_buf; /* stream based parameters */ 503 504 uint8_t dis_enable; 505 506 /* Image Stabilization type */ 507 cam_is_type_t is_type; 508 509 /* Signifies Secure stream mode */ 510 cam_stream_secure_t is_secure; 511 512 /* Preferred Performance mode */ 513 cam_perf_mode_t perf_mode; 514 515 /* if frames will not be received */ 516 uint8_t noFrameExpected; 517 } cam_stream_info_t; 518 519 /***************************************************************************** 520 * Code for Domain Socket Based Parameters * 521 ****************************************************************************/ 522 #define INCLUDE(PARAM_ID,DATATYPE,COUNT) \ 523 DATATYPE member_variable_##PARAM_ID[ COUNT ] 524 525 #define POINTER_OF_META(META_ID, TABLE_PTR) \ 526 ((NULL != TABLE_PTR) ? \ 527 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : (NULL)) 528 529 #define SIZE_OF_PARAM(META_ID, TABLE_PTR) \ 530 sizeof(TABLE_PTR->data.member_variable_##META_ID) 531 532 #define IF_META_AVAILABLE(META_TYPE, META_PTR_NAME, META_ID, TABLE_PTR) \ 533 META_TYPE *META_PTR_NAME = \ 534 (((NULL != TABLE_PTR) && (TABLE_PTR->is_valid[META_ID])) ? \ 535 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : \ 536 (NULL)); \ 537 if (NULL != META_PTR_NAME) \ 538 539 #define ADD_SET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID, DATA) \ 540 ((NULL != TABLE_PTR) ? \ 541 ((TABLE_PTR->data.member_variable_##META_ID[ 0 ] = DATA), \ 542 (TABLE_PTR->is_valid[META_ID] = 1), (0)) : \ 543 ((ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d", \ 544 __func__, __LINE__, TABLE_PTR, META_ID)), (-1))) \ 545 546 #define ADD_SET_PARAM_ARRAY_TO_BATCH(TABLE_PTR, META_ID, PDATA, COUNT, RCOUNT) \ 547 { \ 548 if ((NULL != TABLE_PTR) && \ 549 (0 < COUNT) && \ 550 ((sizeof(TABLE_PTR->data.member_variable_##META_ID) / \ 551 sizeof(TABLE_PTR->data.member_variable_##META_ID[ 0 ])) \ 552 >= COUNT)) { \ 553 for (size_t _i = 0; _i < COUNT ; _i++) { \ 554 TABLE_PTR->data.member_variable_##META_ID[ _i ] = PDATA [ _i ]; \ 555 } \ 556 TABLE_PTR->is_valid[META_ID] = 1; \ 557 RCOUNT = COUNT; \ 558 } else { \ 559 ALOGE("%s: %d, Unable to set metadata TABLE_PTR:%p META_ID:%d COUNT:%zu", \ 560 __func__, __LINE__, TABLE_PTR, META_ID, COUNT); \ 561 RCOUNT = 0; \ 562 } \ 563 } 564 565 #define ADD_GET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID) \ 566 { \ 567 if (NULL != TABLE_PTR) { \ 568 TABLE_PTR->is_reqd[META_ID] = 1; \ 569 } else { \ 570 ALOGE("%s: %d, Unable to get metadata TABLE_PTR:%p META_ID:%d", \ 571 __func__, __LINE__, TABLE_PTR, META_ID); \ 572 } \ 573 } 574 575 #define READ_PARAM_ENTRY(TABLE_PTR, META_ID, DATA) \ 576 { \ 577 if (NULL != TABLE_PTR) { \ 578 DATA = TABLE_PTR->data.member_variable_##META_ID[ 0 ]; \ 579 } else { \ 580 ALOGE("%s: %d, Unable to read metadata TABLE_PTR:%p META_ID:%d", \ 581 __func__, __LINE__, TABLE_PTR, META_ID); \ 582 } \ 583 } 584 585 typedef struct { 586 /************************************************************************************** 587 * ID from (cam_intf_metadata_type_t) DATATYPE COUNT 588 **************************************************************************************/ 589 /* common between HAL1 and HAL3 */ 590 INCLUDE(CAM_INTF_META_HISTOGRAM, cam_hist_stats_t, 1); 591 INCLUDE(CAM_INTF_META_FACE_DETECTION, cam_face_detection_data_t, 1); 592 INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA, cam_auto_focus_data_t, 1); 593 INCLUDE(CAM_INTF_META_CDS_DATA, cam_cds_data_t, 1); 594 INCLUDE(CAM_INTF_PARM_UPDATE_DEBUG_LEVEL, uint32_t, 1); 595 596 /* Specific to HAl1 */ 597 INCLUDE(CAM_INTF_META_CROP_DATA, cam_crop_data_t, 1); 598 INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE, int32_t, 1); 599 INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE, cam_frame_idx_range_t, 1); 600 INCLUDE(CAM_INTF_META_ASD_HDR_SCENE_DATA, cam_asd_hdr_scene_data_t, 1); 601 INCLUDE(CAM_INTF_META_ASD_SCENE_TYPE, int32_t, 1); 602 INCLUDE(CAM_INTF_META_CURRENT_SCENE, cam_scene_mode_type, 1); 603 INCLUDE(CAM_INTF_META_AWB_INFO, cam_awb_params_t, 1); 604 INCLUDE(CAM_INTF_META_FOCUS_POSITION, cam_focus_pos_info_t, 1); 605 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ISP, cam_chromatix_lite_isp_t, 1); 606 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_PP, cam_chromatix_lite_pp_t, 1); 607 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AE, cam_chromatix_lite_ae_stats_t, 1); 608 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AWB, cam_chromatix_lite_awb_stats_t, 1); 609 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AF, cam_chromatix_lite_af_stats_t, 1); 610 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ASD, cam_chromatix_lite_asd_stats_t, 1); 611 INCLUDE(CAM_INTF_BUF_DIVERT_INFO, cam_buf_divert_info_t, 1); 612 613 /* Specific to HAL3 */ 614 INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID, int32_t, 1); 615 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID, int32_t, 1); 616 INCLUDE(CAM_INTF_META_FRAME_DROPPED, cam_frame_dropped_t, 1); 617 INCLUDE(CAM_INTF_META_FRAME_NUMBER, uint32_t, 1); 618 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER, uint32_t, 1); 619 INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE, uint32_t, 1); 620 INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1); 621 INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1); 622 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1); 623 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1); 624 INCLUDE(CAM_INTF_META_AEC_ROI, cam_area_t, 1); 625 INCLUDE(CAM_INTF_META_AEC_STATE, uint32_t, 1); 626 INCLUDE(CAM_INTF_PARM_FOCUS_MODE, uint32_t, 1); 627 INCLUDE(CAM_INTF_PARM_MANUAL_FOCUS_POS, cam_manual_focus_parm_t, 1); 628 INCLUDE(CAM_INTF_META_AF_ROI, cam_area_t, 1); 629 INCLUDE(CAM_INTF_META_AF_STATE, uint32_t, 1); 630 INCLUDE(CAM_INTF_PARM_WHITE_BALANCE, int32_t, 1); 631 INCLUDE(CAM_INTF_META_AWB_REGIONS, cam_area_t, 1); 632 INCLUDE(CAM_INTF_META_AWB_STATE, uint32_t, 1); 633 INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK, uint32_t, 1); 634 INCLUDE(CAM_INTF_META_MODE, uint32_t, 1); 635 INCLUDE(CAM_INTF_META_EDGE_MODE, cam_edge_application_t, 1); 636 INCLUDE(CAM_INTF_META_FLASH_POWER, uint32_t, 1); 637 INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME, int64_t, 1); 638 INCLUDE(CAM_INTF_META_FLASH_MODE, uint32_t, 1); 639 INCLUDE(CAM_INTF_META_FLASH_STATE, int32_t, 1); 640 INCLUDE(CAM_INTF_META_HOTPIXEL_MODE, uint32_t, 1); 641 INCLUDE(CAM_INTF_META_LENS_APERTURE, float, 1); 642 INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY, float, 1); 643 INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH, float, 1); 644 INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE, float, 1); 645 INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE, float, 2); 646 INCLUDE(CAM_INTF_META_LENS_STATE, cam_af_lens_state_t, 1); 647 INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE, uint32_t, 1); 648 INCLUDE(CAM_INTF_META_VIDEO_STAB_MODE, uint32_t, 1); 649 INCLUDE(CAM_INTF_META_LENS_FOCUS_STATE, uint32_t, 1); 650 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE, uint32_t, 1); 651 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, uint32_t, 1); 652 INCLUDE(CAM_INTF_META_SCALER_CROP_REGION, cam_crop_region_t, 1); 653 INCLUDE(CAM_INTF_META_SCENE_FLICKER, uint32_t, 1); 654 INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME, int64_t, 1); 655 INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION, int64_t, 1); 656 INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY, int32_t, 1); 657 INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP, int64_t, 1); 658 INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW, int64_t, 1); 659 INCLUDE(CAM_INTF_META_SHADING_MODE, uint32_t, 1); 660 INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE, uint32_t, 1); 661 INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE, uint32_t, 1); 662 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, uint32_t, 1); 663 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP, cam_sharpness_map_t, 3); 664 INCLUDE(CAM_INTF_META_TONEMAP_CURVES, cam_rgb_tonemap_curves, 1); 665 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP, cam_lens_shading_map_t, 1); 666 INCLUDE(CAM_INTF_META_AEC_INFO, cam_3a_params_t, 1); 667 INCLUDE(CAM_INTF_META_SENSOR_INFO, cam_sensor_params_t, 1); 668 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AE, cam_ae_exif_debug_t, 1); 669 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AWB, cam_awb_exif_debug_t, 1); 670 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AF, cam_af_exif_debug_t, 1); 671 INCLUDE(CAM_INTF_META_EXIF_DEBUG_ASD, cam_asd_exif_debug_t, 1); 672 INCLUDE(CAM_INTF_META_EXIF_DEBUG_STATS, cam_stats_buffer_exif_debug_t, 1); 673 INCLUDE(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE, cam_auto_scene_t, 1); 674 INCLUDE(CAM_INTF_PARM_EFFECT, uint32_t, 1); 675 /* Defining as int32_t so that this array is 4 byte aligned */ 676 INCLUDE(CAM_INTF_META_PRIVATE_DATA, int32_t, 677 MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES / 4); 678 679 /* Following are Params only and not metadata currently */ 680 INCLUDE(CAM_INTF_PARM_HAL_VERSION, int32_t, 1); 681 /* Shared between HAL1 and HAL3 */ 682 INCLUDE(CAM_INTF_PARM_ANTIBANDING, uint32_t, 1); 683 INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION, int32_t, 1); 684 INCLUDE(CAM_INTF_PARM_EV_STEP, cam_rational_type_t, 1); 685 INCLUDE(CAM_INTF_PARM_AEC_LOCK, uint32_t, 1); 686 INCLUDE(CAM_INTF_PARM_FPS_RANGE, cam_fps_range_t, 1); 687 INCLUDE(CAM_INTF_PARM_AWB_LOCK, uint32_t, 1); 688 INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE, uint32_t, 1); 689 INCLUDE(CAM_INTF_PARM_DIS_ENABLE, int32_t, 1); 690 INCLUDE(CAM_INTF_PARM_LED_MODE, int32_t, 1); 691 INCLUDE(CAM_INTF_META_LED_MODE_OVERRIDE, uint32_t, 1); 692 693 /* HAL1 specific */ 694 /* read only */ 695 INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP, int32_t, 1); 696 INCLUDE(CAM_INTF_PARM_EXPOSURE, int32_t, 1); 697 INCLUDE(CAM_INTF_PARM_SHARPNESS, int32_t, 1); 698 INCLUDE(CAM_INTF_PARM_CONTRAST, int32_t, 1); 699 INCLUDE(CAM_INTF_PARM_SATURATION, int32_t, 1); 700 INCLUDE(CAM_INTF_PARM_BRIGHTNESS, int32_t, 1); 701 INCLUDE(CAM_INTF_PARM_ISO, int32_t, 1); 702 INCLUDE(CAM_INTF_PARM_EXPOSURE_TIME, uint64_t, 1); 703 INCLUDE(CAM_INTF_PARM_ZOOM, int32_t, 1); 704 INCLUDE(CAM_INTF_PARM_ROLLOFF, int32_t, 1); 705 INCLUDE(CAM_INTF_PARM_MODE, int32_t, 1); 706 INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE, int32_t, 1); 707 INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE, int32_t, 1); 708 INCLUDE(CAM_INTF_PARM_AEC_ROI, cam_set_aec_roi_t, 1); 709 INCLUDE(CAM_INTF_PARM_AF_ROI, cam_roi_info_t, 1); 710 INCLUDE(CAM_INTF_PARM_SCE_FACTOR, int32_t, 1); 711 INCLUDE(CAM_INTF_PARM_FD, cam_fd_set_parm_t, 1); 712 INCLUDE(CAM_INTF_PARM_MCE, int32_t, 1); 713 INCLUDE(CAM_INTF_PARM_HFR, int32_t, 1); 714 INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION, int32_t, 1); 715 INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE, cam_denoise_param_t, 1); 716 INCLUDE(CAM_INTF_PARM_TEMPORAL_DENOISE, cam_denoise_param_t, 1); 717 INCLUDE(CAM_INTF_PARM_HISTOGRAM, int32_t, 1); 718 INCLUDE(CAM_INTF_PARM_ASD_ENABLE, int32_t, 1); 719 INCLUDE(CAM_INTF_PARM_RECORDING_HINT, int32_t, 1); 720 INCLUDE(CAM_INTF_PARM_HDR, cam_exp_bracketing_t, 1); 721 INCLUDE(CAM_INTF_PARM_FRAMESKIP, int32_t, 1); 722 INCLUDE(CAM_INTF_PARM_ZSL_MODE, int32_t, 1); 723 INCLUDE(CAM_INTF_PARM_HDR_NEED_1X, int32_t, 1); 724 INCLUDE(CAM_INTF_PARM_LOCK_CAF, int32_t, 1); 725 INCLUDE(CAM_INTF_PARM_VIDEO_HDR, int32_t, 1); 726 INCLUDE(CAM_INTF_PARM_SENSOR_HDR, int32_t, 1); 727 INCLUDE(CAM_INTF_PARM_VT, int32_t, 1); 728 INCLUDE(CAM_INTF_PARM_GET_CHROMATIX, tune_chromatix_t, 1); 729 INCLUDE(CAM_INTF_PARM_SET_RELOAD_CHROMATIX, tune_chromatix_t, 1); 730 INCLUDE(CAM_INTF_PARM_GET_AFTUNE, tune_autofocus_t, 1); 731 INCLUDE(CAM_INTF_PARM_SET_RELOAD_AFTUNE, tune_autofocus_t, 1); 732 INCLUDE(CAM_INTF_PARM_SET_AUTOFOCUSTUNING, tune_actuator_t, 1); 733 INCLUDE(CAM_INTF_PARM_SET_VFE_COMMAND, tune_cmd_t, 1); 734 INCLUDE(CAM_INTF_PARM_SET_PP_COMMAND, tune_cmd_t, 1); 735 INCLUDE(CAM_INTF_PARM_MAX_DIMENSION, cam_dimension_t, 1); 736 INCLUDE(CAM_INTF_PARM_RAW_DIMENSION, cam_dimension_t, 1); 737 INCLUDE(CAM_INTF_PARM_TINTLESS, int32_t, 1); 738 INCLUDE(CAM_INTF_PARM_WB_MANUAL, cam_manual_wb_parm_t, 1); 739 INCLUDE(CAM_INTF_PARM_CDS_MODE, int32_t, 1); 740 INCLUDE(CAM_INTF_PARM_EZTUNE_CMD, cam_eztune_cmd_data_t, 1); 741 INCLUDE(CAM_INTF_PARM_INT_EVT, cam_int_evt_params_t, 1); 742 INCLUDE(CAM_INTF_PARM_RDI_MODE, int32_t, 1); 743 INCLUDE(CAM_INTF_PARM_BURST_NUM, uint32_t, 1); 744 INCLUDE(CAM_INTF_PARM_RETRO_BURST_NUM, uint32_t, 1); 745 INCLUDE(CAM_INTF_PARM_BURST_LED_ON_PERIOD, uint32_t, 1); 746 INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE, int8_t, 1); 747 INCLUDE(CAM_INTF_PARM_TONE_MAP_MODE, uint32_t, 1); 748 749 /* HAL3 specific */ 750 INCLUDE(CAM_INTF_META_STREAM_INFO, cam_stream_size_info_t, 1); 751 INCLUDE(CAM_INTF_META_AEC_MODE, uint32_t, 1); 752 INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, cam_trigger_t, 1); 753 INCLUDE(CAM_INTF_META_AF_TRIGGER, cam_trigger_t, 1); 754 INCLUDE(CAM_INTF_META_CAPTURE_INTENT, uint32_t, 1); 755 INCLUDE(CAM_INTF_META_DEMOSAIC, int32_t, 1); 756 INCLUDE(CAM_INTF_META_SHARPNESS_STRENGTH, int32_t, 1); 757 INCLUDE(CAM_INTF_META_GEOMETRIC_MODE, uint32_t, 1); 758 INCLUDE(CAM_INTF_META_GEOMETRIC_STRENGTH, uint32_t, 1); 759 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE, uint32_t, 1); 760 INCLUDE(CAM_INTF_META_SHADING_STRENGTH, uint32_t, 1); 761 INCLUDE(CAM_INTF_META_TONEMAP_MODE, uint32_t, 1); 762 INCLUDE(CAM_INTF_META_STREAM_ID, cam_stream_ID_t, 1); 763 INCLUDE(CAM_INTF_PARM_STATS_DEBUG_MASK, uint32_t, 1); 764 INCLUDE(CAM_INTF_PARM_STATS_AF_PAAF, uint32_t, 1); 765 INCLUDE(CAM_INTF_PARM_FOCUS_BRACKETING, cam_af_bracketing_t, 1); 766 INCLUDE(CAM_INTF_PARM_FLASH_BRACKETING, cam_flash_bracketing_t, 1); 767 INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES, double, 3); 768 INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS, uint8_t, GPS_PROCESSING_METHOD_SIZE); 769 INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP, int64_t, 1); 770 INCLUDE(CAM_INTF_META_JPEG_ORIENTATION, int32_t, 1); 771 INCLUDE(CAM_INTF_META_JPEG_QUALITY, uint32_t, 1); 772 INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY, uint32_t, 1); 773 INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE, cam_dimension_t, 1); 774 INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA, cam_test_pattern_data_t, 1); 775 INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE, cam_profile_tone_curve, 1); 776 INCLUDE(CAM_INTF_META_OTP_WB_GRGB, float, 1); 777 INCLUDE(CAM_INTF_PARM_CAC, cam_aberration_mode_t, 1); 778 INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT, cam_neutral_col_point_t, 1); 779 INCLUDE(CAM_INTF_PARM_ROTATION, cam_rotation_info_t, 1); 780 INCLUDE(CAM_INTF_META_IMGLIB, cam_intf_meta_imglib_t, 1); 781 INCLUDE(CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, cam_capture_frame_config_t, 1); 782 INCLUDE(CAM_INTF_PARM_FLIP, int32_t, 1); 783 INCLUDE(CAM_INTF_META_USE_AV_TIMER, uint8_t, 1); 784 INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, float, 1); 785 INCLUDE(CAM_INTF_META_LDAF_EXIF, uint32_t, 2); 786 INCLUDE(CAM_INTF_META_BLACK_LEVEL_SOURCE_PATTERN, cam_black_level_metadata_t, 1); 787 INCLUDE(CAM_INTF_META_BLACK_LEVEL_APPLIED_PATTERN, cam_black_level_metadata_t, 1); 788 INCLUDE(CAM_INTF_META_DAEMON_RESTART, uint8_t, 1); 789 INCLUDE(CAM_INTF_META_HYBRID_AE, uint8_t, 1); 790 INCLUDE(CAM_INTF_META_ISP_DIGITAL_GAIN, float, 1); 791 } metadata_data_t; 792 793 /* Update clear_metadata_buffer() function when a new is_xxx_valid is added to 794 * or removed from this structure */ 795 typedef struct { 796 union{ 797 /* Hash table of 'is valid' flags */ 798 uint8_t is_valid[CAM_INTF_PARM_MAX]; 799 800 /* Hash table of 'is required' flags for the GET PARAM */ 801 uint8_t is_reqd[CAM_INTF_PARM_MAX]; 802 }; 803 metadata_data_t data; 804 /*Tuning Data */ 805 uint8_t is_tuning_params_valid; 806 tuning_params_t tuning_params; 807 808 /* Mobicat Params */ 809 uint8_t is_mobicat_aec_params_valid; 810 cam_3a_params_t mobicat_aec_params; 811 812 /* Stats 3A Debug Params */ 813 uint8_t is_statsdebug_ae_params_valid; 814 cam_ae_exif_debug_t statsdebug_ae_data; 815 816 uint8_t is_statsdebug_awb_params_valid; 817 cam_awb_exif_debug_t statsdebug_awb_data; 818 819 uint8_t is_statsdebug_af_params_valid; 820 cam_af_exif_debug_t statsdebug_af_data; 821 822 uint8_t is_statsdebug_asd_params_valid; 823 cam_asd_exif_debug_t statsdebug_asd_data; 824 825 uint8_t is_statsdebug_stats_params_valid; 826 cam_stats_buffer_exif_debug_t statsdebug_stats_buffer_data; 827 } metadata_buffer_t; 828 829 typedef metadata_buffer_t parm_buffer_t; 830 831 #ifdef __cplusplus 832 extern "C" { 833 #endif 834 835 /* Update this inline function when a new is_xxx_valid is added to 836 * or removed from metadata_buffer_t */ 837 static inline void clear_metadata_buffer(metadata_buffer_t *meta) 838 { 839 memset(meta->is_valid, 0, CAM_INTF_PARM_MAX); 840 meta->is_tuning_params_valid = 0; 841 meta->is_mobicat_aec_params_valid = 0; 842 meta->is_statsdebug_ae_params_valid = 0; 843 meta->is_statsdebug_awb_params_valid = 0; 844 meta->is_statsdebug_af_params_valid = 0; 845 meta->is_statsdebug_asd_params_valid = 0; 846 meta->is_statsdebug_stats_params_valid = 0; 847 } 848 849 #ifdef __cplusplus 850 } 851 #endif 852 853 #endif /* __QCAMERA_INTF_H__ */ 854