cam_types.h revision 6356e2d4fc01ff878ac4664d86892c8d81e330a9
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_TYPES_H__ 31#define __QCAMERA_TYPES_H__ 32 33#include <stdint.h> 34#include <pthread.h> 35#include <inttypes.h> 36#include <media/msmb_camera.h> 37 38#define CAM_MAX_NUM_BUFS_PER_STREAM 24 39#define MAX_METADATA_PAYLOAD_SIZE 1024 40 41#define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0) 42#define CEILING16(X) (((X) + 0x000F) & 0xFFF0) 43#define CEILING4(X) (((X) + 0x0003) & 0xFFFC) 44#define CEILING2(X) (((X) + 0x0001) & 0xFFFE) 45 46#define MAX_ZOOMS_CNT 64 47#define MAX_SIZES_CNT 24 48#define MAX_EXP_BRACKETING_LENGTH 32 49#define MAX_ROI 5 50#define MAX_STREAM_NUM_IN_BUNDLE 4 51#define MAX_NUM_STREAMS 8 52 53typedef enum { 54 CAM_HAL_V1 = 1, 55 CAM_HAL_V3 = 3 56} cam_hal_version_t; 57 58typedef enum { 59 CAM_STATUS_SUCCESS, /* Operation Succeded */ 60 CAM_STATUS_FAILED, /* Failure in doing operation */ 61 CAM_STATUS_INVALID_PARM, /* Inavlid parameter provided */ 62 CAM_STATUS_NOT_SUPPORTED, /* Parameter/operation not supported */ 63 CAM_STATUS_ACCEPTED, /* Parameter accepted */ 64 CAM_STATUS_MAX, 65} cam_status_t; 66 67typedef enum { 68 CAM_POSITION_BACK, 69 CAM_POSITION_FRONT 70} cam_position_t; 71 72typedef enum { 73 CAM_FORMAT_JPEG = 0, 74 CAM_FORMAT_YUV_420_NV12 = 1, 75 CAM_FORMAT_YUV_420_NV21, 76 CAM_FORMAT_YUV_420_NV21_ADRENO, 77 CAM_FORMAT_YUV_420_YV12, 78 CAM_FORMAT_YUV_422_NV16, 79 CAM_FORMAT_YUV_422_NV61, 80 CAM_FORMAT_YUV_420_NV12_VENUS, 81 82 /* Please note below are the defintions for raw image. 83 * Any format other than raw image format should be declared 84 * before this line!!!!!!!!!!!!! */ 85 86 /* Note: For all raw formats, each scanline needs to be 16 bytes aligned */ 87 88 /* Packed YUV/YVU raw format, 16 bpp: 8 bits Y and 8 bits UV. 89 * U and V are interleaved with Y: YUYV or YVYV */ 90 CAM_FORMAT_YUV_RAW_8BIT_YUYV, 91 CAM_FORMAT_YUV_RAW_8BIT_YVYU, 92 CAM_FORMAT_YUV_RAW_8BIT_UYVY, 93 CAM_FORMAT_YUV_RAW_8BIT_VYUY, 94 95 /* QCOM RAW formats where data is packed into 64bit word. 96 * 8BPP: 1 64-bit word contains 8 pixels p0 - p7, where p0 is 97 * stored at LSB. 98 * 10BPP: 1 64-bit word contains 6 pixels p0 - p5, where most 99 * significant 4 bits are set to 0. P0 is stored at LSB. 100 * 12BPP: 1 64-bit word contains 5 pixels p0 - p4, where most 101 * significant 4 bits are set to 0. P0 is stored at LSB. */ 102 CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG, 103 CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG, 104 CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB, 105 CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR, 106 CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG, 107 CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG, 108 CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB, 109 CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR, 110 CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG, 111 CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG, 112 CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB, 113 CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR, 114 /* MIPI RAW formats based on MIPI CSI-2 specifiction. 115 * 8BPP: Each pixel occupies one bytes, starting at LSB. 116 * Output with of image has no restrictons. 117 * 10BPP: Four pixels are held in every 5 bytes. The output 118 * with of image must be a multiple of 4 pixels. 119 * 12BPP: Two pixels are held in every 3 bytes. The output 120 * width of image must be a multiple of 2 pixels. */ 121 CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG, 122 CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG, 123 CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB, 124 CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR, 125 CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG, 126 CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG, 127 CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB, 128 CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR, 129 CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG, 130 CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG, 131 CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB, 132 CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR, 133 /* Ideal raw formats where image data has gone through black 134 * correction, lens rolloff, demux/channel gain, bad pixel 135 * correction, and ABF. 136 * Ideal raw formats could output any of QCOM_RAW and MIPI_RAW 137 * formats, plus plain8 8bbp, plain16 800, plain16 10bpp, and 138 * plain 16 12bpp */ 139 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG, 140 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG, 141 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB, 142 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR, 143 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG, 144 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG, 145 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB, 146 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR, 147 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG, 148 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG, 149 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB, 150 CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR, 151 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG, 152 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG, 153 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB, 154 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR, 155 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG, 156 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG, 157 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB, 158 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR, 159 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG, 160 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG, 161 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB, 162 CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR, 163 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG, 164 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG, 165 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB, 166 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR, 167 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG, 168 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG, 169 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB, 170 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR, 171 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG, 172 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG, 173 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB, 174 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR, 175 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG, 176 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG, 177 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB, 178 CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR, 179 180 /* generic 8-bit raw */ 181 CAM_FORMAT_JPEG_RAW_8BIT, 182 CAM_FORMAT_META_RAW_8BIT, 183 184 CAM_FORMAT_MAX 185} cam_format_t; 186 187typedef enum { 188 /* applies to HAL 1 */ 189 CAM_STREAM_TYPE_DEFAULT, /* default stream type */ 190 CAM_STREAM_TYPE_PREVIEW, /* preview */ 191 CAM_STREAM_TYPE_POSTVIEW, /* postview */ 192 CAM_STREAM_TYPE_SNAPSHOT, /* snapshot */ 193 CAM_STREAM_TYPE_VIDEO, /* video */ 194 195 /* applies to HAL 3 */ 196 CAM_STREAM_TYPE_IMPL_DEFINED, /* opaque format: could be display, video enc, ZSL YUV */ 197 CAM_STREAM_TYPE_YUV, /* app requested callback stream type */ 198 199 /* applies to both HAL 1 and HAL 3 */ 200 CAM_STREAM_TYPE_METADATA, /* meta data */ 201 CAM_STREAM_TYPE_RAW, /* raw dump from camif */ 202 CAM_STREAM_TYPE_OFFLINE_PROC, /* offline process */ 203 CAM_STREAM_TYPE_MAX, 204} cam_stream_type_t; 205 206typedef enum { 207 CAM_PAD_NONE = 1, 208 CAM_PAD_TO_2 = 2, 209 CAM_PAD_TO_4 = 4, 210 CAM_PAD_TO_WORD = CAM_PAD_TO_4, 211 CAM_PAD_TO_8 = 8, 212 CAM_PAD_TO_16 = 16, 213 CAM_PAD_TO_32 = 32, 214 CAM_PAD_TO_64 = 64, 215 CAM_PAD_TO_1K = 1024, 216 CAM_PAD_TO_2K = 2048, 217 CAM_PAD_TO_4K = 4096, 218 CAM_PAD_TO_8K = 8192 219} cam_pad_format_t; 220 221typedef enum { 222 /* followings are per camera */ 223 CAM_MAPPING_BUF_TYPE_CAPABILITY, /* mapping camera capability buffer */ 224 CAM_MAPPING_BUF_TYPE_PARM_BUF, /* mapping parameters buffer */ 225 226 /* followings are per stream */ 227 CAM_MAPPING_BUF_TYPE_STREAM_BUF, /* mapping stream buffers */ 228 CAM_MAPPING_BUF_TYPE_STREAM_INFO, /* mapping stream information buffer */ 229 CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF, /* mapping offline process input buffer */ 230 CAM_MAPPING_BUF_TYPE_MAX 231} cam_mapping_buf_type; 232 233typedef struct { 234 cam_mapping_buf_type type; 235 uint32_t stream_id; /* stream id: valid if STREAM_BUF */ 236 uint32_t frame_idx; /* frame index: valid if type is STREAM_BUF */ 237 int32_t plane_idx; /* planner index. valid if type is STREAM_BUF. 238 * -1 means all planners shanre the same fd; 239 * otherwise, each planner has its own fd */ 240 unsigned long cookie; /* could be job_id(uint32_t) to identify mapping job */ 241 int fd; /* origin fd */ 242 uint32_t size; /* size of the buffer */ 243} cam_buf_map_type; 244 245typedef struct { 246 cam_mapping_buf_type type; 247 uint32_t stream_id; /* stream id: valid if STREAM_BUF */ 248 uint32_t frame_idx; /* frame index: valid if STREAM_BUF or HIST_BUF */ 249 int32_t plane_idx; /* planner index. valid if type is STREAM_BUF. 250 * -1 means all planners shanre the same fd; 251 * otherwise, each planner has its own fd */ 252 unsigned long cookie; /* could be job_id(uint32_t) to identify unmapping job */ 253} cam_buf_unmap_type; 254 255typedef enum { 256 CAM_MAPPING_TYPE_FD_MAPPING, 257 CAM_MAPPING_TYPE_FD_UNMAPPING, 258 CAM_MAPPING_TYPE_MAX 259} cam_mapping_type; 260 261typedef struct { 262 cam_mapping_type msg_type; 263 union { 264 cam_buf_map_type buf_map; 265 cam_buf_unmap_type buf_unmap; 266 } payload; 267} cam_sock_packet_t; 268 269typedef enum { 270 CAM_MODE_2D = (1<<0), 271 CAM_MODE_3D = (1<<1) 272} cam_mode_t; 273 274typedef struct { 275 uint32_t len; 276 uint32_t y_offset; 277 uint32_t cbcr_offset; 278} cam_sp_len_offset_t; 279 280typedef struct{ 281 uint32_t len; 282 uint32_t offset; 283 int32_t offset_x; 284 int32_t offset_y; 285 int32_t stride; 286 int32_t scanline; 287} cam_mp_len_offset_t; 288 289typedef struct { 290 uint32_t width_padding; 291 uint32_t height_padding; 292 uint32_t plane_padding; 293} cam_padding_info_t; 294 295typedef struct { 296 int num_planes; 297 union { 298 cam_sp_len_offset_t sp; 299 cam_mp_len_offset_t mp[VIDEO_MAX_PLANES]; 300 }; 301 uint32_t frame_len; 302} cam_frame_len_offset_t; 303 304typedef struct { 305 int32_t width; 306 int32_t height; 307} cam_dimension_t; 308 309typedef struct { 310 cam_frame_len_offset_t plane_info; 311} cam_stream_buf_plane_info_t; 312 313typedef struct { 314 float min_fps; 315 float max_fps; 316} cam_fps_range_t; 317 318typedef struct { 319 int32_t min_sensitivity; 320 int32_t max_sensitivity; 321} cam_sensitivity_range_t; 322 323typedef enum { 324 CAM_HFR_MODE_OFF, 325 CAM_HFR_MODE_60FPS, 326 CAM_HFR_MODE_90FPS, 327 CAM_HFR_MODE_120FPS, 328 CAM_HFR_MODE_150FPS, 329 CAM_HFR_MODE_MAX 330} cam_hfr_mode_t; 331 332typedef struct { 333 cam_hfr_mode_t mode; 334 cam_dimension_t dim; 335 uint8_t frame_skip; 336 uint8_t livesnapshot_sizes_tbl_cnt; /* livesnapshot sizes table size */ 337 cam_dimension_t livesnapshot_sizes_tbl[MAX_SIZES_CNT]; /* livesnapshot sizes table */ 338} cam_hfr_info_t; 339 340typedef enum { 341 CAM_WB_MODE_AUTO, 342 CAM_WB_MODE_CUSTOM, 343 CAM_WB_MODE_INCANDESCENT, 344 CAM_WB_MODE_FLUORESCENT, 345 CAM_WB_MODE_WARM_FLUORESCENT, 346 CAM_WB_MODE_DAYLIGHT, 347 CAM_WB_MODE_CLOUDY_DAYLIGHT, 348 CAM_WB_MODE_TWILIGHT, 349 CAM_WB_MODE_SHADE, 350 CAM_WB_MODE_OFF, 351 CAM_WB_MODE_MAX 352} cam_wb_mode_type; 353 354typedef enum { 355 CAM_ANTIBANDING_MODE_OFF, 356 CAM_ANTIBANDING_MODE_60HZ, 357 CAM_ANTIBANDING_MODE_50HZ, 358 CAM_ANTIBANDING_MODE_AUTO, 359 CAM_ANTIBANDING_MODE_AUTO_50HZ, 360 CAM_ANTIBANDING_MODE_AUTO_60HZ, 361 CAM_ANTIBANDING_MODE_MAX, 362} cam_antibanding_mode_type; 363 364/* Enum Type for different ISO Mode supported */ 365typedef enum { 366 CAM_ISO_MODE_AUTO, 367 CAM_ISO_MODE_DEBLUR, 368 CAM_ISO_MODE_100, 369 CAM_ISO_MODE_200, 370 CAM_ISO_MODE_400, 371 CAM_ISO_MODE_800, 372 CAM_ISO_MODE_1600, 373 CAM_ISO_MODE_MAX 374} cam_iso_mode_type; 375 376typedef enum { 377 CAM_AEC_MODE_FRAME_AVERAGE, 378 CAM_AEC_MODE_CENTER_WEIGHTED, 379 CAM_AEC_MODE_SPOT_METERING, 380 CAM_AEC_MODE_SMART_METERING, 381 CAM_AEC_MODE_USER_METERING, 382 CAM_AEC_MODE_SPOT_METERING_ADV, 383 CAM_AEC_MODE_CENTER_WEIGHTED_ADV, 384 CAM_AEC_MODE_MAX 385} cam_auto_exposure_mode_type; 386 387typedef enum { 388 CAM_AE_MODE_OFF, 389 CAM_AE_MODE_ON, 390 CAM_AE_MODE_MAX 391} cam_ae_mode_type; 392 393typedef enum { 394 CAM_FOCUS_ALGO_AUTO, 395 CAM_FOCUS_ALGO_SPOT, 396 CAM_FOCUS_ALGO_CENTER_WEIGHTED, 397 CAM_FOCUS_ALGO_AVERAGE, 398 CAM_FOCUS_ALGO_MAX 399} cam_focus_algorithm_type; 400 401/* Auto focus mode */ 402typedef enum { 403 CAM_FOCUS_MODE_AUTO, 404 CAM_FOCUS_MODE_INFINITY, 405 CAM_FOCUS_MODE_MACRO, 406 CAM_FOCUS_MODE_FIXED, 407 CAM_FOCUS_MODE_EDOF, 408 CAM_FOCUS_MODE_CONTINOUS_VIDEO, 409 CAM_FOCUS_MODE_CONTINOUS_PICTURE, 410 CAM_FOCUS_MODE_MAX 411} cam_focus_mode_type; 412 413typedef enum { 414 CAM_SCENE_MODE_OFF, 415 CAM_SCENE_MODE_AUTO, 416 CAM_SCENE_MODE_LANDSCAPE, 417 CAM_SCENE_MODE_SNOW, 418 CAM_SCENE_MODE_BEACH, 419 CAM_SCENE_MODE_SUNSET, 420 CAM_SCENE_MODE_NIGHT, 421 CAM_SCENE_MODE_PORTRAIT, 422 CAM_SCENE_MODE_BACKLIGHT, 423 CAM_SCENE_MODE_SPORTS, 424 CAM_SCENE_MODE_ANTISHAKE, 425 CAM_SCENE_MODE_FLOWERS, 426 CAM_SCENE_MODE_CANDLELIGHT, 427 CAM_SCENE_MODE_FIREWORKS, 428 CAM_SCENE_MODE_PARTY, 429 CAM_SCENE_MODE_NIGHT_PORTRAIT, 430 CAM_SCENE_MODE_THEATRE, 431 CAM_SCENE_MODE_ACTION, 432 CAM_SCENE_MODE_AR, 433 CAM_SCENE_MODE_FACE_PRIORITY, 434 CAM_SCENE_MODE_BARCODE, 435 CAM_SCENE_MODE_MAX 436} cam_scene_mode_type; 437 438typedef enum { 439 CAM_EFFECT_MODE_OFF, 440 CAM_EFFECT_MODE_MONO, 441 CAM_EFFECT_MODE_NEGATIVE, 442 CAM_EFFECT_MODE_SOLARIZE, 443 CAM_EFFECT_MODE_SEPIA, 444 CAM_EFFECT_MODE_POSTERIZE, 445 CAM_EFFECT_MODE_WHITEBOARD, 446 CAM_EFFECT_MODE_BLACKBOARD, 447 CAM_EFFECT_MODE_AQUA, 448 CAM_EFFECT_MODE_EMBOSS, 449 CAM_EFFECT_MODE_SKETCH, 450 CAM_EFFECT_MODE_NEON, 451 CAM_EFFECT_MODE_MAX 452} cam_effect_mode_type; 453 454typedef enum { 455 CAM_FLASH_MODE_OFF, 456 CAM_FLASH_MODE_AUTO, 457 CAM_FLASH_MODE_ON, 458 CAM_FLASH_MODE_TORCH, 459 CAM_FLASH_MODE_SINGLE, 460 CAM_FLASH_MODE_MAX 461} cam_flash_mode_t; 462 463typedef enum { 464 CAM_AEC_TRIGGER_IDLE, 465 CAM_AEC_TRIGGER_START 466} cam_aec_trigger_type_t; 467 468typedef enum { 469 CAM_AF_TRIGGER_IDLE, 470 CAM_AF_TRIGGER_START, 471 CAM_AF_TRIGGER_CANCEL 472} cam_af_trigger_type_t; 473 474typedef enum { 475 CAM_AE_STATE_INACTIVE, 476 CAM_AE_STATE_SEARCHING, 477 CAM_AE_STATE_CONVERGED, 478 CAM_AE_STATE_LOCKED, 479 CAM_AE_STATE_FLASH_REQUIRED, 480 CAM_AE_STATE_PRECAPTURE 481} cam_ae_state_t; 482 483typedef struct { 484 int32_t left; 485 int32_t top; 486 int32_t width; 487 int32_t height; 488} cam_rect_t; 489 490typedef struct { 491 cam_rect_t rect; 492 int32_t weight; /* weight of the area, valid for focusing/metering areas */ 493} cam_area_t; 494 495typedef enum { 496 CAM_STREAMING_MODE_CONTINUOUS, /* continous streaming */ 497 CAM_STREAMING_MODE_BURST, /* burst streaming */ 498 CAM_STREAMING_MODE_MAX 499} cam_streaming_mode_t; 500 501#define CAM_REPROCESS_MASK_TYPE_WNR (1<<0) 502 503/* event from server */ 504typedef enum { 505 CAM_EVENT_TYPE_MAP_UNMAP_DONE = (1<<0), 506 CAM_EVENT_TYPE_AUTO_FOCUS_DONE = (1<<1), 507 CAM_EVENT_TYPE_ZOOM_DONE = (1<<2), 508 CAM_EVENT_TYPE_DAEMON_DIED = (1<<3), 509 CAM_EVENT_TYPE_MAX 510} cam_event_type_t; 511 512typedef enum { 513 CAM_EXP_BRACKETING_OFF, 514 CAM_EXP_BRACKETING_ON 515} cam_bracket_mode; 516 517typedef struct { 518 cam_bracket_mode mode; 519 char values[MAX_EXP_BRACKETING_LENGTH]; /* user defined values */ 520} cam_exp_bracketing_t; 521 522typedef enum { 523 CAM_AEC_ROI_OFF, 524 CAM_AEC_ROI_ON 525} cam_aec_roi_ctrl_t; 526 527typedef enum { 528 CAM_AEC_ROI_BY_INDEX, 529 CAM_AEC_ROI_BY_COORDINATE, 530} cam_aec_roi_type_t; 531 532typedef struct { 533 uint32_t x; 534 uint32_t y; 535} cam_coordinate_type_t; 536 537typedef struct { 538 int32_t numerator; 539 int32_t denominator; 540} cam_rational_type_t; 541 542typedef struct { 543 cam_aec_roi_ctrl_t aec_roi_enable; 544 cam_aec_roi_type_t aec_roi_type; 545 union { 546 cam_coordinate_type_t coordinate[MAX_ROI]; 547 uint32_t aec_roi_idx[MAX_ROI]; 548 } cam_aec_roi_position; 549} cam_set_aec_roi_t; 550 551typedef struct { 552 uint32_t frm_id; 553 uint8_t num_roi; 554 cam_rect_t roi[MAX_ROI]; 555 int32_t weight[MAX_ROI]; 556 uint8_t is_multiwindow; 557} cam_roi_info_t; 558 559typedef enum { 560 CAM_WAVELET_DENOISE_YCBCR_PLANE, 561 CAM_WAVELET_DENOISE_CBCR_ONLY, 562 CAM_WAVELET_DENOISE_STREAMLINE_YCBCR, 563 CAM_WAVELET_DENOISE_STREAMLINED_CBCR 564} cam_denoise_process_type_t; 565 566typedef struct { 567 int denoise_enable; 568 cam_denoise_process_type_t process_plates; 569} cam_denoise_param_t; 570 571#define CAM_FACE_PROCESS_MASK_DETECTION (1<<0) 572#define CAM_FACE_PROCESS_MASK_RECOGNITION (1<<1) 573typedef struct { 574 int fd_mode; /* mask of face process */ 575 int num_fd; 576} cam_fd_set_parm_t; 577 578typedef struct { 579 int8_t face_id; /* unique id for face tracking within view unless view changes */ 580 int8_t score; /* score of confidence (0, -100) */ 581 cam_rect_t face_boundary; /* boundary of face detected */ 582 cam_coordinate_type_t left_eye_center; /* coordinate of center of left eye */ 583 cam_coordinate_type_t right_eye_center; /* coordinate of center of right eye */ 584 cam_coordinate_type_t mouth_center; /* coordinate of center of mouth */ 585 uint8_t smile_degree; /* smile degree (0, -100) */ 586 uint8_t smile_confidence; /* smile confidence (0, 100) */ 587 uint8_t face_recognised; /* if face is recognised */ 588 int8_t gaze_angle; /* -90 -45 0 45 90 for head left to rigth tilt */ 589 int8_t updown_dir; /* up down direction (-90, 90) */ 590 int8_t leftright_dir; /* left right direction (-90, 90) */ 591 int8_t roll_dir; /* roll direction (-90, 90) */ 592 int8_t left_right_gaze; /* left right gaze degree (-50, 50) */ 593 int8_t top_bottom_gaze; /* up down gaze degree (-50, 50) */ 594 uint8_t blink_detected; /* if blink is detected */ 595 uint8_t left_blink; /* left eye blink degeree (0, -100) */ 596 uint8_t right_blink; /* right eye blink degree (0, - 100) */ 597} cam_face_detection_info_t; 598 599typedef struct { 600 uint32_t frame_id; /* frame index of which faces are detected */ 601 uint8_t num_faces_detected; /* number of faces detected */ 602 cam_face_detection_info_t faces[MAX_ROI]; /* detailed information of faces detected */ 603} cam_face_detection_data_t; 604 605#define CAM_HISTOGRAM_STATS_SIZE 256 606typedef struct { 607 uint32_t max_hist_value; 608 uint32_t hist_buf[CAM_HISTOGRAM_STATS_SIZE]; /* buf holding histogram stats data */ 609} cam_histogram_data_t; 610 611typedef struct { 612 cam_histogram_data_t r_stats; 613 cam_histogram_data_t b_stats; 614 cam_histogram_data_t gr_stats; 615 cam_histogram_data_t gb_stats; 616} cam_bayer_hist_stats_t; 617 618typedef enum { 619 CAM_HISTOGRAM_TYPE_BAYER, 620 CAM_HISTOGRAM_TYPE_YUV 621} cam_histogram_type_t; 622 623typedef struct { 624 cam_histogram_type_t type; 625 union { 626 cam_bayer_hist_stats_t bayer_stats; 627 cam_histogram_data_t yuv_stats; 628 }; 629} cam_hist_stats_t; 630 631enum cam_focus_distance_index{ 632 CAM_FOCUS_DISTANCE_NEAR_INDEX, /* 0 */ 633 CAM_FOCUS_DISTANCE_OPTIMAL_INDEX, 634 CAM_FOCUS_DISTANCE_FAR_INDEX, 635 CAM_FOCUS_DISTANCE_MAX_INDEX 636}; 637 638typedef struct { 639 float focus_distance[CAM_FOCUS_DISTANCE_MAX_INDEX]; 640} cam_focus_distances_info_t; 641 642/* Different autofocus cycle when calling do_autoFocus 643 * CAM_AF_COMPLETE_EXISTING_SWEEP: Complete existing sweep 644 * if one is ongoing, and lock. 645 * CAM_AF_DO_ONE_FULL_SWEEP: Do one full sweep, regardless 646 * of the current state, and lock. 647 * CAM_AF_START_CONTINUOUS_SWEEP: Start continous sweep. 648 * After do_autoFocus, HAL receives an event: CAM_AF_FOCUSED, 649 * or CAM_AF_NOT_FOCUSED. 650 * cancel_autoFocus stops any lens movement. 651 * Each do_autoFocus call only produces 1 FOCUSED/NOT_FOCUSED 652 * event, not both. 653 */ 654typedef enum { 655 CAM_AF_COMPLETE_EXISTING_SWEEP, 656 CAM_AF_DO_ONE_FULL_SWEEP, 657 CAM_AF_START_CONTINUOUS_SWEEP 658} cam_autofocus_cycle_t; 659 660typedef enum { 661 CAM_AF_SCANNING, 662 CAM_AF_FOCUSED, 663 CAM_AF_NOT_FOCUSED 664} cam_autofocus_state_t; 665 666typedef struct { 667 cam_autofocus_state_t focus_state; /* state of focus */ 668 cam_focus_distances_info_t focus_dist; /* focus distance */ 669} cam_auto_focus_data_t; 670 671typedef struct { 672 uint32_t stream_id; 673 cam_rect_t crop; 674} cam_stream_crop_info_t; 675 676typedef struct { 677 uint8_t num_of_streams; 678 cam_stream_crop_info_t crop_info[MAX_NUM_STREAMS]; 679} cam_crop_data_t; 680 681typedef enum { 682 DO_NOT_NEED_FUTURE_FRAME, 683 NEED_FUTURE_FRAME, 684} cam_prep_snapshot_state_t; 685 686typedef struct { 687 uint32_t min_frame_idx; 688 uint32_t max_frame_idx; 689} cam_frame_idx_range_t; 690 691typedef struct { 692 uint8_t is_stats_valid; /* if histgram data is valid */ 693 cam_hist_stats_t stats_data; /* histogram data */ 694 695 uint8_t is_faces_valid; /* if face detection data is valid */ 696 cam_face_detection_data_t faces_data; /* face detection result */ 697 698 uint8_t is_focus_valid; /* if focus data is valid */ 699 cam_auto_focus_data_t focus_data; /* focus data */ 700 701 uint8_t is_crop_valid; /* if crop data is valid */ 702 cam_crop_data_t crop_data; /* crop data */ 703 704 uint8_t is_prep_snapshot_done_valid; /* if prep snapshot done is valid */ 705 cam_prep_snapshot_state_t prep_snapshot_done_state; /* prepare snapshot done state */ 706 707 /* if good frame idx range is valid */ 708 uint8_t is_good_frame_idx_range_valid; 709 /* good frame idx range, make sure: 710 * 1. good_frame_idx_range.min_frame_idx > current_frame_idx 711 * 2. good_frame_idx_range.min_frame_idx - current_frame_idx < 100 */ 712 cam_frame_idx_range_t good_frame_idx_range; 713 714 char private_metadata[MAX_METADATA_PAYLOAD_SIZE]; 715 716} cam_metadata_info_t; 717 718typedef enum { 719 CAM_INTF_PARM_HAL_VERSION, 720 /* common between HAL1 and HAL3 */ 721 CAM_INTF_PARM_ANTIBANDING, 722 CAM_INTF_PARM_EXPOSURE_COMPENSATION, 723 CAM_INTF_PARM_AEC_LOCK, 724 CAM_INTF_PARM_FPS_RANGE, 725 CAM_INTF_PARM_AWB_LOCK, 726 CAM_INTF_PARM_WHITE_BALANCE, 727 CAM_INTF_PARM_EFFECT, 728 CAM_INTF_PARM_BESTSHOT_MODE, 729 CAM_INTF_PARM_DIS_ENABLE, 730 CAM_INTF_PARM_LED_MODE, 731 CAM_INTF_META_HISTOGRAM, /* 10 */ 732 CAM_INTF_META_FACE_DETECTION, 733 CAM_INTF_META_AUTOFOCUS_DATA, 734 735 /* specific to HAl1 */ 736 CAM_INTF_PARM_QUERY_FLASH4SNAP, 737 CAM_INTF_PARM_EXPOSURE, 738 CAM_INTF_PARM_SHARPNESS, 739 CAM_INTF_PARM_CONTRAST, 740 CAM_INTF_PARM_SATURATION, 741 CAM_INTF_PARM_BRIGHTNESS, 742 CAM_INTF_PARM_ISO, 743 CAM_INTF_PARM_ZOOM, /* 20 */ 744 CAM_INTF_PARM_ROLLOFF, 745 CAM_INTF_PARM_MODE, /* camera mode */ 746 CAM_INTF_PARM_AEC_ALGO_TYPE, /* auto exposure algorithm */ 747 CAM_INTF_PARM_FOCUS_ALGO_TYPE, /* focus algorithm */ 748 CAM_INTF_PARM_AEC_ROI, 749 CAM_INTF_PARM_AF_ROI, 750 CAM_INTF_PARM_FOCUS_MODE, 751 CAM_INTF_PARM_SCE_FACTOR, 752 CAM_INTF_PARM_FD, 753 CAM_INTF_PARM_MCE, /* 30 */ 754 CAM_INTF_PARM_HFR, 755 CAM_INTF_PARM_REDEYE_REDUCTION, 756 CAM_INTF_PARM_WAVELET_DENOISE, 757 CAM_INTF_PARM_HISTOGRAM, 758 CAM_INTF_PARM_ASD_ENABLE, 759 CAM_INTF_PARM_RECORDING_HINT, 760 CAM_INTF_PARM_HDR, 761 CAM_INTF_PARM_FRAMESKIP, 762 CAM_INTF_PARM_ZSL_MODE, /* indicating if it's running in ZSL mode */ 763 CAM_INTF_PARM_HDR_NEED_1X, /* if HDR needs 1x output */ /* 40 */ 764 CAM_INTF_PARM_LOCK_CAF, 765 CAM_INTF_PARM_VIDEO_HDR, 766 CAM_INTF_PARM_ROTATION, 767 CAM_INTF_META_CROP_DATA, 768 CAM_INTF_META_PREP_SNAPSHOT_DONE, 769 CAM_INTF_META_GOOD_FRAME_IDX_RANGE, 770 771 /* stream based parameters */ 772 CAM_INTF_PARM_DO_REPROCESS, 773 CAM_INTF_PARM_SET_BUNDLE, 774 775 /* specific to HAL3 */ 776 /* Whether the metadata maps to a valid frame number */ 777 CAM_INTF_META_FRAME_NUMBER_VALID, 778 /* Number of pending requests yet to be processed */ 779 CAM_INTF_META_PENDING_REQUESTS, 780 /* COLOR CORRECTION.*/ 781 CAM_INTF_META_COLOR_CORRECT_MODE, 782 /* A transform matrix to chromatically adapt pixels in the CIE XYZ (1931) 783 * color space from the scene illuminant to the sRGB-standard D65-illuminant. */ 784 CAM_INTF_META_COLOR_CORRECT_TRANSFORM, /* 50 */ 785 /* CONTROL */ 786// CAM_INTF_META_REQUEST_ID, 787 /* A frame counter set by the framework. Must be maintained unchanged in 788 * output frame. */ 789 CAM_INTF_META_FRAME_NUMBER, 790 /* Whether AE is currently updating the sensor exposure and sensitivity 791 * fields */ 792 CAM_INTF_META_AEC_MODE, 793 /* List of areas to use for metering */ 794 CAM_INTF_META_AEC_ROI, 795 /* Whether the HAL must trigger precapture metering.*/ 796 CAM_INTF_META_AEC_PRECAPTURE_TRIGGER, 797 /* The ID sent with the latest CAMERA2_TRIGGER_PRECAPTURE_METERING call */ 798 CAM_INTF_META_AEC_PRECAPTURE_ID, 799 /* Current state of AE algorithm */ 800 CAM_INTF_META_AEC_STATE, 801 /* List of areas to use for focus estimation */ 802 CAM_INTF_META_AF_ROI, 803 /* Whether the HAL must trigger autofocus. */ 804 CAM_INTF_META_AF_TRIGGER, 805 /* Current state of AF algorithm */ 806 CAM_INTF_META_AF_STATE, 807 /* The ID sent with the latest CAMERA2_TRIGGER_AUTOFOCUS call */ 808 CAM_INTF_META_AF_TRIGGER_ID, 809 /* List of areas to use for illuminant estimation */ 810 CAM_INTF_META_AWB_REGIONS, 811 /* Current state of AWB algorithm */ 812 CAM_INTF_META_AWB_STATE, 813 /* Information to 3A routines about the purpose of this capture, to help 814 * decide optimal 3A strategy */ 815 CAM_INTF_META_CAPTURE_INTENT, 816 /* Overall mode of 3A control routines. We need to have this parameter 817 * because not all android.control.* have an OFF option, for example, 818 * AE_FPS_Range, aePrecaptureTrigger */ 819 CAM_INTF_META_MODE, 820 /* DEMOSAIC */ 821 /* Controls the quality of the demosaicing processing */ 822 CAM_INTF_META_DEMOSAIC, 823 /* EDGE */ 824 /* Operation mode for edge enhancement */ 825 CAM_INTF_META_EDGE, 826 /* Control the amount of edge enhancement applied to the images.*/ 827 /* 1-10; 10 is maximum sharpening */ 828 CAM_INTF_META_SHARPNESS_STRENGTH, 829 /* FLASH */ 830 /* Power for flash firing/torch, 10 is max power; 0 is no flash. Linear */ 831 CAM_INTF_META_FLASH_POWER, 832 /* Firing time of flash relative to start of exposure, in nanoseconds*/ 833 CAM_INTF_META_FLASH_FIRING_TIME, 834 /* Current state of the flash unit */ 835 CAM_INTF_META_FLASH_STATE, 836 /* GEOMETRIC */ 837 /* Operating mode of geometric correction */ 838 CAM_INTF_META_GEOMETRIC_MODE, 839 /* Control the amount of shading correction applied to the images */ 840 CAM_INTF_META_GEOMETRIC_STRENGTH, 841 /* HOT PIXEL */ 842 /* Set operational mode for hot pixel correction */ 843 CAM_INTF_META_HOTPIXEL_MODE, 844 /* LENS */ 845 /* Size of the lens aperture */ 846 CAM_INTF_META_LENS_APERTURE, 847 /* State of lens neutral density filter(s) */ 848 CAM_INTF_META_LENS_FILTERDENSITY, 849 /* Lens optical zoom setting */ 850 CAM_INTF_META_LENS_FOCAL_LENGTH, 851 /* Distance to plane of sharpest focus, measured from frontmost surface 852 * of the lens */ 853 CAM_INTF_META_LENS_FOCUS_DISTANCE, 854 /* The range of scene distances that are in sharp focus (depth of field) */ 855 CAM_INTF_META_LENS_FOCUS_RANGE, 856 /* Whether optical image stabilization is enabled. */ 857 CAM_INTF_META_LENS_OPT_STAB_MODE, 858 /* Current lens status */ 859 CAM_INTF_META_LENS_STATE, 860 /* NOISE REDUCTION */ 861 /* Mode of operation for the noise reduction algorithm */ 862 CAM_INTF_META_NOISE_REDUCTION_MODE, 863 /* Control the amount of noise reduction applied to the images. 864 * 1-10; 10 is max noise reduction */ 865 CAM_INTF_META_NOISE_REDUCTION_STRENGTH, 866 /* SCALER */ 867 /* Top-left corner and width of the output region to select from the active 868 * pixel array */ 869 CAM_INTF_META_SCALER_CROP_REGION, 870 /* SENSOR */ 871 /* Duration each pixel is exposed to light, in nanoseconds */ 872 CAM_INTF_META_SENSOR_EXPOSURE_TIME, 873 /* Duration from start of frame exposure to start of next frame exposure, 874 * in nanoseconds */ 875 CAM_INTF_META_SENSOR_FRAME_DURATION, 876 /* Gain applied to image data. Must be implemented through analog gain only 877 * if set to values below 'maximum analog sensitivity'. */ 878 CAM_INTF_META_SENSOR_SENSITIVITY, 879 /* Time at start of exposure of first row */ 880 CAM_INTF_META_SENSOR_TIMESTAMP, 881 /* SHADING */ 882 /* Quality of lens shading correction applied to the image data */ 883 CAM_INTF_META_SHADING_MODE, 884 /* Control the amount of shading correction applied to the images. 885 * unitless: 1-10; 10 is full shading compensation */ 886 CAM_INTF_META_SHADING_STRENGTH, 887 /* STATISTICS */ 888 /* State of the face detector unit */ 889 CAM_INTF_META_STATS_FACEDETECT_MODE, 890 /* Operating mode for histogram generation */ 891 CAM_INTF_META_STATS_HISTOGRAM_MODE, 892 /* Operating mode for sharpness map generation */ 893 CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, 894 /* A 3-channel sharpness map, based on the raw sensor data, 895 * If only a monochrome sharpness map is supported, all channels 896 * should have the same data 897 */ 898 CAM_INTF_META_STATS_SHARPNESS_MAP, 899 900 /* TONEMAP */ 901 /* Table mapping blue input values to output values */ 902 CAM_INTF_META_TONEMAP_CURVE_BLUE, 903 /* Table mapping green input values to output values */ 904 CAM_INTF_META_TONEMAP_CURVE_GREEN, 905 /* Table mapping red input values to output values */ 906 CAM_INTF_META_TONEMAP_CURVE_RED, 907 /* Tone map mode */ 908 CAM_INTF_META_TONEMAP_MODE, 909 CAM_INTF_META_FLASH_MODE, 910 CAM_INTF_META_PRIVATE_DATA, 911 CAM_INTF_PARM_MAX 912} cam_intf_parm_type_t; 913 914/***************************************************************************** 915 * Code for HAL3 data types * 916 ****************************************************************************/ 917typedef enum { 918 CAM_INTF_METADATA_MAX 919} cam_intf_metadata_type_t; 920 921typedef enum { 922 CAM_INTENT_CUSTOM, 923 CAM_INTENT_PREVIEW, 924 CAM_INTENT_STILL_CAPTURE, 925 CAM_INTENT_VIDEO_RECORD, 926 CAM_INTENT_VIDEO_SNAPSHOT, 927 CAM_INTENT_ZERO_SHUTTER_LAG, 928 CAM_INTENT_MAX, 929} cam_intent_t; 930 931typedef enum { 932 /* Full application control of pipeline. All 3A routines are disabled, 933 * no other settings in android.control.* have any effect */ 934 CAM_CONTROL_OFF, 935 /* Use settings for each individual 3A routine. Manual control of capture 936 * parameters is disabled. All controls in android.control.* besides sceneMode 937 * take effect */ 938 CAM_CONTROL_AUTO, 939 /* Use specific scene mode. Enabling this disables control.aeMode, 940 * control.awbMode and control.afMode controls; the HAL must ignore those 941 * settings while USE_SCENE_MODE is active (except for FACE_PRIORITY scene mode). 942 * Other control entries are still active. This setting can only be used if 943 * availableSceneModes != UNSUPPORTED. TODO: Should we remove this and handle this 944 * in HAL ?*/ 945 CAM_CONTROL_USE_SCENE_MODE, 946 CAM_CONTROL_MAX 947} cam_control_mode_t; 948 949typedef enum { 950 /* Use the android.colorCorrection.transform matrix to do color conversion */ 951 CAM_COLOR_CORRECTION_TRANSFORM_MATRIX, 952 /* Must not slow down frame rate relative to raw bayer output */ 953 CAM_COLOR_CORRECTION_FAST, 954 /* Frame rate may be reduced by high quality */ 955 CAM_COLOR_CORRECTION_HIGH_QUALITY, 956} cam_color_correct_mode_t; 957 958typedef struct { 959 /* 3x3 float matrix in row-major order. each element is in range of (0, 1) */ 960 float transform[3][3]; 961} cam_color_correct_matrix_t; 962 963#define CAM_FOCAL_LENGTHS_MAX 1 964#define CAM_APERTURES_MAX 1 965#define CAM_FILTER_DENSITIES_MAX 1 966#define CAM_MAX_MAP_HEIGHT 6 967#define CAM_MAX_MAP_WIDTH 6 968 969#define CAM_MAX_TONEMAP_CURVE_SIZE 128 970 971typedef struct { 972 int tonemap_points_cnt; 973 974 /* A 1D array of pairs of floats. 975 * Mapping a 0-1 input range to a 0-1 output range. 976 * The input range must be monotonically increasing with N, 977 * and values between entries should be linearly interpolated. 978 * For example, if the array is: [0.0, 0.0, 0.3, 0.5, 1.0, 1.0], 979 * then the input->output mapping for a few sample points would be: 980 * 0 -> 0, 0.15 -> 0.25, 0.3 -> 0.5, 0.5 -> 0.64 */ 981 float tonemap_points[CAM_MAX_TONEMAP_CURVE_SIZE][2]; 982} cam_tonemap_curve_t; 983 984typedef enum { 985 OFF, 986 FAST, 987 QUALITY, 988} cam_quality_preference_t; 989 990typedef enum { 991 CAM_FLASH_CTRL_OFF, 992 CAM_FLASH_CTRL_SINGLE, 993 CAM_FLASH_CTRL_TORCH 994} cam_flash_ctrl_t; 995 996typedef struct { 997 uint8_t ae_mode; 998 uint8_t awb_mode; 999 uint8_t af_mode; 1000} cam_scene_mode_overrides_t; 1001 1002typedef struct { 1003 int32_t left; 1004 int32_t top; 1005 int32_t width; 1006 int32_t height; 1007} cam_crop_region_t; 1008 1009typedef struct { 1010 /* Estimated sharpness for each region of the input image. 1011 * Normalized to be between 0 and maxSharpnessMapValue. 1012 * Higher values mean sharper (better focused) */ 1013 int32_t sharpness[CAM_MAX_MAP_WIDTH][CAM_MAX_MAP_HEIGHT]; 1014} cam_sharpness_map_t; 1015 1016typedef struct { 1017 int32_t min_value; 1018 int32_t max_value; 1019 int32_t def_value; 1020 int32_t step; 1021} cam_control_range_t; 1022 1023#define CAM_QCOM_FEATURE_FACE_DETECTION (1<<0) 1024#define CAM_QCOM_FEATURE_DENOISE2D (1<<1) 1025#define CAM_QCOM_FEATURE_CROP (1<<2) 1026#define CAM_QCOM_FEATURE_ROTATION (1<<3) 1027#define CAM_QCOM_FEATURE_FLIP (1<<4) 1028#define CAM_QCOM_FEATURE_HDR (1<<5) 1029#define CAM_QCOM_FEATURE_REGISTER_FACE (1<<6) 1030#define CAM_QCOM_FEATURE_SHARPNESS (1<<7) 1031#define CAM_QCOM_FEATURE_VIDEO_HDR (1<<8) 1032#define CAM_QCOM_FEATURE_CAC (1<<9) 1033 1034// Counter clock wise 1035typedef enum { 1036 ROTATE_0 = 1<<0, 1037 ROTATE_90 = 1<<1, 1038 ROTATE_180 = 1<<2, 1039 ROTATE_270 = 1<<3, 1040} cam_rotation_t; 1041 1042typedef enum { 1043 FLIP_H = 1<<0, 1044 FLIP_V = 1<<1, 1045} cam_flip_t; 1046 1047typedef struct { 1048 uint32_t bundle_id; /* bundle id */ 1049 uint8_t num_of_streams; /* number of streams in the bundle */ 1050 uint32_t stream_ids[MAX_STREAM_NUM_IN_BUNDLE]; /* array of stream ids to be bundled */ 1051} cam_bundle_config_t; 1052 1053typedef enum { 1054 CAM_ONLINE_REPROCESS_TYPE, /* online reprocess, frames from running streams */ 1055 CAM_OFFLINE_REPROCESS_TYPE, /* offline reprocess, frames from external source */ 1056} cam_reprocess_type_enum_t; 1057 1058typedef struct { 1059 /* reprocess feature mask */ 1060 uint32_t feature_mask; 1061 1062 /* individual setting for features to be reprocessed */ 1063 cam_denoise_param_t denoise2d; 1064 cam_rect_t input_crop; 1065 cam_rotation_t rotation; 1066 uint32_t flip; 1067 int32_t sharpness; 1068 int32_t hdr_need_1x; /* when CAM_QCOM_FEATURE_HDR enabled, indicate if 1x is needed for output */ 1069} cam_pp_feature_config_t; 1070 1071typedef struct { 1072 uint32_t input_stream_id; 1073 /* input source stream type */ 1074 cam_stream_type_t input_stream_type; 1075} cam_pp_online_src_config_t; 1076 1077typedef struct { 1078 /* image format */ 1079 cam_format_t input_fmt; 1080 1081 /* image dimension */ 1082 cam_dimension_t input_dim; 1083 1084 /* buffer plane information, will be calc based on stream_type, fmt, 1085 dim, and padding_info(from stream config). Info including: 1086 offset_x, offset_y, stride, scanline, plane offset */ 1087 cam_stream_buf_plane_info_t input_buf_planes; 1088 1089 /* number of input reprocess buffers */ 1090 uint8_t num_of_bufs; 1091} cam_pp_offline_src_config_t; 1092 1093/* reprocess stream input configuration */ 1094typedef struct { 1095 /* input source config */ 1096 cam_reprocess_type_enum_t pp_type; 1097 union { 1098 cam_pp_online_src_config_t online; 1099 cam_pp_offline_src_config_t offline; 1100 }; 1101 1102 /* pp feature config */ 1103 cam_pp_feature_config_t pp_feature_config; 1104} cam_stream_reproc_config_t; 1105 1106typedef struct { 1107 uint8_t crop_enabled; 1108 cam_rect_t input_crop; 1109} cam_crop_param_t; 1110 1111typedef struct { 1112 uint8_t trigger; 1113 int32_t trigger_id; 1114} cam_trigger_t; 1115 1116typedef struct { 1117 cam_denoise_param_t denoise; 1118 cam_crop_param_t crop; 1119 uint32_t flip; /* 0 means no flip */ 1120 int32_t sharpness; /* 0 means no sharpness */ 1121} cam_per_frame_pp_config_t; 1122 1123typedef enum { 1124 CAM_OPT_STAB_OFF, 1125 CAM_OPT_STAB_ON, 1126 CAM_OPT_STAB_MAX 1127} cam_optical_stab_modes_t; 1128 1129typedef enum { 1130 CAM_FILTER_ARRANGEMENT_RGGB, 1131 CAM_FILTER_ARRANGEMENT_GRBG, 1132 CAM_FILTER_ARRANGEMENT_GBRG, 1133 CAM_FILTER_ARRANGEMENT_BGGR, 1134 1135 /* Sensor is not Bayer; output has 3 16-bit values for each pixel, 1136 * instead of just 1 16-bit value per pixel.*/ 1137 CAM_FILTER_ARRANGEMENT_RGB 1138} cam_color_filter_arrangement_t; 1139 1140typedef enum { 1141 CAM_AF_STATE_INACTIVE, 1142 CAM_AF_STATE_PASSIVE_SCAN, 1143 CAM_AF_STATE_PASSIVE_FOCUSED, 1144 CAM_AF_STATE_ACTIVE_SCAN, 1145 CAM_AF_STATE_FOCUSED_LOCKED, 1146 CAM_AF_STATE_NOT_FOCUSED_LOCKED 1147} cam_af_state_t; 1148 1149typedef enum { 1150 CAM_AWB_STATE_INACTIVE, 1151 CAM_AWB_STATE_SEARCHING, 1152 CAM_AWB_STATE_CONVERGED, 1153 CAM_AWB_STATE_LOCKED 1154} cam_awb_state_t; 1155 1156#endif /* __QCAMERA_TYPES_H__ */ 1157