Home | History | Annotate | Download | only in linux
      1 /*
      2  * Samsung Exynos5 SoC series Camera API 2.0 HAL
      3  *
      4  * Internal Metadata (controls/dynamic metadata and static metadata)
      5  *
      6  * Copyright (c) 2012 Samsung Electronics Co., Ltd
      7  * Contact: Sungjoong Kang, <sj3.kang (at) samsung.com>
      8  *
      9  * This program is free software; you can redistribute it and/or modify
     10  * it under the terms of the GNU General Public License version 2 as
     11  * published by the Free Software Foundation.
     12  */
     13 
     14 /*2012.04.18 Version 0.1 Initial Release*/
     15 /*2012.04.23 Version 0.2 Added static metadata (draft)*/
     16 /*2012.07.04 Version 0.3 Applied google's undocumented changes (draft)*/
     17 /*2012.07.11 Version 0.4 Added FD parameters */
     18 /*2012.07.27 Version 0.5 Modified HSB control and DM */
     19 
     20 
     21 #ifndef FIMC_IS_METADATA_H_
     22 #define FIMC_IS_METADATA_H_
     23 
     24 struct rational {
     25 	uint32_t num;
     26 	uint32_t den;
     27 };
     28 
     29 #define CAMERA2_MAX_AVAILABLE_MODE	21
     30 #define CAMERA2_MAX_FACES		16
     31 
     32 #define CAMERA2_FACE_DETECTION_THRESHOLD    35
     33 
     34 /*
     35  *controls/dynamic metadata
     36 */
     37 
     38 /* android.request */
     39 
     40 enum metadata_mode {
     41 	METADATA_MODE_NONE,
     42 	METADATA_MODE_FULL
     43 };
     44 
     45 struct camera2_request_ctl {
     46 	uint32_t		id;
     47 	enum metadata_mode	metadataMode;
     48 	uint8_t			outputStreams[16];
     49 	uint32_t		frameCount;
     50 };
     51 
     52 struct camera2_request_dm {
     53 	uint32_t		id;
     54 	enum metadata_mode	metadataMode;
     55 	uint32_t		frameCount;
     56 };
     57 
     58 
     59 
     60 /* android.lens */
     61 
     62 enum optical_stabilization_mode {
     63 	OPTICAL_STABILIZATION_MODE_OFF,
     64 	OPTICAL_STABILIZATION_MODE_ON
     65 };
     66 
     67 enum lens_facing {
     68 	LENS_FACING_BACK,
     69 	LENS_FACING_FRONT
     70 };
     71 
     72 struct camera2_lens_ctl {
     73 	uint32_t				focusDistance;
     74 	float					aperture;
     75 	float					focalLength;
     76 	float					filterDensity;
     77 	enum optical_stabilization_mode		opticalStabilizationMode;
     78 
     79 };
     80 
     81 struct camera2_lens_dm {
     82 	uint32_t				focusDistance;
     83 	float					aperture;
     84 	float					focalLength;
     85 	float					filterDensity;
     86 	enum optical_stabilization_mode		opticalStabilizationMode;
     87 	float					focusRange[2];
     88 };
     89 
     90 struct camera2_lens_sm {
     91 	float				minimumFocusDistance;
     92 	float				hyperfocalDistance;
     93 	float				availableFocalLength[2];
     94 	float				availableApertures;
     95 	/*assuming 1 aperture*/
     96 	float				availableFilterDensities;
     97 	/*assuming 1 ND filter value*/
     98 	enum optical_stabilization_mode	availableOpticalStabilization;
     99 	/*assuming 1*/
    100 	uint32_t			shadingMapSize;
    101 	float				shadingMap[3][40][30];
    102 	uint32_t			geometricCorrectionMapSize;
    103 	float				geometricCorrectionMap[2][3][40][30];
    104 	enum lens_facing		facing;
    105 	float				position[2];
    106 };
    107 
    108 /* android.sensor */
    109 
    110 enum sensor_colorfilterarrangement {
    111 	SENSOR_COLORFILTERARRANGEMENT_RGGB,
    112 	SENSOR_COLORFILTERARRANGEMENT_GRBG,
    113 	SENSOR_COLORFILTERARRANGEMENT_GBRG,
    114 	SENSOR_COLORFILTERARRANGEMENT_BGGR,
    115 	SENSOR_COLORFILTERARRANGEMENT_RGB
    116 };
    117 
    118 enum sensor_ref_illuminant {
    119 	SENSOR_ILLUMINANT_DAYLIGHT = 1,
    120 	SENSOR_ILLUMINANT_FLUORESCENT = 2,
    121 	SENSOR_ILLUMINANT_TUNGSTEN = 3,
    122 	SENSOR_ILLUMINANT_FLASH = 4,
    123 	SENSOR_ILLUMINANT_FINE_WEATHER = 9,
    124 	SENSOR_ILLUMINANT_CLOUDY_WEATHER = 10,
    125 	SENSOR_ILLUMINANT_SHADE = 11,
    126 	SENSOR_ILLUMINANT_DAYLIGHT_FLUORESCENT = 12,
    127 	SENSOR_ILLUMINANT_DAY_WHITE_FLUORESCENT = 13,
    128 	SENSOR_ILLUMINANT_COOL_WHITE_FLUORESCENT = 14,
    129 	SENSOR_ILLUMINANT_WHITE_FLUORESCENT = 15,
    130 	SENSOR_ILLUMINANT_STANDARD_A = 17,
    131 	SENSOR_ILLUMINANT_STANDARD_B = 18,
    132 	SENSOR_ILLUMINANT_STANDARD_C = 19,
    133 	SENSOR_ILLUMINANT_D55 = 20,
    134 	SENSOR_ILLUMINANT_D65 = 21,
    135 	SENSOR_ILLUMINANT_D75 = 22,
    136 	SENSOR_ILLUMINANT_D50 = 23,
    137 	SENSOR_ILLUMINANT_ISO_STUDIO_TUNGSTEN = 24
    138 };
    139 
    140 struct camera2_sensor_ctl {
    141 	/* unit : nano */
    142 	uint64_t	exposureTime;
    143 	/* unit : nano(It's min frame duration */
    144 	uint64_t	frameDuration;
    145 	/* unit : percent(need to change ISO value?) */
    146 	uint32_t	sensitivity;
    147 };
    148 
    149 struct camera2_sensor_dm {
    150 	uint64_t	exposureTime;
    151 	uint64_t	frameDuration;
    152 	uint32_t	sensitivity;
    153 	uint64_t	timeStamp;
    154 };
    155 
    156 struct camera2_sensor_sm {
    157 	uint32_t	exposureTimeRange[2];
    158 	uint32_t	maxFrameDuration;
    159 	/* list of available sensitivities. */
    160 	uint32_t	availableSensitivities[10];
    161 	enum sensor_colorfilterarrangement colorFilterArrangement;
    162 	float		physicalSize[2];
    163 	uint32_t	pixelArraySize[2];
    164 	uint32_t	activeArraySize[4];
    165 	uint32_t	whiteLevel;
    166 	uint32_t	blackLevelPattern[4];
    167 	struct rational	colorTransform1[9];
    168 	struct rational	colorTransform2[9];
    169 	enum sensor_ref_illuminant	referenceIlluminant1;
    170 	enum sensor_ref_illuminant	referenceIlluminant2;
    171 	struct rational	forwardMatrix1[9];
    172 	struct rational	forwardMatrix2[9];
    173 	struct rational	calibrationTransform1[9];
    174 	struct rational	calibrationTransform2[9];
    175 	struct rational	baseGainFactor;
    176 	uint32_t	maxAnalogSensitivity;
    177 	float		noiseModelCoefficients[2];
    178 	uint32_t	orientation;
    179 };
    180 
    181 
    182 
    183 /* android.flash */
    184 
    185 enum flash_mode {
    186     CAM2_FLASH_MODE_NOP = 0,
    187     CAM2_FLASH_MODE_OFF = 1,
    188     CAM2_FLASH_MODE_SINGLE,
    189     CAM2_FLASH_MODE_TORCH,
    190     CAM2_FLASH_MODE_BEST
    191 };
    192 
    193 struct camera2_flash_ctl {
    194 	enum flash_mode		flashMode;
    195 	uint32_t		firingPower;
    196 	uint64_t		firingTime;
    197 };
    198 
    199 struct camera2_flash_dm {
    200 	enum flash_mode		flashMode;
    201 	/*10 is max power*/
    202 	uint32_t		firingPower;
    203 	/*unit : microseconds*/
    204 	uint64_t		firingTime;
    205 	/*1 : stable, 0 : unstable*/
    206 	uint32_t		firingStable;
    207 	/*1 : flash required, 2 : flash not required */
    208 	uint32_t		decision;
    209 };
    210 
    211 struct camera2_flash_sm {
    212 	uint32_t	available;
    213 	uint64_t	chargeDuration;
    214 };
    215 
    216 
    217 /* android.hotpixel */
    218 
    219 enum processing_mode {
    220 	PROCESSING_MODE_OFF = 1,
    221 	PROCESSING_MODE_FAST,
    222 	PROCESSING_MODE_HIGH_QUALITY
    223 };
    224 
    225 
    226 struct camera2_hotpixel_ctl {
    227 	enum processing_mode	mode;
    228 };
    229 
    230 struct camera2_hotpixel_dm {
    231 	enum processing_mode	mode;
    232 };
    233 
    234 
    235 
    236 /* android.demosaic */
    237 
    238 struct camera2_demosaic_ctl {
    239 	enum processing_mode	mode;
    240 };
    241 
    242 struct camera2_demosaic_dm {
    243 	enum processing_mode	mode;
    244 };
    245 
    246 
    247 
    248 /* android.noiseReduction */
    249 
    250 struct camera2_noisereduction_ctl {
    251 	enum processing_mode	mode;
    252 	uint32_t		strength;
    253 };
    254 
    255 struct camera2_noisereduction_dm {
    256 	enum processing_mode	mode;
    257 	uint32_t		strength;
    258 };
    259 
    260 
    261 
    262 /* android.shading */
    263 
    264 struct camera2_shading_ctl {
    265 	enum processing_mode	mode;
    266 };
    267 
    268 struct camera2_shading_dm {
    269 	enum processing_mode	mode;
    270 };
    271 
    272 
    273 
    274 /* android.geometric */
    275 
    276 struct camera2_geometric_ctl {
    277 	enum processing_mode	mode;
    278 };
    279 
    280 struct camera2_geometric_dm {
    281 	enum processing_mode	mode;
    282 };
    283 
    284 
    285 
    286 /* android.colorCorrection */
    287 
    288 enum colorcorrection_mode {
    289 	COLORCORRECTION_MODE_FAST = 1,
    290 	COLORCORRECTION_MODE_HIGH_QUALITY,
    291 	COLORCORRECTION_MODE_TRANSFORM_MATRIX,
    292 	COLORCORRECTION_MODE_EFFECT_MONO,
    293 	COLORCORRECTION_MODE_EFFECT_NEGATIVE,
    294 	COLORCORRECTION_MODE_EFFECT_SOLARIZE,
    295 	COLORCORRECTION_MODE_EFFECT_SEPIA,
    296 	COLORCORRECTION_MODE_EFFECT_POSTERIZE,
    297 	COLORCORRECTION_MODE_EFFECT_WHITEBOARD,
    298 	COLORCORRECTION_MODE_EFFECT_BLACKBOARD,
    299 	COLORCORRECTION_MODE_EFFECT_AQUA
    300 };
    301 
    302 
    303 struct camera2_colorcorrection_ctl {
    304 	enum colorcorrection_mode	mode;
    305 	float				transform[9];
    306 	uint32_t			hue;
    307 	uint32_t			saturation;
    308 	uint32_t			brightness;
    309 };
    310 
    311 struct camera2_colorcorrection_dm {
    312 	enum colorcorrection_mode	mode;
    313 	float				transform[9];
    314 	uint32_t			hue;
    315 	uint32_t			saturation;
    316 	uint32_t			brightness;
    317 };
    318 
    319 struct camera2_colorcorrection_sm {
    320 	/*assuming 10 supported modes*/
    321 	uint8_t			availableModes[CAMERA2_MAX_AVAILABLE_MODE];
    322 	uint32_t		hueRange[2];
    323 	uint32_t		saturationRange[2];
    324 	uint32_t		brightnessRange[2];
    325 };
    326 
    327 
    328 /* android.tonemap */
    329 
    330 enum tonemap_mode {
    331 	TONEMAP_MODE_FAST = 1,
    332 	TONEMAP_MODE_HIGH_QUALITY,
    333 	TONEMAP_MODE_CONTRAST_CURVE
    334 };
    335 
    336 struct camera2_tonemap_ctl {
    337 	enum tonemap_mode		mode;
    338 	/* assuming maxCurvePoints = 64 */
    339 	float				curveRed[64];
    340 	float				curveGreen[64];
    341 	float				curveBlue[64];
    342 };
    343 
    344 struct camera2_tonemap_dm {
    345 	enum tonemap_mode		mode;
    346 	/* assuming maxCurvePoints = 64 */
    347 	float				curveRed[64];
    348 	float				curveGreen[64];
    349 	float				curveBlue[64];
    350 };
    351 
    352 struct camera2_tonemap_sm {
    353 	uint32_t	maxCurvePoints;
    354 };
    355 
    356 /* android.edge */
    357 
    358 struct camera2_edge_ctl {
    359 	enum processing_mode	mode;
    360 	uint32_t		strength;
    361 };
    362 
    363 struct camera2_edge_dm {
    364 	enum processing_mode	mode;
    365 	uint32_t		strength;
    366 };
    367 
    368 
    369 
    370 /* android.scaler */
    371 
    372 enum scaler_availableformats {
    373 	SCALER_FORMAT_BAYER_RAW,
    374 	SCALER_FORMAT_YV12,
    375 	SCALER_FORMAT_NV21,
    376 	SCALER_FORMAT_JPEG,
    377 	SCALER_FORMAT_UNKNOWN
    378 };
    379 
    380 struct camera2_scaler_ctl {
    381 	uint32_t	cropRegion[3];
    382 };
    383 
    384 struct camera2_scaler_dm {
    385 	uint32_t	cropRegion[3];
    386 };
    387 
    388 struct camera2_scaler_sm {
    389 	enum scaler_availableformats availableFormats[4];
    390 	/*assuming # of availableFormats = 4*/
    391 	uint32_t	availableRawSizes;
    392 	uint64_t	availableRawMinDurations;
    393 	/* needs check */
    394 	uint32_t	availableProcessedSizes[8];
    395 	uint64_t	availableProcessedMinDurations[8];
    396 	uint32_t	availableJpegSizes[8][2];
    397 	uint64_t	availableJpegMinDurations[8];
    398 	uint32_t	availableMaxDigitalZoom[8];
    399 };
    400 
    401 /* android.jpeg */
    402 struct camera2_jpeg_ctl {
    403 	uint32_t	quality;
    404 	uint32_t	thumbnailSize[2];
    405 	uint32_t	thumbnailQuality;
    406 	double		gpsCoordinates[3];
    407 	uint32_t	gpsProcessingMethod;
    408 	uint64_t	gpsTimestamp;
    409 	uint32_t	orientation;
    410 };
    411 
    412 struct camera2_jpeg_dm {
    413 	uint32_t	quality;
    414 	uint32_t	thumbnailSize[2];
    415 	uint32_t	thumbnailQuality;
    416 	double		gpsCoordinates[3];
    417 	uint32_t	gpsProcessingMethod;
    418 	uint64_t	gpsTimestamp;
    419 	uint32_t	orientation;
    420 };
    421 
    422 struct camera2_jpeg_sm {
    423 	uint32_t	availableThumbnailSizes[8][2];
    424 	uint32_t	maxSize;
    425 	/*assuming supported size=8*/
    426 };
    427 
    428 
    429 
    430 /* android.statistics */
    431 
    432 enum facedetect_mode {
    433 	FACEDETECT_MODE_OFF = 1,
    434 	FACEDETECT_MODE_SIMPLE,
    435 	FACEDETECT_MODE_FULL
    436 };
    437 
    438 enum stats_mode {
    439 	STATS_MODE_OFF = 1,
    440 	STATS_MODE_ON
    441 };
    442 
    443 struct camera2_stats_ctl {
    444 	enum facedetect_mode	faceDetectMode;
    445 	enum stats_mode		histogramMode;
    446 	enum stats_mode		sharpnessMapMode;
    447 };
    448 
    449 
    450 struct camera2_stats_dm {
    451 	enum facedetect_mode	faceDetectMode;
    452 	uint32_t		faceRectangles[CAMERA2_MAX_FACES][4];
    453 	uint8_t			faceScores[CAMERA2_MAX_FACES];
    454 	uint32_t		faceLandmarks[CAMERA2_MAX_FACES][6];
    455 	uint32_t		faceIds[CAMERA2_MAX_FACES];
    456 /* PAYTON_CHECK_20120712 : histogram_mode -> stats_mode */
    457 	enum stats_mode		histogramMode;
    458 /* [hj529.kim, 2012/07/19] androd.statistics.histogram */
    459 	uint32_t		histogram[3 * 256];
    460 /* PAYTON_CHECK_20120712 : sharpnessmap_mode -> stats_mode */
    461 	enum stats_mode		sharpnessMapMode;
    462 	/*sharpnessMap*/
    463 };
    464 
    465 
    466 struct camera2_stats_sm {
    467 	uint8_t		availableFaceDetectModes[CAMERA2_MAX_AVAILABLE_MODE];
    468 	/*assuming supported modes = 3;*/
    469 	uint32_t	maxFaceCount;
    470 	uint32_t	histogramBucketCount;
    471 	uint32_t	maxHistogramCount;
    472 	uint32_t	sharpnessMapSize[2];
    473 	uint32_t	maxSharpnessMapValue;
    474 };
    475 
    476 /* android.control */
    477 
    478 enum aa_capture_intent {
    479 	AA_CAPTURE_INTENT_CUSTOM = 0,
    480 	AA_CAPTURE_INTENT_PREVIEW,
    481 	AA_CAPTURE_INTENT_STILL_CAPTURE,
    482 	AA_CAPTURE_INTENT_VIDEO_RECORD,
    483 	AA_CAPTURE_INTENT_VIDEO_SNAPSHOT,
    484 	AA_CAPTURE_INTENT_ZERO_SHUTTER_LAG
    485 };
    486 
    487 enum aa_mode {
    488 	AA_CONTROL_NONE = 0,
    489 	AA_CONTROL_OFF,
    490 	AA_CONTROL_AUTO,
    491 	AA_CONTROL_USE_SCENE_MODE
    492 };
    493 
    494 enum aa_scene_mode {
    495 	AA_SCENE_MODE_UNSUPPORTED = 1,
    496 	AA_SCENE_MODE_FACE_PRIORITY,
    497 	AA_SCENE_MODE_ACTION,
    498 	AA_SCENE_MODE_PORTRAIT,
    499 	AA_SCENE_MODE_LANDSCAPE,
    500 	AA_SCENE_MODE_NIGHT,
    501 	AA_SCENE_MODE_NIGHT_PORTRAIT,
    502 	AA_SCENE_MODE_THEATRE,
    503 	AA_SCENE_MODE_BEACH,
    504 	AA_SCENE_MODE_SNOW,
    505 	AA_SCENE_MODE_SUNSET,
    506 	AA_SCENE_MODE_STEADYPHOTO,
    507 	AA_SCENE_MODE_FIREWORKS,
    508 	AA_SCENE_MODE_SPORTS,
    509 	AA_SCENE_MODE_PARTY,
    510 	AA_SCENE_MODE_CANDLELIGHT,
    511 	AA_SCENE_MODE_BARCODE,
    512 	AA_SCENE_MODE_NIGHT_CAPTURE, /* part of night mode */
    513 	AA_SCENE_MODE_MAX
    514 };
    515 
    516 enum aa_effect_mode {
    517 	AA_EFFECT_OFF = 1,
    518 	AA_EFFECT_MONO,
    519 	AA_EFFECT_NEGATIVE,
    520 	AA_EFFECT_SOLARIZE,
    521 	AA_EFFECT_SEPIA,
    522 	AA_EFFECT_POSTERIZE,
    523 	AA_EFFECT_WHITEBOARD,
    524 	AA_EFFECT_BLACKBOARD,
    525 	AA_EFFECT_AQUA
    526 };
    527 
    528 enum aa_aemode {
    529 	AA_AEMODE_OFF = 1,
    530 	AA_AEMODE_LOCKED,
    531 	AA_AEMODE_ON,
    532 	AA_AEMODE_ON_AUTO_FLASH,
    533 	AA_AEMODE_ON_ALWAYS_FLASH,
    534 	AA_AEMODE_ON_AUTO_FLASH_REDEYE
    535 };
    536 
    537 enum aa_ae_flashmode {
    538 	AA_FLASHMODE_NOP = 0,
    539 	/*all flash control stop*/
    540 	AA_FLASHMODE_OFF = 1,
    541 	/*internal 3A can control flash*/
    542 	AA_FLASHMODE_ON,
    543 	/*internal 3A can do auto flash algorithm*/
    544 	AA_FLASHMODE_AUTO,
    545 	/*internal 3A can fire flash by auto result*/
    546 	AA_FLASHMODE_CAPTURE,
    547 	/*internal 3A can control flash*/
    548 	AA_FLASHMODE_ON_ALWAYS
    549 };
    550 
    551 enum aa_ae_antibanding_mode {
    552 	AA_AE_ANTIBANDING_OFF = 1,
    553 	AA_AE_ANTIBANDING_50HZ,
    554 	AA_AE_ANTIBANDING_60HZ,
    555 	AA_AE_ANTIBANDING_AUTO
    556 };
    557 
    558 enum aa_awbmode {
    559 	AA_AWBMODE_OFF = 1,
    560 	AA_AWBMODE_LOCKED,
    561 	AA_AWBMODE_WB_AUTO,
    562 	AA_AWBMODE_WB_INCANDESCENT,
    563 	AA_AWBMODE_WB_FLUORESCENT,
    564 	AA_AWBMODE_WB_WARM_FLUORESCENT,
    565 	AA_AWBMODE_WB_DAYLIGHT,
    566 	AA_AWBMODE_WB_CLOUDY_DAYLIGHT,
    567 	AA_AWBMODE_WB_TWILIGHT,
    568 	AA_AWBMODE_WB_SHADE
    569 };
    570 
    571 enum aa_afmode {
    572 	NO_CHANGE = 0,
    573 	AA_AFMODE_OFF = 1,
    574 	AA_AFMODE_AUTO,
    575 	AA_AFMODE_MACRO,
    576 	AA_AFMODE_CONTINUOUS_VIDEO,
    577 	AA_AFMODE_CONTINUOUS_PICTURE,
    578 	AA_AFMODE_INFINITY,
    579 	AA_AFMODE_AUTO_FACE,
    580 	AA_AFMODE_CONTINUOUS_VIDEO_FACE,
    581 	AA_AFMODE_CONTINUOUS_PICTURE_FACE,
    582 	AA_AFMODE_MANUAL,
    583 	AA_AFMODE_EDOF
    584 };
    585 
    586 enum aa_afstate {
    587 	AA_AFSTATE_INACTIVE = 1,
    588 	AA_AFSTATE_PASSIVE_SCAN,
    589 	AA_AFSTATE_ACTIVE_SCAN,
    590 	AA_AFSTATE_AF_ACQUIRED_FOCUS,
    591 	AA_AFSTATE_AF_FAILED_FOCUS
    592 };
    593 
    594 enum ae_state {
    595 	AE_STATE_INACTIVE = 1,
    596 	AE_STATE_SEARCHING,
    597 	AE_STATE_CONVERGED,
    598 	AE_STATE_LOCKED,
    599 	AE_STATE_FLASH_REQUIRED,
    600 	AE_STATE_PRECAPTURE
    601 };
    602 
    603 enum awb_state {
    604 	AWB_STATE_INACTIVE = 1,
    605 	AWB_STATE_SEARCHING,
    606 	AWB_STATE_CONVERGED,
    607 	AWB_STATE_LOCKED
    608 };
    609 
    610 enum aa_isomode {
    611 	AA_ISOMODE_AUTO = 1,
    612 	AA_ISOMODE_MANUAL,
    613 };
    614 
    615 enum ae_lockmode {
    616     AEMODE_LOCK_OFF = 0,
    617     AEMODE_LOCK_ON,
    618 };
    619 
    620 enum awb_lockmode {
    621     AWBMODE_LOCK_OFF = 0,
    622     AWBMODE_LOCK_ON,
    623 };
    624 
    625 struct camera2_aa_ctl {
    626 	enum aa_capture_intent		captureIntent;
    627 	enum aa_mode			mode;
    628 	enum aa_scene_mode		sceneMode;
    629 	uint32_t			videoStabilizationMode;
    630 	enum aa_aemode			aeMode;
    631 	uint32_t			aeRegions[5];
    632 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
    633 	int32_t				aeExpCompensation;
    634 	uint32_t			aeTargetFpsRange[2];
    635 	enum aa_ae_antibanding_mode	aeAntibandingMode;
    636 	enum aa_ae_flashmode		aeflashMode;
    637 	enum aa_awbmode			awbMode;
    638 	uint32_t			awbRegions[5];
    639 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
    640 	enum aa_afmode			afMode;
    641 	uint32_t			afRegions[5];
    642 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
    643 	uint32_t			afTrigger;
    644 	enum aa_isomode			isoMode;
    645 	uint32_t			isoValue;
    646 
    647 };
    648 
    649 struct camera2_aa_dm {
    650 	enum aa_mode				mode;
    651 	enum aa_effect_mode			effectMode;
    652 	enum aa_scene_mode			sceneMode;
    653 	uint32_t				videoStabilizationMode;
    654 	enum aa_aemode				aeMode;
    655 	/*needs check*/
    656 	uint32_t				aeRegions[5];
    657 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
    658 	enum ae_state				aeState;
    659 	enum aa_ae_flashmode			aeflashMode;
    660 	/*needs check*/
    661 	enum aa_awbmode				awbMode;
    662 	uint32_t				awbRegions[5];
    663 	enum awb_state				awbState;
    664 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/
    665 	enum aa_afmode				afMode;
    666 	uint32_t				afRegions[5];
    667 	/*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region*/
    668 	enum aa_afstate				afState;
    669 	enum aa_isomode				isoMode;
    670 	uint32_t				isoValue;
    671 };
    672 
    673 struct camera2_aa_sm {
    674 	uint8_t		availableSceneModes[CAMERA2_MAX_AVAILABLE_MODE];
    675 	uint8_t		availableEffects[CAMERA2_MAX_AVAILABLE_MODE];
    676 	/*assuming # of available scene modes = 10*/
    677 	uint32_t	maxRegions;
    678 	uint8_t		aeAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    679 	/*assuming # of available ae modes = 8*/
    680 	struct rational	aeCompensationStep;
    681 	int32_t		aeCompensationRange[2];
    682 	uint32_t aeAvailableTargetFpsRanges[CAMERA2_MAX_AVAILABLE_MODE][2];
    683 	uint8_t		aeAvailableAntibandingModes[CAMERA2_MAX_AVAILABLE_MODE];
    684 	uint8_t		awbAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    685 	/*assuming # of awbAvailableModes = 10*/
    686 	uint8_t		afAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    687 	/*assuming # of afAvailableModes = 4*/
    688 	uint8_t availableVideoStabilizationModes[4];
    689 	/*assuming # of availableVideoStabilizationModes = 4*/
    690 	uint32_t	isoRange[2];
    691 };
    692 
    693 struct camera2_lens_usm {
    694 	/** Frame delay between sending command and applying frame data */
    695 	uint32_t	focusDistanceFrameDelay;
    696 };
    697 
    698 struct camera2_sensor_usm {
    699 	/** Frame delay between sending command and applying frame data */
    700 	uint32_t	exposureTimeFrameDelay;
    701 	uint32_t	frameDurationFrameDelay;
    702 	uint32_t	sensitivityFrameDelay;
    703 };
    704 
    705 struct camera2_flash_usm {
    706 	/** Frame delay between sending command and applying frame data */
    707 	uint32_t	flashModeFrameDelay;
    708 	uint32_t	firingPowerFrameDelay;
    709 	uint64_t	firingTimeFrameDelay;
    710 };
    711 
    712 struct camera2_ctl {
    713 	struct camera2_request_ctl		request;
    714 	struct camera2_lens_ctl			lens;
    715 	struct camera2_sensor_ctl		sensor;
    716 	struct camera2_flash_ctl		flash;
    717 	struct camera2_hotpixel_ctl		hotpixel;
    718 	struct camera2_demosaic_ctl		demosaic;
    719 	struct camera2_noisereduction_ctl	noise;
    720 	struct camera2_shading_ctl		shading;
    721 	struct camera2_geometric_ctl		geometric;
    722 	struct camera2_colorcorrection_ctl	color;
    723 	struct camera2_tonemap_ctl		tonemap;
    724 	struct camera2_edge_ctl			edge;
    725 	struct camera2_scaler_ctl		scaler;
    726 	struct camera2_jpeg_ctl			jpeg;
    727 	struct camera2_stats_ctl		stats;
    728 	struct camera2_aa_ctl			aa;
    729 };
    730 
    731 struct camera2_dm {
    732 	struct camera2_request_dm		request;
    733 	struct camera2_lens_dm			lens;
    734 	struct camera2_sensor_dm		sensor;
    735 	struct camera2_flash_dm			flash;
    736 	struct camera2_hotpixel_dm		hotpixel;
    737 	struct camera2_demosaic_dm		demosaic;
    738 	struct camera2_noisereduction_dm	noise;
    739 	struct camera2_shading_dm		shading;
    740 	struct camera2_geometric_dm		geometric;
    741 	struct camera2_colorcorrection_dm	color;
    742 	struct camera2_tonemap_dm		tonemap;
    743 	struct camera2_edge_dm			edge;
    744 	struct camera2_scaler_dm		scaler;
    745 	struct camera2_jpeg_dm			jpeg;
    746 	struct camera2_stats_dm			stats;
    747 	struct camera2_aa_dm			aa;
    748 };
    749 
    750 struct camera2_sm {
    751 	struct camera2_lens_sm			lens;
    752 	struct camera2_sensor_sm		sensor;
    753 	struct camera2_flash_sm			flash;
    754 	struct camera2_colorcorrection_sm	color;
    755 	struct camera2_tonemap_sm		tonemap;
    756 	struct camera2_scaler_sm		scaler;
    757 	struct camera2_jpeg_sm			jpeg;
    758 	struct camera2_stats_sm			stats;
    759 	struct camera2_aa_sm			aa;
    760 
    761 	/** User-defined(ispfw specific) static metadata. */
    762 	struct camera2_lens_usm			lensUd;
    763 	struct camera2_sensor_usm		sensorUd;
    764 	struct camera2_flash_usm		flashUd;
    765 };
    766 
    767 /** \brief
    768 	User-defined control for lens.
    769 */
    770 struct camera2_lens_uctl {
    771 	struct camera2_lens_ctl ctl;
    772 
    773 	/** It depends by af algorithm(normally 255 or 1023) */
    774 	uint32_t        maxPos;
    775 	/** Some actuator support slew rate control. */
    776 	uint32_t        slewRate;
    777 };
    778 
    779 /** \brief
    780 	User-defined metadata for lens.
    781 */
    782 struct camera2_lens_udm {
    783 	/** It depends by af algorithm(normally 255 or 1023) */
    784 	uint32_t        maxPos;
    785 	/** Some actuator support slew rate control. */
    786 	uint32_t        slewRate;
    787 };
    788 
    789 /** \brief
    790 	User-defined control for sensor.
    791 */
    792 struct camera2_sensor_uctl {
    793 	struct camera2_sensor_ctl ctl;
    794 	/** Dynamic frame duration.
    795 	This feature is decided to max. value between
    796 	'sensor.exposureTime'+alpha and 'sensor.frameDuration'.
    797 	*/
    798 	uint64_t        dynamicFrameDuration;
    799 };
    800 
    801 struct camera2_scaler_uctl {
    802 	/** \brief
    803 	target address for next frame.
    804 	\remarks
    805 	[0] invalid address, stop
    806 	[others] valid address
    807 	*/
    808 	uint32_t sccTargetAddress[4];
    809 	uint32_t scpTargetAddress[4];
    810 };
    811 
    812 struct camera2_flash_uctl {
    813 	struct camera2_flash_ctl ctl;
    814 };
    815 
    816 /** \brief
    817 	User-defined control area.
    818     \remarks
    819 	sensor, lens, flash category is empty value.
    820 	It should be filled by a5 for SET_CAM_CONTROL command.
    821 	Other category is filled already from host.
    822 */
    823 struct camera2_uctl {
    824 	/** \brief
    825 	Set sensor, lens, flash control for next frame.
    826 	\remarks
    827 	This flag can be combined.
    828 	[0 bit] lens
    829 	[1 bit] sensor
    830 	[2 bit] flash
    831 	*/
    832 	uint32_t uUpdateBitMap;
    833 
    834 	/** For debugging */
    835 	uint32_t uFrameNumber;
    836 
    837 	/** ispfw specific control(user-defined) of lens. */
    838 	struct camera2_lens_uctl	lensUd;
    839 	/** ispfw specific control(user-defined) of sensor. */
    840 	struct camera2_sensor_uctl	sensorUd;
    841 	/** ispfw specific control(user-defined) of flash. */
    842 	struct camera2_flash_uctl	flashUd;
    843 
    844 	struct camera2_scaler_uctl	scalerUd;
    845 };
    846 
    847 struct camera2_udm {
    848 	struct camera2_lens_udm		lens;
    849 };
    850 
    851 struct camera2_shot {
    852 	/*google standard area*/
    853 	struct camera2_ctl	ctl;
    854 	struct camera2_dm	dm;
    855 	/*user defined area*/
    856 	struct camera2_uctl	uctl;
    857 	struct camera2_udm	udm;
    858 	/*magic : 23456789*/
    859 	uint32_t		magicNumber;
    860 };
    861 
    862 /** \brief
    863 	Structure for interfacing between HAL and driver.
    864 */
    865 struct camera2_shot_ext {
    866 	/**	\brief
    867 		setfile change
    868 		\remarks
    869 		[x] mode for setfile
    870 	*/
    871 	uint32_t		setfile;
    872 
    873 	/**	\brief
    874 		stream control
    875 		\remarks
    876 		[0] disable stream out
    877 		[1] enable stream out
    878 	*/
    879 	uint32_t		request_sensor;
    880 	uint32_t		request_scc;
    881 	uint32_t		request_scp;
    882 
    883 	/**	\brief
    884 		post processing control(DRC)
    885 		\remarks
    886 		[0] bypass off
    887 		[1] bypass on
    888 	*/
    889 	uint32_t		drc_bypass;
    890 
    891 	/**	\brief
    892 		post processing control(DIS)
    893 		\remarks
    894 		[0] bypass off
    895 		[1] bypass on
    896 	*/
    897 	uint32_t		dis_bypass;
    898 
    899 	/**	\brief
    900 		post processing control(3DNR)
    901 		\remarks
    902 		[0] bypass off
    903 		[1] bypass on
    904 	*/
    905 	uint32_t		dnr_bypass;
    906 
    907 	/**	\brief
    908 		post processing control(FD)
    909 		\remarks
    910 		[0] bypass off
    911 		[1] bypass on
    912 	*/
    913 	uint32_t		fd_bypass;
    914 
    915 	/* reserved for future */
    916 	uint32_t		reserved[20];
    917 
    918 	/**	\brief
    919 		processing time debugging
    920 		\remarks
    921 		taken time(unit : struct timeval)
    922 		[0][x] flite start
    923 		[1][x] flite end
    924 		[2][x] DRV Shot
    925 		[3][x] DRV Shot done
    926 		[4][x] DRV Meta done
    927 	*/
    928 	uint32_t		timeZone[10][2];
    929 
    930 	struct camera2_shot	shot;
    931     uint8_t		gpsProcessingMethod[32];
    932     uint8_t     isReprocessing;
    933     uint8_t     reprocessInput;
    934     enum ae_lockmode        ae_lock; // this field is used in cameraHAL only
    935     enum awb_lockmode       awb_lock; // this field is used in cameraHAL only
    936     enum aa_awbmode         awb_mode_dm;
    937 };
    938 
    939 /** \brief
    940 	stream structure for scaler.
    941 */
    942 struct camera2_stream {
    943 	/**	\brief
    944 		this address for verifying conincidence of index and address
    945 		\remarks
    946 		[X] kernel virtual address for this buffer
    947 	*/
    948 	uint32_t		address;
    949 
    950 	/**	\brief
    951 		this frame count is from FLITE through dm.request.fcount,
    952 		this count increases every frame end. initial value is 1.
    953 		\remarks
    954 		[X] frame count
    955 	*/
    956 	uint32_t		fcount;
    957 
    958 	/**	\brief
    959 		this request count is from HAL through ctl.request.fcount,
    960 		this count is the unique.
    961 		\remarks
    962 		[X] request count
    963 	*/
    964 	uint32_t		rcount;
    965 
    966 	/**	\brief
    967 		frame index of isp framemgr.
    968 		this value is for driver internal debugging
    969 		\remarks
    970 		[X] frame index
    971 	*/
    972 	uint32_t		findex;
    973 };
    974 
    975 #define CAM_LENS_CMD		(0x1 << 0x0)
    976 #define CAM_SENSOR_CMD		(0x1 << 0x1)
    977 #define CAM_FLASH_CMD		(0x1 << 0x2)
    978 
    979 
    980 #endif
    981 
    982