1 /* Copyright (c) 2012-2016, 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 // System dependencies
34 #include <string.h>
35 #include <media/msmb_isp.h>
36
37 // Camera dependencies
38 #include "cam_types.h"
39
40 #define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + MSM_CAMERA_PRIV_CMD_MAX)
41 typedef enum {
42 /* session based parameters */
43 CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE,
44 /* session based action: do auto focus.*/
45 CAM_PRIV_DO_AUTO_FOCUS,
46 /* session based action: cancel auto focus.*/
47 CAM_PRIV_CANCEL_AUTO_FOCUS,
48 /* session based action: prepare for snapshot.*/
49 CAM_PRIV_PREPARE_SNAPSHOT,
50 /* sync stream info.*/
51 CAM_PRIV_STREAM_INFO_SYNC,
52 /* stream based parameters*/
53 CAM_PRIV_STREAM_PARM,
54 /* start ZSL snapshot.*/
55 CAM_PRIV_START_ZSL_SNAPSHOT,
56 /* stop ZSL snapshot.*/
57 CAM_PRIV_STOP_ZSL_SNAPSHOT,
58 /* event for related sensors synchronization. */
59 CAM_PRIV_SYNC_RELATED_SENSORS,
60 /* flush */
61 CAM_PRIV_FLUSH
62 } cam_private_ioctl_enum_t;
63
64 typedef enum {
65 /* start syncing for related cameras */
66 CAM_SYNC_RELATED_SENSORS_ON = 1,
67 /* stop syncing for related cameras */
68 CAM_SYNC_RELATED_SENSORS_OFF
69 } cam_sync_related_sensors_control_t;
70
71 typedef enum {
72 /* Driving camera of the related camera sub-system */
73 /* Certain features are enabled only for primary camera
74 such as display mode for preview, autofocus etc
75 In certain configurations for eg. when optical zoom
76 limit is reached, Aux Camera would become
77 the driving camera and there will be role switch.*/
78 CAM_MODE_PRIMARY = 0,
79 /* Non-driving camera of the related camera sub-system
80 no display mode set for secondary camera */
81 CAM_MODE_SECONDARY
82 } cam_sync_mode_t;
83
84 /* Payload for sending bundling info to backend */
85 typedef struct {
86 cam_sync_related_sensors_control_t sync_control;
87 cam_sync_type_t type;
88 cam_sync_mode_t mode;
89 /* session Id of the other camera session
90 Linking will be done with this session in the
91 backend */
92 uint32_t related_sensor_session_id;
93 uint8_t is_frame_sync_enabled;
94 }cam_sync_related_sensors_event_info_t;
95
96 /* Related camera sensor specific calibration data */
97 typedef struct {
98 /* Focal length in pixels @ calibration resolution.*/
99 float normalized_focal_length;
100 /* Native sensor resolution W that was used to capture calibration image */
101 uint16_t native_sensor_resolution_width;
102 /* Native sensor resolution H that was used to capture calibration image */
103 uint16_t native_sensor_resolution_height;
104 /* Image size W used internally by calibration tool */
105 uint16_t calibration_sensor_resolution_width;
106 /* Image size H used internally by calibration tool */
107 uint16_t calibration_sensor_resolution_height;
108 /* Focal length ratio @ Calibration */
109 float focal_length_ratio;
110 }cam_related_sensor_calibration_data_t;
111
112 /* Related Camera System Calibration data
113 Calibration data for the entire related cam sub-system is
114 in a shared EEPROM. We have 2 fields which are specific to
115 each sensor followed by a set of common calibration of the
116 entire related cam system*/
117 typedef struct {
118 /* Version information */
119 uint32_t calibration_format_version;
120 /* Main Camera Sensor specific calibration */
121 cam_related_sensor_calibration_data_t main_cam_specific_calibration;
122 /* Aux Camera Sensor specific calibration */
123 cam_related_sensor_calibration_data_t aux_cam_specific_calibration;
124 /* Relative viewpoint matching matrix w.r.t Main */
125 float relative_rotation_matrix[RELCAM_CALIB_ROT_MATRIX_MAX];
126 /* Relative geometric surface description parameters */
127 float relative_geometric_surface_parameters[
128 RELCAM_CALIB_SURFACE_PARMS_MAX];
129 /* Relative offset of sensor center from optical axis along horizontal dimension */
130 float relative_principle_point_x_offset;
131 /* Relative offset of sensor center from optical axis along vertical dimension */
132 float relative_principle_point_y_offset;
133 /* 0=Main Camera is on the left of Aux; 1=Main Camera is on the right of Aux */
134 uint16_t relative_position_flag;
135 /* Camera separation in mm */
136 float relative_baseline_distance;
137 /* main sensor setting during cal: 0-none, 1-hor-mirror, 2-ver-flip, 3-both */
138 uint16_t main_sensor_mirror_flip_setting;
139 /* aux sensor setting during cal: 0-none, 1-hor-mirror, 2-ver-flip, 3-both */
140 uint16_t aux_sensor_mirror_flip_setting;
141 /* module orientation during cal: 0-sensors in landscape, 1-sensors in portrait */
142 uint16_t module_orientation_during_calibration;
143 /* cal images required rotation: 0-no, 1-90 degrees right, 2-90 degrees left */
144 uint16_t rotation_flag;
145 /* Reserved for future use */
146 float reserved[RELCAM_CALIB_RESERVED_MAX];
147 } cam_related_system_calibration_data_t;
148
149 typedef struct {
150 uint32_t default_sensor_flip;
151 uint32_t sensor_mount_angle;
152 cam_related_system_calibration_data_t otp_calibration_data;
153 } cam_jpeg_metadata_t;
154
155 /* capability struct definition for HAL 1*/
156 typedef struct{
157 cam_hal_version_t version;
158
159 cam_position_t position; /* sensor position: front, back */
160
161 uint8_t auto_hdr_supported;
162
163 uint16_t isWnrSupported;
164 /* supported iso modes */
165 size_t supported_iso_modes_cnt;
166 cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX];
167
168 /* supported flash modes */
169 size_t supported_flash_modes_cnt;
170 cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX];
171
172 size_t zoom_ratio_tbl_cnt; /* table size for zoom ratios */
173 uint32_t zoom_ratio_tbl[MAX_ZOOMS_CNT]; /* zoom ratios table */
174
175 /* supported effect modes */
176 size_t supported_effects_cnt;
177 cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX];
178
179 /* supported scene modes */
180 size_t supported_scene_modes_cnt;
181 cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX];
182
183 /* supported auto exposure modes */
184 size_t supported_aec_modes_cnt;
185 cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX];
186
187 size_t fps_ranges_tbl_cnt; /* fps ranges table size */
188 cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT]; /* fps ranges table */
189
190 /* supported antibanding modes */
191 size_t supported_antibandings_cnt;
192 cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX];
193
194 /* supported white balance modes */
195 size_t supported_white_balances_cnt;
196 cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX];
197
198 /* Capability list of supported insensor HDR types
199 * Backend is expected to fill in all the supported types and set appropriate
200 * count, see cam_sensor_hdr_type_t for valid types
201 */
202 size_t supported_sensor_hdr_types_cnt;
203 cam_sensor_hdr_type_t supported_sensor_hdr_types[CAM_SENSOR_HDR_MAX];
204
205 /* supported manual wb cct */
206 int32_t min_wb_cct;
207 int32_t max_wb_cct;
208
209 /* supported manual wb rgb gains */
210 float min_wb_gain;
211 float max_wb_gain;
212
213 /* supported focus modes */
214 size_t supported_focus_modes_cnt;
215 cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX];
216
217 /* supported manual focus position */
218 float min_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
219 float max_focus_pos[CAM_MANUAL_FOCUS_MODE_MAX];
220
221 int32_t exposure_compensation_min; /* min value of exposure compensation index */
222 int32_t exposure_compensation_max; /* max value of exposure compensation index */
223 int32_t exposure_compensation_default; /* default value of exposure compensation index */
224 float exposure_compensation_step;
225 cam_rational_type_t exp_compensation_step; /* exposure compensation step value */
226
227 uint8_t video_stablization_supported; /* flag id video stablization is supported */
228
229 size_t picture_sizes_tbl_cnt; /* picture sizes table size */
230 cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT]; /* picture sizes table */
231 /* The minimum frame duration that is supported for each
232 * resolution in availableProcessedSizes. Should correspond
233 * to the frame duration when only that processed stream
234 * is active, with all processing set to FAST */
235 int64_t picture_min_duration[MAX_SIZES_CNT];
236
237 /* capabilities specific to HAL 1 */
238
239 int32_t modes_supported; /* mask of modes supported: 2D, 3D */
240 uint32_t sensor_mount_angle; /* sensor mount angle */
241
242 float focal_length; /* focal length */
243 float hor_view_angle; /* horizontal view angle */
244 float ver_view_angle; /* vertical view angle */
245
246 size_t preview_sizes_tbl_cnt; /* preview sizes table size */
247 cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT]; /* preiew sizes table */
248
249 size_t video_sizes_tbl_cnt; /* video sizes table size */
250 cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT]; /* video sizes table */
251
252
253 size_t livesnapshot_sizes_tbl_cnt; /* livesnapshot sizes table size */
254 cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* livesnapshot sizes table */
255
256 size_t vhdr_livesnapshot_sizes_tbl_cnt; /* vhdr_livesnapshot sizes table size */
257 cam_dimension_t vhdr_livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* vhdr_livesnapshot sizes table */
258
259 size_t hfr_tbl_cnt; /* table size for HFR */
260 cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX]; /* HFR table */
261
262 size_t zzhdr_sizes_tbl_cnt; /* Number of resolutions in zzHDR mode*/
263 cam_dimension_t zzhdr_sizes_tbl[MAX_SIZES_CNT]; /* Table for ZZHDR supported sizes */
264
265 /* supported preview formats */
266 size_t supported_preview_fmt_cnt;
267 cam_format_t supported_preview_fmts[CAM_FORMAT_MAX];
268
269 /* supported picture formats */
270 size_t supported_picture_fmt_cnt;
271 cam_format_t supported_picture_fmts[CAM_FORMAT_MAX];
272
273 uint8_t max_downscale_factor;
274
275 /* dimension and supported output format of raw dump from camif */
276 size_t supported_raw_dim_cnt;
277 cam_dimension_t raw_dim[MAX_SIZES_CNT];
278 size_t supported_raw_fmt_cnt;
279 cam_format_t supported_raw_fmts[CAM_FORMAT_MAX];
280 /* The minimum frame duration that is supported for above
281 raw resolution */
282 int64_t raw_min_duration[MAX_SIZES_CNT];
283
284 /* 3A version*/
285 cam_q3a_version_t q3a_version;
286 /* supported focus algorithms */
287 size_t supported_focus_algos_cnt;
288 cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX];
289
290
291 uint8_t auto_wb_lock_supported; /* flag if auto white balance lock is supported */
292 uint8_t zoom_supported; /* flag if zoom is supported */
293 uint8_t smooth_zoom_supported; /* flag if smooth zoom is supported */
294 uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */
295 uint8_t video_snapshot_supported; /* flag if video snapshot is supported */
296
297 uint8_t max_num_roi; /* max number of roi can be detected */
298 uint8_t max_num_focus_areas; /* max num of focus areas */
299 uint8_t max_num_metering_areas; /* max num opf metering areas */
300 uint8_t max_zoom_step; /* max zoom step value */
301
302 /* QCOM specific control */
303 cam_control_range_t brightness_ctrl; /* brightness */
304 cam_control_range_t sharpness_ctrl; /* sharpness */
305 cam_control_range_t contrast_ctrl; /* contrast */
306 cam_control_range_t saturation_ctrl; /* saturation */
307 cam_control_range_t sce_ctrl; /* skintone enhancement factor */
308
309 /* QCOM HDR specific control. Indicates number of frames and exposure needs for the frames */
310 cam_hdr_bracketing_info_t hdr_bracketing_setting;
311
312 cam_feature_mask_t qcom_supported_feature_mask; /* mask of qcom specific features supported:
313 * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/
314 cam_padding_info_t padding_info; /* padding information from PP */
315 uint32_t min_num_pp_bufs; /* minimum number of buffers needed by postproc module */
316 cam_format_t rdi_mode_stream_fmt; /* stream format supported in rdi mode */
317
318 /* capabilities specific to HAL 3 */
319
320 float min_focus_distance;
321 float hyper_focal_distance;
322
323 float focal_lengths[CAM_FOCAL_LENGTHS_MAX];
324 uint8_t focal_lengths_count;
325
326 /* Needs to be regular f number instead of APEX */
327 float apertures[CAM_APERTURES_MAX];
328 uint8_t apertures_count;
329
330 float filter_densities[CAM_FILTER_DENSITIES_MAX];
331 uint8_t filter_densities_count;
332
333 uint8_t optical_stab_modes[CAM_OPT_STAB_MAX];
334 uint8_t optical_stab_modes_count;
335
336 cam_dimension_t lens_shading_map_size;
337
338 cam_dimension_t geo_correction_map_size;
339 float geo_correction_map[2 * 3 * CAM_MAX_MAP_WIDTH *
340 CAM_MAX_MAP_HEIGHT];
341
342 float lens_position[3];
343
344 /* nano seconds */
345 int64_t exposure_time_range[EXPOSURE_TIME_RANGE_CNT];
346
347 /* nano seconds */
348 int64_t max_frame_duration;
349
350 cam_color_filter_arrangement_t color_arrangement;
351 uint8_t num_color_channels;
352
353 /* parameters required to calculate S and O co-efficients */
354 double gradient_S;
355 double offset_S;
356 double gradient_O;
357 double offset_O;
358
359 float sensor_physical_size[SENSOR_PHYSICAL_SIZE_CNT];
360
361 /* Dimensions of full pixel array, possibly including
362 black calibration pixels */
363 cam_dimension_t pixel_array_size;
364 /* Area of raw data which corresponds to only active
365 pixels; smaller or equal to pixelArraySize. */
366 cam_rect_t active_array_size;
367
368 /* Maximum raw value output by sensor */
369 int32_t white_level;
370
371 /* A fixed black level offset for each of the Bayer
372 mosaic channels in RGGB order*/
373 int32_t black_level_pattern[BLACK_LEVEL_PATTERN_CNT];
374
375 /* Time taken before flash can fire again in nano secs */
376 int64_t flash_charge_duration;
377
378 /* flash firing power */
379 size_t supported_flash_firing_level_cnt;
380 cam_format_t supported_firing_levels[CAM_FLASH_FIRING_LEVEL_MAX];
381
382 /* Flash Firing Time */
383 int64_t flash_firing_time;
384
385 /* Flash Ciolor Temperature */
386 uint8_t flash_color_temp;
387
388 /* Flash max Energy */
389 uint8_t flash_max_energy;
390
391 /* Maximum number of supported points in the tonemap
392 curve */
393 int32_t max_tone_map_curve_points;
394
395 /* supported formats */
396 size_t supported_scalar_format_cnt;
397 cam_format_t supported_scalar_fmts[CAM_FORMAT_MAX];
398
399 uint32_t max_face_detection_count;
400
401 uint8_t histogram_supported;
402 /* Number of histogram buckets supported */
403 int32_t histogram_size;
404 /* Maximum value possible for a histogram bucket */
405 int32_t max_histogram_count;
406
407 cam_dimension_t sharpness_map_size;
408
409 /* Maximum value possible for a sharpness map region */
410 int32_t max_sharpness_map_value;
411
412 /*Autoexposure modes for camera 3 api*/
413 size_t supported_ae_modes_cnt;
414 cam_ae_mode_type supported_ae_modes[CAM_AE_MODE_MAX];
415
416
417 cam_sensitivity_range_t sensitivity_range;
418 int32_t max_analog_sensitivity;
419
420 /* ISP digital gain */
421 cam_sensitivity_range_t isp_sensitivity_range;
422
423 /* picture sizes need scale*/
424 cam_scene_mode_overrides_t scene_mode_overrides[CAM_SCENE_MODE_MAX];
425 size_t scale_picture_sizes_cnt;
426 cam_dimension_t scale_picture_sizes[MAX_SCALE_SIZES_CNT];
427
428 uint8_t flash_available;
429
430 cam_rational_type_t base_gain_factor; /* sensor base gain factor */
431 /* AF Bracketing info */
432 cam_af_bracketing_t ubifocus_af_bracketing_need;
433 cam_af_bracketing_t refocus_af_bracketing_need;
434 /* opti Zoom info */
435 cam_opti_zoom_t opti_zoom_settings_need;
436 /* still more info */
437 cam_still_more_t stillmore_settings_need;
438 /* chroma flash info */
439 cam_chroma_flash_t chroma_flash_settings_need;
440
441 cam_rational_type_t forward_matrix[3][3];
442 cam_rational_type_t color_transform[3][3];
443
444 uint8_t focus_dist_calibrated;
445 uint8_t supported_test_pattern_modes_cnt;
446 cam_test_pattern_mode_t supported_test_pattern_modes[MAX_TEST_PATTERN_CNT];
447
448 int64_t stall_durations[MAX_SIZES_CNT];
449
450 cam_illuminat_t reference_illuminant1;
451 cam_illuminat_t reference_illuminant2;
452
453 int64_t jpeg_stall_durations[MAX_SIZES_CNT];
454 int64_t raw16_stall_durations[MAX_SIZES_CNT];
455 cam_rational_type_t forward_matrix1[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
456 cam_rational_type_t forward_matrix2[FORWARD_MATRIX_ROWS][FORWARD_MATRIX_COLS];
457 cam_rational_type_t color_transform1[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
458 cam_rational_type_t color_transform2[COLOR_TRANSFORM_ROWS][COLOR_TRANSFORM_COLS];
459 cam_rational_type_t calibration_transform1[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
460 cam_rational_type_t calibration_transform2[CAL_TRANSFORM_ROWS][CAL_TRANSFORM_COLS];
461 uint16_t isCacSupported;
462
463 cam_opaque_raw_format_t opaque_raw_fmt;
464
465 /* true Portrait info */
466 cam_true_portrait_t true_portrait_settings_need;
467
468 /* Sensor type information */
469 cam_sensor_type_t sensor_type;
470
471 cam_aberration_mode_t aberration_modes[CAM_COLOR_CORRECTION_ABERRATION_MAX];
472 uint32_t aberration_modes_count;
473
474 /* Can the sensor timestamp be compared to
475 * timestamps from other sub-systems (gyro, accelerometer etc.) */
476 uint8_t isTimestampCalibrated;
477
478 /* Max size supported by ISP viewfinder path */
479 cam_dimension_t max_viewfinder_size;
480
481 /* Analysis buffer requirements */
482 cam_analysis_info_t analysis_info[CAM_ANALYSIS_INFO_MAX];
483
484 /* This is set to 'true' if sensor cannot guarantee per frame control */
485 /* Default value of this capability is 'false' indicating per-frame */
486 /* control is supported */
487 uint8_t no_per_frame_control_support;
488
489 /* EIS information */
490 uint8_t supported_is_types_cnt;
491 uint32_t supported_is_types[IS_TYPE_MAX];
492 /*for each type, specify the margin needed. Margin will be
493 the decimal representation of a percentage
494 ex: 10% margin = 0.1 */
495 float supported_is_type_margins[IS_TYPE_MAX];
496
497 /* Max cpp batch size */
498 uint8_t max_batch_bufs_supported;
499 uint32_t buf_alignment;
500 uint32_t min_stride;
501 uint32_t min_scanline;
502 uint8_t flash_dev_name[QCAMERA_MAX_FILEPATH_LENGTH];
503 uint8_t eeprom_version_info[MAX_EEPROM_VERSION_INFO_LEN];
504
505 /* maximum pixel bandwidth shared between cameras */
506 uint64_t max_pixel_bandwidth;
507
508 /* Array of K integers, where K%4==0,
509 as a list of rectangles in the pixelArray co-ord system
510 left, top, right, bottom */
511 int32_t optical_black_regions[MAX_OPTICAL_BLACK_REGIONS * 4];
512 /* Count is K/4 */
513 uint8_t optical_black_region_count;
514
515 /* hot pixel */
516 uint8_t hotPixel_mode;
517 uint32_t hotPixel_count;
518 cam_coordinate_type_t hotPixelMap[512];
519
520 /* supported instant capture/AEC convergence modes */
521 size_t supported_instant_aec_modes_cnt;
522 cam_aec_convergence_type supported_instant_aec_modes[CAM_AEC_CONVERGENCE_MAX];
523
524 /* Dual cam calibration data */
525 cam_related_system_calibration_data_t related_cam_calibration;
526 /* Whether camera timestamp is calibrated with sensor */
527 uint8_t timestamp_calibrated;
528 } cam_capability_t;
529
530 typedef enum {
531 CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS,
532 CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE,
533 CAM_STREAM_PARAM_TYPE_SET_FLIP = CAM_INTF_PARM_STREAM_FLIP,
534 CAM_STREAM_PARAM_TYPE_GET_OUTPUT_CROP = CAM_INTF_PARM_GET_OUTPUT_CROP,
535 CAM_STREAM_PARAM_TYPE_GET_IMG_PROP = CAM_INTF_PARM_GET_IMG_PROP,
536 CAM_STREAM_PARAM_TYPE_REQUEST_FRAMES = CAM_INTF_PARM_REQUEST_FRAMES,
537 CAM_STREAM_PARAM_TYPE_REQUEST_OPS_MODE = CAM_INTF_PARM_REQUEST_OPS_MODE,
538 CAM_STREAM_PARAM_TYPE_MAX
539 } cam_stream_param_type_e;
540
541 typedef struct {
542 uint32_t buf_index; /* buf index to the source frame buffer that needs reprocess,
543 (assume buffer is already mapped)*/
544 uint32_t frame_idx; /* frame id of source frame to be reprocessed */
545 int32_t ret_val; /* return value from reprocess. Could have different meanings.
546 i.e., faceID in the case of face registration. */
547 uint8_t meta_present; /* if there is meta data associated with this reprocess frame */
548 uint32_t meta_stream_handle; /* meta data stream ID. only valid if meta_present != 0 */
549 uint32_t meta_buf_index; /* buf index to meta data buffer. only valid if meta_present != 0 */
550
551 /* opaque metadata required for reprocessing */
552 int32_t private_data[MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES];
553 cam_rect_t crop_rect;
554 } cam_reprocess_param;
555
556 typedef struct {
557 uint32_t flip_mask;
558 } cam_flip_mode_t;
559
560 #define IMG_NAME_SIZE 32
561 typedef struct {
562 cam_rect_t crop; /* crop info for the image */
563 cam_dimension_t input; /* input dimension of the image */
564 cam_dimension_t output; /* output dimension of the image */
565 char name[IMG_NAME_SIZE]; /* optional name of the ext*/
566 cam_format_t format; /* image format */
567 } cam_stream_img_prop_t;
568
569 typedef struct {
570 uint8_t enableStream; /*0 � stop and 1-start */
571 } cam_request_frames;
572
573 typedef struct {
574 cam_stream_param_type_e type;
575 union {
576 cam_reprocess_param reprocess; /* do reprocess */
577 cam_bundle_config_t bundleInfo; /* set bundle info*/
578 cam_flip_mode_t flipInfo; /* flip mode */
579 cam_crop_data_t outputCrop; /* output crop for current frame */
580 cam_stream_img_prop_t imgProp; /* image properties of current frame */
581 cam_request_frames frameRequest; /*do TNR process*/
582 cam_perf_mode_t perf_mode; /*request operational mode*/
583 };
584 } cam_stream_parm_buffer_t;
585
586 /* stream info */
587 typedef struct {
588 /* stream ID from server */
589 uint32_t stream_svr_id;
590
591 /* stream type */
592 cam_stream_type_t stream_type;
593
594 /* image format */
595 cam_format_t fmt;
596
597 /* image dimension */
598 cam_dimension_t dim;
599
600 /* buffer plane information, will be calc based on stream_type, fmt,
601 dim, and padding_info(from stream config). Info including:
602 offset_x, offset_y, stride, scanline, plane offset */
603 cam_stream_buf_plane_info_t buf_planes;
604
605 /* number of stream bufs will be allocated */
606 uint32_t num_bufs;
607
608 /* streaming type */
609 cam_streaming_mode_t streaming_mode;
610
611 /* num of frames needs to be generated.
612 * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */
613 uint8_t num_of_burst;
614
615 /* num of frames in one batch.
616 * only valid when streaming_mode = CAM_STREAMING_MODE_BATCH */
617 cam_stream_user_buf_info_t user_buf_info;
618
619 /* stream specific pp config */
620 cam_pp_feature_config_t pp_config;
621
622 /* this section is valid if offline reprocess type stream */
623 cam_stream_reproc_config_t reprocess_config;
624
625 cam_stream_parm_buffer_t parm_buf; /* stream based parameters */
626
627 uint8_t dis_enable;
628
629 /* Image Stabilization type */
630 cam_is_type_t is_type;
631
632 /* Signifies Secure stream mode */
633 cam_stream_secure_t is_secure;
634
635 /* Preferred Performance mode */
636 cam_perf_mode_t perf_mode;
637
638 /* if frames will not be received */
639 uint8_t noFrameExpected;
640 } cam_stream_info_t;
641
642 /*****************************************************************************
643 * Code for Domain Socket Based Parameters *
644 ****************************************************************************/
645 #define INCLUDE(PARAM_ID,DATATYPE,COUNT) \
646 DATATYPE member_variable_##PARAM_ID[ COUNT ]
647
648 #define POINTER_OF_META(META_ID, TABLE_PTR) \
649 ((NULL != TABLE_PTR) ? \
650 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : (NULL))
651
652 #define SIZE_OF_PARAM(META_ID, TABLE_PTR) \
653 sizeof(TABLE_PTR->data.member_variable_##META_ID)
654
655 #define IF_META_AVAILABLE(META_TYPE, META_PTR_NAME, META_ID, TABLE_PTR) \
656 META_TYPE *META_PTR_NAME = \
657 (((NULL != TABLE_PTR) && (TABLE_PTR->is_valid[META_ID])) ? \
658 (&TABLE_PTR->data.member_variable_##META_ID[ 0 ]) : \
659 (NULL)); \
660 if (NULL != META_PTR_NAME) \
661
662 #define ADD_SET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID, DATA) \
663 ((NULL != TABLE_PTR) ? \
664 ((TABLE_PTR->data.member_variable_##META_ID[ 0 ] = DATA), \
665 (TABLE_PTR->is_valid[META_ID] = 1), (0)) : \
666 ((LOGE("Unable to set metadata TABLE_PTR:%p META_ID:%d", \
667 TABLE_PTR, META_ID)), (-1))) \
668
669 #define ADD_SET_PARAM_ARRAY_TO_BATCH(TABLE_PTR, META_ID, PDATA, COUNT, RCOUNT) \
670 { \
671 if ((NULL != TABLE_PTR) && \
672 (0 < COUNT) && \
673 ((sizeof(TABLE_PTR->data.member_variable_##META_ID) / \
674 sizeof(TABLE_PTR->data.member_variable_##META_ID[ 0 ])) \
675 >= COUNT)) { \
676 for (size_t _i = 0; _i < COUNT ; _i++) { \
677 TABLE_PTR->data.member_variable_##META_ID[ _i ] = PDATA [ _i ]; \
678 } \
679 TABLE_PTR->is_valid[META_ID] = 1; \
680 RCOUNT = COUNT; \
681 } else { \
682 LOGE("Unable to set metadata TABLE_PTR:%p META_ID:%d COUNT:%zu", \
683 TABLE_PTR, META_ID, COUNT); \
684 RCOUNT = 0; \
685 } \
686 }
687
688 #define ADD_GET_PARAM_ENTRY_TO_BATCH(TABLE_PTR, META_ID) \
689 { \
690 if (NULL != TABLE_PTR) { \
691 TABLE_PTR->is_reqd[META_ID] = 1; \
692 } else { \
693 LOGE("Unable to get metadata TABLE_PTR:%p META_ID:%d", \
694 TABLE_PTR, META_ID); \
695 } \
696 }
697
698 #define READ_PARAM_ENTRY(TABLE_PTR, META_ID, DATA) \
699 { \
700 if (NULL != TABLE_PTR) { \
701 DATA = TABLE_PTR->data.member_variable_##META_ID[ 0 ]; \
702 } else { \
703 LOGE("Unable to read metadata TABLE_PTR:%p META_ID:%d", \
704 TABLE_PTR, META_ID); \
705 } \
706 }
707
708 /************************************
709 * Custom parameter data definition
710 *************************************/
711 typedef struct {
712 /*CAM_CUSTOM_PARM_EXAMPLE is added to explain custom param procedure*/
713 INCLUDE(CAM_CUSTOM_PARM_EXAMPLE, int32_t, 1);
714 } custom_parm_data_t;
715
716 /************************************
717 * Custom Parameter buffer definition
718 *************************************/
719 typedef struct {
720 union {
721 /* Hash table of 'is valid' flags */
722 uint8_t is_valid[CAM_CUSTOM_PARM_MAX];
723
724 /* Hash table of 'is required' flags for the GET PARAM */
725 uint8_t is_reqd[CAM_CUSTOM_PARM_MAX];
726 };
727 custom_parm_data_t data;
728 } custom_parm_buffer_t;
729
730
731 typedef struct {
732 /**************************************************************************************
733 * ID from (cam_intf_metadata_type_t) DATATYPE COUNT
734 **************************************************************************************/
735 /* common between HAL1 and HAL3 */
736 INCLUDE(CAM_INTF_META_HISTOGRAM, cam_hist_stats_t, 1);
737 INCLUDE(CAM_INTF_META_FACE_DETECTION, cam_face_detection_data_t, 1);
738 INCLUDE(CAM_INTF_META_FACE_RECOG, cam_face_recog_data_t, 1);
739 INCLUDE(CAM_INTF_META_FACE_BLINK, cam_face_blink_data_t, 1);
740 INCLUDE(CAM_INTF_META_FACE_GAZE, cam_face_gaze_data_t, 1);
741 INCLUDE(CAM_INTF_META_FACE_SMILE, cam_face_smile_data_t, 1);
742 INCLUDE(CAM_INTF_META_FACE_LANDMARK, cam_face_landmarks_data_t, 1);
743 INCLUDE(CAM_INTF_META_FACE_CONTOUR, cam_face_contour_data_t, 1);
744 INCLUDE(CAM_INTF_META_AUTOFOCUS_DATA, cam_auto_focus_data_t, 1);
745 INCLUDE(CAM_INTF_META_CDS_DATA, cam_cds_data_t, 1);
746 INCLUDE(CAM_INTF_PARM_UPDATE_DEBUG_LEVEL, uint32_t, 1);
747
748 /* Specific to HAl1 */
749 INCLUDE(CAM_INTF_META_CROP_DATA, cam_crop_data_t, 1);
750 INCLUDE(CAM_INTF_META_PREP_SNAPSHOT_DONE, int32_t, 1);
751 INCLUDE(CAM_INTF_META_GOOD_FRAME_IDX_RANGE, cam_frame_idx_range_t, 1);
752 INCLUDE(CAM_INTF_META_ASD_HDR_SCENE_DATA, cam_asd_hdr_scene_data_t, 1);
753 INCLUDE(CAM_INTF_META_ASD_SCENE_INFO, cam_asd_decision_t, 1);
754 INCLUDE(CAM_INTF_META_CURRENT_SCENE, cam_scene_mode_type, 1);
755 INCLUDE(CAM_INTF_META_AWB_INFO, cam_awb_params_t, 1);
756 INCLUDE(CAM_INTF_META_FOCUS_POSITION, cam_focus_pos_info_t, 1);
757 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ISP, cam_chromatix_lite_isp_t, 1);
758 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_PP, cam_chromatix_lite_pp_t, 1);
759 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AE, cam_chromatix_lite_ae_stats_t, 1);
760 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AWB, cam_chromatix_lite_awb_stats_t, 1);
761 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_AF, cam_chromatix_lite_af_stats_t, 1);
762 INCLUDE(CAM_INTF_META_CHROMATIX_LITE_ASD, cam_chromatix_lite_asd_stats_t, 1);
763 INCLUDE(CAM_INTF_BUF_DIVERT_INFO, cam_buf_divert_info_t, 1);
764
765 /* Specific to HAL3 */
766 INCLUDE(CAM_INTF_META_FRAME_NUMBER_VALID, int32_t, 1);
767 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER_VALID, int32_t, 1);
768 INCLUDE(CAM_INTF_META_FRAME_DROPPED, cam_stream_ID_t, 1);
769 INCLUDE(CAM_INTF_META_FRAME_NUMBER, uint32_t, 1);
770 INCLUDE(CAM_INTF_META_URGENT_FRAME_NUMBER, uint32_t, 1);
771 INCLUDE(CAM_INTF_META_COLOR_CORRECT_MODE, uint32_t, 1);
772 INCLUDE(CAM_INTF_META_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1);
773 INCLUDE(CAM_INTF_META_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1);
774 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_TRANSFORM, cam_color_correct_matrix_t, 1);
775 INCLUDE(CAM_INTF_META_PRED_COLOR_CORRECT_GAINS, cam_color_correct_gains_t, 1);
776 INCLUDE(CAM_INTF_META_AEC_ROI, cam_area_t, 1);
777 INCLUDE(CAM_INTF_META_AEC_STATE, uint32_t, 1);
778 INCLUDE(CAM_INTF_PARM_FOCUS_MODE, uint32_t, 1);
779 INCLUDE(CAM_INTF_PARM_MANUAL_FOCUS_POS, cam_manual_focus_parm_t, 1);
780 INCLUDE(CAM_INTF_META_AF_ROI, cam_area_t, 1);
781 INCLUDE(CAM_INTF_META_AF_STATE, uint32_t, 1);
782 INCLUDE(CAM_INTF_PARM_WHITE_BALANCE, int32_t, 1);
783 INCLUDE(CAM_INTF_META_AWB_REGIONS, cam_area_t, 1);
784 INCLUDE(CAM_INTF_META_AWB_STATE, uint32_t, 1);
785 INCLUDE(CAM_INTF_META_BLACK_LEVEL_LOCK, uint32_t, 1);
786 INCLUDE(CAM_INTF_META_MODE, uint32_t, 1);
787 INCLUDE(CAM_INTF_META_EDGE_MODE, cam_edge_application_t, 1);
788 INCLUDE(CAM_INTF_META_FLASH_POWER, uint32_t, 1);
789 INCLUDE(CAM_INTF_META_FLASH_FIRING_TIME, int64_t, 1);
790 INCLUDE(CAM_INTF_META_FLASH_MODE, uint32_t, 1);
791 INCLUDE(CAM_INTF_META_FLASH_STATE, int32_t, 1);
792 INCLUDE(CAM_INTF_META_HOTPIXEL_MODE, uint32_t, 1);
793 INCLUDE(CAM_INTF_META_LENS_APERTURE, float, 1);
794 INCLUDE(CAM_INTF_META_LENS_FILTERDENSITY, float, 1);
795 INCLUDE(CAM_INTF_META_LENS_FOCAL_LENGTH, float, 1);
796 INCLUDE(CAM_INTF_META_LENS_FOCUS_DISTANCE, float, 1);
797 INCLUDE(CAM_INTF_META_LENS_FOCUS_RANGE, float, 2);
798 INCLUDE(CAM_INTF_META_LENS_STATE, cam_af_lens_state_t, 1);
799 INCLUDE(CAM_INTF_META_LENS_OPT_STAB_MODE, uint32_t, 1);
800 INCLUDE(CAM_INTF_META_VIDEO_STAB_MODE, uint32_t, 1);
801 INCLUDE(CAM_INTF_META_LENS_FOCUS_STATE, uint32_t, 1);
802 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_MODE, uint32_t, 1);
803 INCLUDE(CAM_INTF_META_NOISE_REDUCTION_STRENGTH, uint32_t, 1);
804 INCLUDE(CAM_INTF_META_SCALER_CROP_REGION, cam_crop_region_t, 1);
805 INCLUDE(CAM_INTF_META_SCENE_FLICKER, uint32_t, 1);
806 INCLUDE(CAM_INTF_META_SENSOR_EXPOSURE_TIME, int64_t, 1);
807 INCLUDE(CAM_INTF_META_SENSOR_FRAME_DURATION, int64_t, 1);
808 INCLUDE(CAM_INTF_META_SENSOR_SENSITIVITY, int32_t, 1);
809 INCLUDE(CAM_INTF_META_ISP_SENSITIVITY , int32_t, 1);
810 INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP, int64_t, 1);
811 INCLUDE(CAM_INTF_META_SENSOR_TIMESTAMP_AV, int64_t, 1);
812 INCLUDE(CAM_INTF_META_SENSOR_ROLLING_SHUTTER_SKEW, int64_t, 1);
813 INCLUDE(CAM_INTF_META_SHADING_MODE, uint32_t, 1);
814 INCLUDE(CAM_INTF_META_STATS_FACEDETECT_MODE, uint32_t, 1);
815 INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_MODE, uint32_t, 1);
816 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, uint32_t, 1);
817 INCLUDE(CAM_INTF_META_STATS_SHARPNESS_MAP, cam_sharpness_map_t, 3);
818 INCLUDE(CAM_INTF_META_TONEMAP_CURVES, cam_rgb_tonemap_curves, 1);
819 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP, cam_lens_shading_map_t, 1);
820 INCLUDE(CAM_INTF_META_AEC_INFO, cam_3a_params_t, 1);
821 INCLUDE(CAM_INTF_META_SENSOR_INFO, cam_sensor_params_t, 1);
822 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AE, cam_ae_exif_debug_t, 1);
823 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AWB, cam_awb_exif_debug_t, 1);
824 INCLUDE(CAM_INTF_META_EXIF_DEBUG_AF, cam_af_exif_debug_t, 1);
825 INCLUDE(CAM_INTF_META_EXIF_DEBUG_ASD, cam_asd_exif_debug_t, 1);
826 INCLUDE(CAM_INTF_META_EXIF_DEBUG_STATS, cam_stats_buffer_exif_debug_t, 1);
827 INCLUDE(CAM_INTF_META_EXIF_DEBUG_BESTATS, cam_bestats_buffer_exif_debug_t, 1);
828 INCLUDE(CAM_INTF_META_EXIF_DEBUG_BHIST, cam_bhist_buffer_exif_debug_t, 1);
829 INCLUDE(CAM_INTF_META_EXIF_DEBUG_3A_TUNING, cam_q3a_tuning_info_t, 1);
830 INCLUDE(CAM_INTF_META_ASD_SCENE_CAPTURE_TYPE, cam_auto_scene_t, 1);
831 INCLUDE(CAM_INTF_PARM_EFFECT, uint32_t, 1);
832 /* Defining as int32_t so that this array is 4 byte aligned */
833 INCLUDE(CAM_INTF_META_PRIVATE_DATA, int32_t,
834 MAX_METADATA_PRIVATE_PAYLOAD_SIZE_IN_BYTES / 4);
835
836 /* Following are Params only and not metadata currently */
837 INCLUDE(CAM_INTF_PARM_HAL_VERSION, int32_t, 1);
838 /* Shared between HAL1 and HAL3 */
839 INCLUDE(CAM_INTF_PARM_ANTIBANDING, uint32_t, 1);
840 INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION, int32_t, 1);
841 INCLUDE(CAM_INTF_PARM_EV_STEP, cam_rational_type_t, 1);
842 INCLUDE(CAM_INTF_PARM_AEC_LOCK, uint32_t, 1);
843 INCLUDE(CAM_INTF_PARM_FPS_RANGE, cam_fps_range_t, 1);
844 INCLUDE(CAM_INTF_PARM_AWB_LOCK, uint32_t, 1);
845 INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE, uint32_t, 1);
846 INCLUDE(CAM_INTF_PARM_DIS_ENABLE, int32_t, 1);
847 INCLUDE(CAM_INTF_PARM_LED_MODE, int32_t, 1);
848 INCLUDE(CAM_INTF_META_LED_MODE_OVERRIDE, uint32_t, 1);
849
850 /* dual camera specific params */
851 INCLUDE(CAM_INTF_PARM_RELATED_SENSORS_CALIBRATION, cam_related_system_calibration_data_t, 1);
852 INCLUDE(CAM_INTF_META_AF_FOCAL_LENGTH_RATIO, cam_focal_length_ratio_t, 1);
853 INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_SENSOR, cam_stream_crop_info_t, 1);
854 INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_CAMIF, cam_stream_crop_info_t, 1);
855 INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_ISP, cam_stream_crop_info_t, 1);
856 INCLUDE(CAM_INTF_META_SNAP_CROP_INFO_CPP, cam_stream_crop_info_t, 1);
857 INCLUDE(CAM_INTF_META_DCRF, cam_dcrf_result_t, 1);
858
859 /* HAL1 specific */
860 /* read only */
861 INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP, int32_t, 1);
862 INCLUDE(CAM_INTF_PARM_EXPOSURE, int32_t, 1);
863 INCLUDE(CAM_INTF_PARM_SHARPNESS, int32_t, 1);
864 INCLUDE(CAM_INTF_PARM_CONTRAST, int32_t, 1);
865 INCLUDE(CAM_INTF_PARM_SATURATION, int32_t, 1);
866 INCLUDE(CAM_INTF_PARM_BRIGHTNESS, int32_t, 1);
867 INCLUDE(CAM_INTF_PARM_ISO, cam_intf_parm_manual_3a_t, 1);
868 INCLUDE(CAM_INTF_PARM_EXPOSURE_TIME, cam_intf_parm_manual_3a_t, 1);
869 INCLUDE(CAM_INTF_PARM_ZOOM, int32_t, 1);
870 INCLUDE(CAM_INTF_PARM_ROLLOFF, int32_t, 1);
871 INCLUDE(CAM_INTF_PARM_MODE, int32_t, 1);
872 INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE, int32_t, 1);
873 INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE, int32_t, 1);
874 INCLUDE(CAM_INTF_PARM_AEC_ROI, cam_set_aec_roi_t, 1);
875 INCLUDE(CAM_INTF_PARM_AF_ROI, cam_roi_info_t, 1);
876 INCLUDE(CAM_INTF_PARM_SCE_FACTOR, int32_t, 1);
877 INCLUDE(CAM_INTF_PARM_FD, cam_fd_set_parm_t, 1);
878 INCLUDE(CAM_INTF_PARM_MCE, int32_t, 1);
879 INCLUDE(CAM_INTF_PARM_HFR, int32_t, 1);
880 INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION, int32_t, 1);
881 INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE, cam_denoise_param_t, 1);
882 INCLUDE(CAM_INTF_PARM_TEMPORAL_DENOISE, cam_denoise_param_t, 1);
883 INCLUDE(CAM_INTF_PARM_HISTOGRAM, int32_t, 1);
884 INCLUDE(CAM_INTF_PARM_ASD_ENABLE, int32_t, 1);
885 INCLUDE(CAM_INTF_PARM_RECORDING_HINT, int32_t, 1);
886 INCLUDE(CAM_INTF_PARM_HDR, cam_exp_bracketing_t, 1);
887 INCLUDE(CAM_INTF_PARM_FRAMESKIP, int32_t, 1);
888 INCLUDE(CAM_INTF_PARM_ZSL_MODE, int32_t, 1);
889 INCLUDE(CAM_INTF_PARM_HDR_NEED_1X, int32_t, 1);
890 INCLUDE(CAM_INTF_PARM_LOCK_CAF, int32_t, 1);
891 INCLUDE(CAM_INTF_PARM_VIDEO_HDR, int32_t, 1);
892 INCLUDE(CAM_INTF_PARM_SENSOR_HDR, cam_sensor_hdr_type_t, 1);
893 INCLUDE(CAM_INTF_PARM_VT, int32_t, 1);
894 INCLUDE(CAM_INTF_PARM_SET_AUTOFOCUSTUNING, tune_actuator_t, 1);
895 INCLUDE(CAM_INTF_PARM_SET_VFE_COMMAND, tune_cmd_t, 1);
896 INCLUDE(CAM_INTF_PARM_SET_PP_COMMAND, tune_cmd_t, 1);
897 INCLUDE(CAM_INTF_PARM_MAX_DIMENSION, cam_dimension_t, 1);
898 INCLUDE(CAM_INTF_PARM_RAW_DIMENSION, cam_dimension_t, 1);
899 INCLUDE(CAM_INTF_PARM_TINTLESS, int32_t, 1);
900 INCLUDE(CAM_INTF_PARM_WB_MANUAL, cam_manual_wb_parm_t, 1);
901 INCLUDE(CAM_INTF_PARM_CDS_MODE, int32_t, 1);
902 INCLUDE(CAM_INTF_PARM_EZTUNE_CMD, cam_eztune_cmd_data_t, 1);
903 INCLUDE(CAM_INTF_PARM_INT_EVT, cam_int_evt_params_t, 1);
904 INCLUDE(CAM_INTF_PARM_RDI_MODE, int32_t, 1);
905 INCLUDE(CAM_INTF_PARM_BURST_NUM, uint32_t, 1);
906 INCLUDE(CAM_INTF_PARM_RETRO_BURST_NUM, uint32_t, 1);
907 INCLUDE(CAM_INTF_PARM_BURST_LED_ON_PERIOD, uint32_t, 1);
908 INCLUDE(CAM_INTF_PARM_LONGSHOT_ENABLE, int8_t, 1);
909 INCLUDE(CAM_INTF_PARM_TONE_MAP_MODE, uint32_t, 1);
910 INCLUDE(CAM_INTF_META_TOUCH_AE_RESULT, int32_t, 1);
911 INCLUDE(CAM_INTF_PARM_DUAL_LED_CALIBRATION, int32_t, 1);
912 INCLUDE(CAM_INTF_PARM_ADV_CAPTURE_MODE, uint8_t, 1);
913
914 /* HAL3 specific */
915 INCLUDE(CAM_INTF_META_STREAM_INFO, cam_stream_size_info_t, 1);
916 INCLUDE(CAM_INTF_META_AEC_MODE, uint32_t, 1);
917 INCLUDE(CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, cam_trigger_t, 1);
918 INCLUDE(CAM_INTF_META_AF_TRIGGER, cam_trigger_t, 1);
919 INCLUDE(CAM_INTF_META_CAPTURE_INTENT, uint32_t, 1);
920 INCLUDE(CAM_INTF_META_DEMOSAIC, int32_t, 1);
921 INCLUDE(CAM_INTF_META_SHARPNESS_STRENGTH, int32_t, 1);
922 INCLUDE(CAM_INTF_META_GEOMETRIC_MODE, uint32_t, 1);
923 INCLUDE(CAM_INTF_META_GEOMETRIC_STRENGTH, uint32_t, 1);
924 INCLUDE(CAM_INTF_META_LENS_SHADING_MAP_MODE, uint32_t, 1);
925 INCLUDE(CAM_INTF_META_SHADING_STRENGTH, uint32_t, 1);
926 INCLUDE(CAM_INTF_META_TONEMAP_MODE, uint32_t, 1);
927 INCLUDE(CAM_INTF_META_STREAM_ID, cam_stream_ID_t, 1);
928 INCLUDE(CAM_INTF_PARM_STATS_DEBUG_MASK, uint32_t, 1);
929 INCLUDE(CAM_INTF_PARM_STATS_AF_PAAF, uint32_t, 1);
930 INCLUDE(CAM_INTF_PARM_FOCUS_BRACKETING, cam_af_bracketing_t, 1);
931 INCLUDE(CAM_INTF_PARM_FLASH_BRACKETING, cam_flash_bracketing_t, 1);
932 INCLUDE(CAM_INTF_META_JPEG_GPS_COORDINATES, double, 3);
933 INCLUDE(CAM_INTF_META_JPEG_GPS_PROC_METHODS, uint8_t, GPS_PROCESSING_METHOD_SIZE);
934 INCLUDE(CAM_INTF_META_JPEG_GPS_TIMESTAMP, int64_t, 1);
935 INCLUDE(CAM_INTF_META_JPEG_ORIENTATION, int32_t, 1);
936 INCLUDE(CAM_INTF_META_JPEG_QUALITY, uint32_t, 1);
937 INCLUDE(CAM_INTF_META_JPEG_THUMB_QUALITY, uint32_t, 1);
938 INCLUDE(CAM_INTF_META_JPEG_THUMB_SIZE, cam_dimension_t, 1);
939 INCLUDE(CAM_INTF_META_TEST_PATTERN_DATA, cam_test_pattern_data_t, 1);
940 INCLUDE(CAM_INTF_META_PROFILE_TONE_CURVE, cam_profile_tone_curve, 1);
941 INCLUDE(CAM_INTF_META_OTP_WB_GRGB, float, 1);
942 INCLUDE(CAM_INTF_META_IMG_HYST_INFO, cam_img_hysterisis_info_t, 1);
943 INCLUDE(CAM_INTF_META_CAC_INFO, cam_cac_info_t, 1);
944 INCLUDE(CAM_INTF_PARM_CAC, cam_aberration_mode_t, 1);
945 INCLUDE(CAM_INTF_META_NEUTRAL_COL_POINT, cam_neutral_col_point_t, 1);
946 INCLUDE(CAM_INTF_PARM_ROTATION, cam_rotation_info_t, 1);
947 INCLUDE(CAM_INTF_PARM_HW_DATA_OVERWRITE, cam_hw_data_overwrite_t, 1);
948 INCLUDE(CAM_INTF_META_IMGLIB, cam_intf_meta_imglib_t, 1);
949 INCLUDE(CAM_INTF_PARM_CAPTURE_FRAME_CONFIG, cam_capture_frame_config_t, 1);
950 INCLUDE(CAM_INTF_PARM_CUSTOM, custom_parm_buffer_t, 1);
951 INCLUDE(CAM_INTF_PARM_FLIP, int32_t, 1);
952 INCLUDE(CAM_INTF_META_USE_AV_TIMER, uint8_t, 1);
953 INCLUDE(CAM_INTF_META_EFFECTIVE_EXPOSURE_FACTOR, float, 1);
954 INCLUDE(CAM_INTF_META_LDAF_EXIF, uint32_t, 2);
955 INCLUDE(CAM_INTF_META_BLACK_LEVEL_SOURCE_PATTERN, cam_black_level_metadata_t, 1);
956 INCLUDE(CAM_INTF_META_BLACK_LEVEL_APPLIED_PATTERN, cam_black_level_metadata_t, 1);
957 INCLUDE(CAM_INTF_META_LOW_LIGHT, cam_low_light_mode_t, 1);
958 INCLUDE(CAM_INTF_META_IMG_DYN_FEAT, cam_dyn_img_data_t, 1);
959 INCLUDE(CAM_INTF_PARM_MANUAL_CAPTURE_TYPE, cam_manual_capture_type, 1);
960 INCLUDE(CAM_INTF_AF_STATE_TRANSITION, uint8_t, 1);
961 INCLUDE(CAM_INTF_PARM_INITIAL_EXPOSURE_INDEX, uint32_t, 1);
962 INCLUDE(CAM_INTF_PARM_INSTANT_AEC, uint8_t, 1);
963 INCLUDE(CAM_INTF_META_HYBRID_AE, uint8_t, 1);
964 INCLUDE(CAM_INTF_META_AF_SCENE_CHANGE, uint8_t, 1);
965 /* DevCamDebug metadata CAM_INTF.H */
966 INCLUDE(CAM_INTF_META_DEV_CAM_ENABLE, uint8_t, 1);
967 /* DevCamDebug metadata CAM_INTF.H AF */
968 INCLUDE(CAM_INTF_META_DEV_CAM_AF_LENS_POSITION, int32_t, 1);
969 INCLUDE(CAM_INTF_META_DEV_CAM_AF_TOF_CONFIDENCE, int32_t, 1);
970 INCLUDE(CAM_INTF_META_DEV_CAM_AF_TOF_DISTANCE, int32_t, 1);
971 INCLUDE(CAM_INTF_META_DEV_CAM_AF_LUMA, int32_t, 1);
972 INCLUDE(CAM_INTF_META_DEV_CAM_AF_HAF_STATE, int32_t, 1);
973 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_TARGET_POS, int32_t, 1);
974 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_CONFIDENCE, int32_t, 1);
975 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_PDAF_REFOCUS, int32_t, 1);
976 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_TARGET_POS, int32_t, 1);
977 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_CONFIDENCE, int32_t, 1);
978 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TOF_REFOCUS, int32_t, 1);
979 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TYPE_SELECT, int32_t, 1);
980 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_REFOCUS, int32_t, 1);
981 INCLUDE(CAM_INTF_META_DEV_CAM_AF_MONITOR_TARGET_POS, int32_t, 1);
982 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_TARGET_POS, int32_t, 1);
983 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_NEXT_POS, int32_t, 1);
984 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_NEAR_POS, int32_t, 1);
985 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_FAR_POS, int32_t, 1);
986 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_PDAF_CONFIDENCE, int32_t, 1);
987 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_TARGET_POS, int32_t, 1);
988 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_NEXT_POS, int32_t, 1);
989 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_NEAR_POS, int32_t, 1);
990 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_FAR_POS, int32_t, 1);
991 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TOF_CONFIDENCE, int32_t, 1);
992 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TYPE_SELECT, int32_t, 1);
993 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_NEXT_POS, int32_t, 1);
994 INCLUDE(CAM_INTF_META_DEV_CAM_AF_SEARCH_TARGET_POS, int32_t, 1);
995 /* DevCamDebug metadata CAM_INTF.H AEC */
996 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_TARGET_LUMA, int32_t, 1);
997 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_COMP_LUMA, int32_t, 1);
998 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_AVG_LUMA, int32_t, 1);
999 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_CUR_LUMA, int32_t, 1);
1000 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LINECOUNT, int32_t, 1);
1001 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_REAL_GAIN, float, 1);
1002 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_EXP_INDEX, int32_t, 1);
1003 INCLUDE(CAM_INTF_META_DEV_CAM_AEC_LUX_IDX, float, 1);
1004 /* DevCamDebug metadata CAM_INTF.H AWB */
1005 INCLUDE(CAM_INTF_META_DEV_CAM_AWB_R_GAIN, float, 1);
1006 INCLUDE(CAM_INTF_META_DEV_CAM_AWB_G_GAIN, float, 1);
1007 INCLUDE(CAM_INTF_META_DEV_CAM_AWB_B_GAIN, float, 1);
1008 INCLUDE(CAM_INTF_META_DEV_CAM_AWB_CCT, int32_t, 1);
1009 INCLUDE(CAM_INTF_META_DEV_CAM_AWB_DECISION, int32_t, 1);
1010 /* DevCamDebug metadata end */
1011 INCLUDE(CAM_INTF_META_ISP_POST_STATS_SENSITIVITY, float, 1);
1012 } metadata_data_t;
1013
1014 /* Update clear_metadata_buffer() function when a new is_xxx_valid is added to
1015 * or removed from this structure */
1016 typedef struct {
1017 union{
1018 /* Hash table of 'is valid' flags */
1019 uint8_t is_valid[CAM_INTF_PARM_MAX];
1020
1021 /* Hash table of 'is required' flags for the GET PARAM */
1022 uint8_t is_reqd[CAM_INTF_PARM_MAX];
1023 };
1024 metadata_data_t data;
1025 /*Tuning Data */
1026 uint8_t is_tuning_params_valid;
1027 tuning_params_t tuning_params;
1028
1029 /* Mobicat Params */
1030 uint8_t is_mobicat_aec_params_valid;
1031 cam_3a_params_t mobicat_aec_params;
1032
1033 /* Stats 3A Debug Params */
1034 uint8_t is_statsdebug_ae_params_valid;
1035 cam_ae_exif_debug_t statsdebug_ae_data;
1036
1037 uint8_t is_statsdebug_awb_params_valid;
1038 cam_awb_exif_debug_t statsdebug_awb_data;
1039
1040 uint8_t is_statsdebug_af_params_valid;
1041 cam_af_exif_debug_t statsdebug_af_data;
1042
1043 uint8_t is_statsdebug_asd_params_valid;
1044 cam_asd_exif_debug_t statsdebug_asd_data;
1045
1046 uint8_t is_statsdebug_stats_params_valid;
1047 cam_stats_buffer_exif_debug_t statsdebug_stats_buffer_data;
1048
1049 uint8_t is_statsdebug_bestats_params_valid;
1050 cam_bestats_buffer_exif_debug_t statsdebug_bestats_buffer_data;
1051
1052 uint8_t is_statsdebug_bhist_params_valid;
1053 cam_bhist_buffer_exif_debug_t statsdebug_bhist_data;
1054
1055 uint8_t is_statsdebug_3a_tuning_params_valid;
1056 cam_q3a_tuning_info_t statsdebug_3a_tuning_data;
1057
1058 } metadata_buffer_t;
1059
1060 typedef metadata_buffer_t parm_buffer_t;
1061
1062 #ifdef __cplusplus
1063 extern "C" {
1064 #endif
1065
1066 /* Update this inline function when a new is_xxx_valid is added to
1067 * or removed from metadata_buffer_t */
clear_metadata_buffer(metadata_buffer_t * meta)1068 static inline void clear_metadata_buffer(metadata_buffer_t *meta)
1069 {
1070 if (meta) {
1071 memset(meta->is_valid, 0, CAM_INTF_PARM_MAX);
1072 meta->is_tuning_params_valid = 0;
1073 meta->is_mobicat_aec_params_valid = 0;
1074 meta->is_statsdebug_ae_params_valid = 0;
1075 meta->is_statsdebug_awb_params_valid = 0;
1076 meta->is_statsdebug_af_params_valid = 0;
1077 meta->is_statsdebug_asd_params_valid = 0;
1078 meta->is_statsdebug_stats_params_valid = 0;
1079 meta->is_statsdebug_bestats_params_valid = 0;
1080 meta->is_statsdebug_bhist_params_valid = 0;
1081 meta->is_statsdebug_3a_tuning_params_valid = 0;
1082 }
1083 }
1084
1085 #ifdef __cplusplus
1086 }
1087 #endif
1088
1089 #endif /* __QCAMERA_INTF_H__ */
1090