cam_intf.h revision 72594c0844ef2066190ecaddf73c9207a983ad90
1/* Copyright (c) 2012-2013, 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 <media/msmb_isp.h> 34#include "cam_types.h" 35 36#define CAM_PRIV_IOCTL_BASE (V4L2_CID_PRIVATE_BASE + 14) 37typedef enum { 38 CAM_PRIV_PARM = CAM_PRIV_IOCTL_BASE, /* session based parameters */ 39 CAM_PRIV_DO_AUTO_FOCUS, /* session based action: do auto focus */ 40 CAM_PRIV_CANCEL_AUTO_FOCUS, /* session based action: cancel auto focus */ 41 CAM_PRIV_PREPARE_SNAPSHOT, /* session based action: prepare for snapshot */ 42 CAM_PRIV_STREAM_INFO_SYNC, /* sync stream info */ 43 CAM_PRIV_STREAM_PARM, /* stream based parameters */ 44 CAM_PRIV_START_ZSL_SNAPSHOT, /* start ZSL snapshot */ 45 CAM_PRIV_STOP_ZSL_SNAPSHOT, /* stop ZSL snapshot */ 46} cam_private_ioctl_enum_t; 47 48/* capability struct definition */ 49typedef struct{ 50 int modes_supported; /* mask of modes supported: 2D, 3D */ 51 cam_position_t position; /* sensor position: front, back */ 52 uint32_t sensor_mount_angle; /* sensor mount angle */ 53 54 float focal_length; /* focal length */ 55 float hor_view_angle; /* horizontal view angle */ 56 float ver_view_angle; /* vertical view angle */ 57 58 uint8_t zoom_ratio_tbl_cnt; /* table size for zoom ratios */ 59 int zoom_ratio_tbl[MAX_ZOOMS_CNT]; /* zoom ratios table */ 60 61 uint8_t preview_sizes_tbl_cnt; /* preview sizes table size */ 62 cam_dimension_t preview_sizes_tbl[MAX_SIZES_CNT]; /* preiew sizes table */ 63 64 uint8_t video_sizes_tbl_cnt; /* video sizes table size */ 65 cam_dimension_t video_sizes_tbl[MAX_SIZES_CNT]; /* video sizes table */ 66 67 uint8_t picture_sizes_tbl_cnt; /* picture sizes table size */ 68 cam_dimension_t picture_sizes_tbl[MAX_SIZES_CNT]; /* picture sizes table */ 69 70 uint8_t fps_ranges_tbl_cnt; /* fps ranges table size */ 71 cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT]; /* fps ranges table */ 72 73 uint8_t livesnapshot_sizes_tbl_cnt; /* livesnapshot sizes table size */ 74 cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* livesnapshot sizes table */ 75 76 uint8_t hfr_tbl_cnt; /* table size for HFR */ 77 cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX]; /* HFR table */ 78 79 /* supported preview formats */ 80 uint8_t supported_preview_fmt_cnt; 81 cam_format_t supported_preview_fmts[CAM_FORMAT_MAX]; 82 83 /* supported picture formats */ 84 uint8_t supported_picture_fmt_cnt; 85 cam_format_t supported_picture_fmts[CAM_FORMAT_MAX]; 86 87 /* dimension and supported output format of raw dump from camif */ 88 cam_dimension_t raw_dim; 89 uint8_t supported_raw_fmt_cnt; 90 cam_format_t supported_raw_fmts[CAM_FORMAT_MAX]; 91 92 /* supported effect modes */ 93 uint8_t supported_effects_cnt; 94 cam_effect_mode_type supported_effects[CAM_EFFECT_MODE_MAX]; 95 96 /* supported white balance modes */ 97 uint8_t supported_white_balances_cnt; 98 cam_wb_mode_type supported_white_balances[CAM_WB_MODE_MAX]; 99 100 /* supported antibanding modes */ 101 uint8_t supported_antibandings_cnt; 102 cam_antibanding_mode_type supported_antibandings[CAM_ANTIBANDING_MODE_MAX]; 103 104 /* supported scene modes */ 105 uint8_t supported_scene_modes_cnt; 106 cam_scene_mode_type supported_scene_modes[CAM_SCENE_MODE_MAX]; 107 108 /* supported flash modes */ 109 uint8_t supported_flash_modes_cnt; 110 cam_flash_mode_t supported_flash_modes[CAM_FLASH_MODE_MAX]; 111 112 /* supported focus modes */ 113 uint8_t supported_focus_modes_cnt; 114 cam_focus_mode_type supported_focus_modes[CAM_FOCUS_MODE_MAX]; 115 116 /* supported iso modes */ 117 uint8_t supported_iso_modes_cnt; 118 cam_iso_mode_type supported_iso_modes[CAM_ISO_MODE_MAX]; 119 120 /* supported auto exposure modes */ 121 uint8_t supported_aec_modes_cnt; 122 cam_auto_exposure_mode_type supported_aec_modes[CAM_AEC_MODE_MAX]; 123 124 /* supported focus algorithms */ 125 uint8_t supported_focus_algos_cnt; 126 cam_focus_algorithm_type supported_focus_algos[CAM_FOCUS_ALGO_MAX]; 127 128 int exposure_compensation_min; /* min value of exposure compensation index */ 129 int exposure_compensation_max; /* max value of exposure compensation index */ 130 int exposure_compensation_default; /* default value of exposure compensation index */ 131 float exposure_compensation_step; /* exposure compensation step value */ 132 133 uint8_t auto_wb_lock_supported; /* flag if auto white balance lock is supported */ 134 uint8_t zoom_supported; /* flag if zoom is supported */ 135 uint8_t smooth_zoom_supported; /* flag if smooth zoom is supported */ 136 uint8_t auto_exposure_lock_supported; /* flag if auto exposure lock is supported */ 137 uint8_t video_snapshot_supported; /* flag if video snapshot is supported */ 138 uint8_t video_stablization_supported; /* flag id video stablization is supported */ 139 140 uint8_t max_num_roi; /* max number of roi can be detected */ 141 uint8_t max_num_focus_areas; /* max num of focus areas */ 142 uint8_t max_num_metering_areas; /* max num opf metering areas */ 143 uint8_t max_zoom_step; /* max zoom step value */ 144 145 /* QCOM specific control */ 146 cam_control_range_t brightness_ctrl; /* brightness */ 147 cam_control_range_t sharpness_ctrl; /* sharpness */ 148 cam_control_range_t contrast_ctrl; /* contrast */ 149 cam_control_range_t saturation_ctrl; /* saturation */ 150 cam_control_range_t sce_ctrl; /* skintone enhancement factor */ 151 152 uint32_t qcom_supported_feature_mask; /* mask of qcom specific features supported: 153 * such as CAM_QCOM_FEATURE_SUPPORTED_FACE_DETECTION*/ 154 cam_padding_info_t padding_info; /* padding information from PP */ 155 int8_t min_num_hdr_bufs; /* minimum number of buffers needed for HDR by imaging module */ 156 int8_t min_num_pp_bufs; /* minimum number of buffers needed by postproc module */ 157 uint32_t min_required_pp_mask; /* min required pp feature masks for ZSL. 158 * depends on hardware limitation, i.e. for 8974, 159 * sharpness is required for all ZSL snapshot frames */ 160} cam_capability_t; 161 162typedef enum { 163 CAM_STREAM_PARAM_TYPE_DO_REPROCESS = CAM_INTF_PARM_DO_REPROCESS, 164 CAM_STREAM_PARAM_TYPE_SET_BUNDLE_INFO = CAM_INTF_PARM_SET_BUNDLE, 165 CAM_STREAM_PARAM_TYPE_MAX 166} cam_stream_param_type_e; 167 168typedef struct { 169 uint8_t buf_index; /* buf index to the source frame buffer that needs reprocess, 170 (assume buffer is already mapped)*/ 171 uint32_t frame_idx; /* frame id of source frame to be reprocessed */ 172 int32_t ret_val; /* return value from reprocess. Could have different meanings. 173 i.e., faceID in the case of face registration. */ 174 uint8_t meta_present; /* if there is meta data associated with this reprocess frame */ 175 uint32_t meta_stream_handle; /* meta data stream ID. only valid if meta_present != 0 */ 176 uint8_t meta_buf_index; /* buf index to meta data buffer. only valid if meta_present != 0 */ 177} cam_reprocess_param; 178 179typedef struct { 180 cam_stream_param_type_e type; 181 union { 182 cam_reprocess_param reprocess; /* do reprocess */ 183 cam_bundle_config_t bundleInfo; /* set bundle info*/ 184 }; 185} cam_stream_parm_buffer_t; 186 187/* stream info */ 188typedef struct { 189 /* stream ID from server */ 190 uint32_t stream_svr_id; 191 192 /* stream type */ 193 cam_stream_type_t stream_type; 194 195 /* image format */ 196 cam_format_t fmt; 197 198 /* image dimension */ 199 cam_dimension_t dim; 200 201 /* buffer plane information, will be calc based on stream_type, fmt, 202 dim, and padding_info(from stream config). Info including: 203 offset_x, offset_y, stride, scanline, plane offset */ 204 cam_stream_buf_plane_info_t buf_planes; 205 206 /* streaming type */ 207 cam_streaming_mode_t streaming_mode; 208 /* num of frames needs to be generated. 209 * only valid when streaming_mode = CAM_STREAMING_MODE_BURST */ 210 uint8_t num_of_burst; 211 212 /* stream specific pp config */ 213 cam_pp_feature_config_t pp_config; 214 215 /* this section is valid if offline reprocess type stream */ 216 cam_stream_reproc_config_t reprocess_config; 217 218 cam_stream_parm_buffer_t parm_buf; /* stream based parameters */ 219} cam_stream_info_t; 220 221/***************************************************************************** 222 * Code for Domain Socket Based Parameters * 223 ****************************************************************************/ 224 225#define POINTER_OF(PARAM_ID,TABLE_PTR) \ 226 (&(TABLE_PTR->entry[PARAM_ID].data)) 227 228#define GET_FIRST_PARAM_ID(TABLE_PTR) \ 229 (TABLE_PTR->first_flagged_entry) 230 231#define SET_FIRST_PARAM_ID(TABLE_PTR,PARAM_ID) \ 232 TABLE_PTR->first_flagged_entry=PARAM_ID 233 234#define GET_NEXT_PARAM_ID(CURRENT_PARAM_ID,TABLE_PTR) \ 235 (TABLE_PTR->entry[CURRENT_PARAM_ID].next_flagged_entry) 236 237#define SET_NEXT_PARAM_ID(CURRENT_PARAM_ID,TABLE_PTR,NEXT_PARAM_ID) \ 238 TABLE_PTR->entry[CURRENT_PARAM_ID].next_flagged_entry=NEXT_PARAM_ID; 239 240#define INCLUDE(PARAM_ID,DATATYPE,COUNT) \ 241 DATATYPE member_variable_##PARAM_ID[ COUNT ] 242 243typedef union { 244/************************************************************************************** 245 * ID from (cam_intf_parm_type_t) DATATYPE COUNT 246 **************************************************************************************/ 247 INCLUDE(CAM_INTF_PARM_QUERY_FLASH4SNAP, int32_t, 1); //read only 248 249 INCLUDE(CAM_INTF_PARM_EXPOSURE, int32_t, 1); 250 INCLUDE(CAM_INTF_PARM_SHARPNESS, int32_t, 1); 251 INCLUDE(CAM_INTF_PARM_CONTRAST, int32_t, 1); 252 INCLUDE(CAM_INTF_PARM_SATURATION, int32_t, 1); 253 INCLUDE(CAM_INTF_PARM_BRIGHTNESS, int32_t, 1); 254 INCLUDE(CAM_INTF_PARM_WHITE_BALANCE, int32_t, 1); 255 INCLUDE(CAM_INTF_PARM_ISO, int32_t, 1); 256 INCLUDE(CAM_INTF_PARM_ZOOM, int32_t, 1); 257 INCLUDE(CAM_INTF_PARM_ANTIBANDING, int32_t, 1); 258 INCLUDE(CAM_INTF_PARM_EFFECT, int32_t, 1); 259 INCLUDE(CAM_INTF_PARM_FPS_RANGE, cam_fps_range_t, 1); 260 INCLUDE(CAM_INTF_PARM_EXPOSURE_COMPENSATION, int32_t, 1); 261 INCLUDE(CAM_INTF_PARM_LED_MODE, int32_t, 1); 262 INCLUDE(CAM_INTF_PARM_ROLLOFF, int32_t, 1); 263 INCLUDE(CAM_INTF_PARM_MODE, int32_t, 1); 264 INCLUDE(CAM_INTF_PARM_AEC_ALGO_TYPE, int32_t, 1); 265 INCLUDE(CAM_INTF_PARM_FOCUS_ALGO_TYPE, int32_t, 1); 266 INCLUDE(CAM_INTF_PARM_AEC_ROI, cam_set_aec_roi_t, 1); 267 INCLUDE(CAM_INTF_PARM_AF_ROI, cam_roi_info_t, 1); 268 INCLUDE(CAM_INTF_PARM_FOCUS_MODE, int32_t, 1); 269 INCLUDE(CAM_INTF_PARM_BESTSHOT_MODE, int32_t, 1); 270 INCLUDE(CAM_INTF_PARM_SCE_FACTOR, int32_t, 1); 271 INCLUDE(CAM_INTF_PARM_FD, cam_fd_set_parm_t, 1); 272 INCLUDE(CAM_INTF_PARM_AEC_LOCK, int32_t, 1); 273 INCLUDE(CAM_INTF_PARM_AWB_LOCK, int32_t, 1); 274 INCLUDE(CAM_INTF_PARM_MCE, int32_t, 1); 275 INCLUDE(CAM_INTF_PARM_HFR, int32_t, 1); 276 INCLUDE(CAM_INTF_PARM_REDEYE_REDUCTION, int32_t, 1); 277 INCLUDE(CAM_INTF_PARM_WAVELET_DENOISE, cam_denoise_param_t, 1); 278 INCLUDE(CAM_INTF_PARM_HISTOGRAM, int32_t, 1); 279 INCLUDE(CAM_INTF_PARM_ASD_ENABLE, int32_t, 1); 280 INCLUDE(CAM_INTF_PARM_RECORDING_HINT, int32_t, 1); 281 INCLUDE(CAM_INTF_PARM_DIS_ENABLE, int32_t, 1); 282 INCLUDE(CAM_INTF_PARM_HDR, cam_exp_bracketing_t, 1); 283 INCLUDE(CAM_INTF_PARM_FRAMESKIP, int32_t, 1); 284 INCLUDE(CAM_INTF_PARM_ZSL_MODE, int32_t, 1); 285 INCLUDE(CAM_INTF_PARM_HDR_NEED_1X, int32_t, 1); 286 INCLUDE(CAM_INTF_PARM_LOCK_CAF, int32_t, 1); 287 INCLUDE(CAM_INTF_PARM_VIDEO_HDR, int32_t, 1); 288} parm_type_t; 289 290/****************************DO NOT MODIFY BELOW THIS LINE!!!!*********************/ 291 292typedef struct { 293 parm_type_t data; 294 uint8_t next_flagged_entry; 295} parm_entry_type_t; 296 297typedef struct { 298 uint8_t first_flagged_entry; 299 parm_entry_type_t entry[CAM_INTF_PARM_MAX]; 300} parm_buffer_t; 301 302#endif /* __QCAMERA_INTF_H__ */ 303