| /* |
| * Samsung Exynos5 SoC series Camera API 2.0 HAL |
| * |
| * Internal Metadata (controls/dynamic metadata and static metadata) |
| * |
| * Copyright (c) 2012 Samsung Electronics Co., Ltd |
| * Contact: Sungjoong Kang, <sj3.kang@samsung.com> |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| */ |
| |
| /*2012.04.18 Version 0.1 Initial Release*/ |
| /*2012.04.23 Version 0.2 Added static metadata (draft)*/ |
| /*2012.07.04 Version 0.3 Applied google's undocumented changes (draft)*/ |
| /*2012.07.11 Version 0.4 Added FD parameters */ |
| /*2012.07.27 Version 0.5 Modified HSB control and DM */ |
| |
| |
| #ifndef FIMC_IS_METADATA_H_ |
| #define FIMC_IS_METADATA_H_ |
| |
| struct rational { |
| uint32_t num; |
| uint32_t den; |
| }; |
| |
| #define CAMERA2_MAX_AVAILABLE_MODE 21 |
| #define CAMERA2_MAX_FACES 16 |
| |
| #define CAMERA2_FACE_DETECTION_THRESHOLD 35 |
| |
| /* |
| *controls/dynamic metadata |
| */ |
| |
| /* android.request */ |
| |
| enum metadata_mode { |
| METADATA_MODE_NONE, |
| METADATA_MODE_FULL |
| }; |
| |
| struct camera2_request_ctl { |
| uint32_t id; |
| enum metadata_mode metadataMode; |
| uint8_t outputStreams[16]; |
| uint32_t frameCount; |
| }; |
| |
| struct camera2_request_dm { |
| uint32_t id; |
| enum metadata_mode metadataMode; |
| uint32_t frameCount; |
| }; |
| |
| |
| |
| /* android.lens */ |
| |
| enum optical_stabilization_mode { |
| OPTICAL_STABILIZATION_MODE_OFF, |
| OPTICAL_STABILIZATION_MODE_ON |
| }; |
| |
| enum lens_facing { |
| LENS_FACING_BACK, |
| LENS_FACING_FRONT |
| }; |
| |
| struct camera2_lens_ctl { |
| uint32_t focusDistance; |
| float aperture; |
| float focalLength; |
| float filterDensity; |
| enum optical_stabilization_mode opticalStabilizationMode; |
| |
| }; |
| |
| struct camera2_lens_dm { |
| uint32_t focusDistance; |
| float aperture; |
| float focalLength; |
| float filterDensity; |
| enum optical_stabilization_mode opticalStabilizationMode; |
| float focusRange[2]; |
| }; |
| |
| struct camera2_lens_sm { |
| float minimumFocusDistance; |
| float hyperfocalDistance; |
| float availableFocalLength[2]; |
| float availableApertures; |
| /*assuming 1 aperture*/ |
| float availableFilterDensities; |
| /*assuming 1 ND filter value*/ |
| enum optical_stabilization_mode availableOpticalStabilization; |
| /*assuming 1*/ |
| uint32_t shadingMapSize; |
| float shadingMap[3][40][30]; |
| uint32_t geometricCorrectionMapSize; |
| float geometricCorrectionMap[2][3][40][30]; |
| enum lens_facing facing; |
| float position[2]; |
| }; |
| |
| /* android.sensor */ |
| |
| enum sensor_colorfilterarrangement { |
| SENSOR_COLORFILTERARRANGEMENT_RGGB, |
| SENSOR_COLORFILTERARRANGEMENT_GRBG, |
| SENSOR_COLORFILTERARRANGEMENT_GBRG, |
| SENSOR_COLORFILTERARRANGEMENT_BGGR, |
| SENSOR_COLORFILTERARRANGEMENT_RGB |
| }; |
| |
| enum sensor_ref_illuminant { |
| SENSOR_ILLUMINANT_DAYLIGHT = 1, |
| SENSOR_ILLUMINANT_FLUORESCENT = 2, |
| SENSOR_ILLUMINANT_TUNGSTEN = 3, |
| SENSOR_ILLUMINANT_FLASH = 4, |
| SENSOR_ILLUMINANT_FINE_WEATHER = 9, |
| SENSOR_ILLUMINANT_CLOUDY_WEATHER = 10, |
| SENSOR_ILLUMINANT_SHADE = 11, |
| SENSOR_ILLUMINANT_DAYLIGHT_FLUORESCENT = 12, |
| SENSOR_ILLUMINANT_DAY_WHITE_FLUORESCENT = 13, |
| SENSOR_ILLUMINANT_COOL_WHITE_FLUORESCENT = 14, |
| SENSOR_ILLUMINANT_WHITE_FLUORESCENT = 15, |
| SENSOR_ILLUMINANT_STANDARD_A = 17, |
| SENSOR_ILLUMINANT_STANDARD_B = 18, |
| SENSOR_ILLUMINANT_STANDARD_C = 19, |
| SENSOR_ILLUMINANT_D55 = 20, |
| SENSOR_ILLUMINANT_D65 = 21, |
| SENSOR_ILLUMINANT_D75 = 22, |
| SENSOR_ILLUMINANT_D50 = 23, |
| SENSOR_ILLUMINANT_ISO_STUDIO_TUNGSTEN = 24 |
| }; |
| |
| struct camera2_sensor_ctl { |
| /* unit : nano */ |
| uint64_t exposureTime; |
| /* unit : nano(It's min frame duration */ |
| uint64_t frameDuration; |
| /* unit : percent(need to change ISO value?) */ |
| uint32_t sensitivity; |
| }; |
| |
| struct camera2_sensor_dm { |
| uint64_t exposureTime; |
| uint64_t frameDuration; |
| uint32_t sensitivity; |
| uint64_t timeStamp; |
| }; |
| |
| struct camera2_sensor_sm { |
| uint32_t exposureTimeRange[2]; |
| uint32_t maxFrameDuration; |
| /* list of available sensitivities. */ |
| uint32_t availableSensitivities[10]; |
| enum sensor_colorfilterarrangement colorFilterArrangement; |
| float physicalSize[2]; |
| uint32_t pixelArraySize[2]; |
| uint32_t activeArraySize[4]; |
| uint32_t whiteLevel; |
| uint32_t blackLevelPattern[4]; |
| struct rational colorTransform1[9]; |
| struct rational colorTransform2[9]; |
| enum sensor_ref_illuminant referenceIlluminant1; |
| enum sensor_ref_illuminant referenceIlluminant2; |
| struct rational forwardMatrix1[9]; |
| struct rational forwardMatrix2[9]; |
| struct rational calibrationTransform1[9]; |
| struct rational calibrationTransform2[9]; |
| struct rational baseGainFactor; |
| uint32_t maxAnalogSensitivity; |
| float noiseModelCoefficients[2]; |
| uint32_t orientation; |
| }; |
| |
| |
| |
| /* android.flash */ |
| |
| enum flash_mode { |
| CAM2_FLASH_MODE_NOP = 0, |
| CAM2_FLASH_MODE_OFF = 1, |
| CAM2_FLASH_MODE_SINGLE, |
| CAM2_FLASH_MODE_TORCH, |
| CAM2_FLASH_MODE_BEST |
| }; |
| |
| struct camera2_flash_ctl { |
| enum flash_mode flashMode; |
| uint32_t firingPower; |
| uint64_t firingTime; |
| }; |
| |
| struct camera2_flash_dm { |
| enum flash_mode flashMode; |
| /*10 is max power*/ |
| uint32_t firingPower; |
| /*unit : microseconds*/ |
| uint64_t firingTime; |
| /*1 : stable, 0 : unstable*/ |
| uint32_t firingStable; |
| /*1 : flash required, 2 : flash not required */ |
| uint32_t decision; |
| }; |
| |
| struct camera2_flash_sm { |
| uint32_t available; |
| uint64_t chargeDuration; |
| }; |
| |
| |
| /* android.hotpixel */ |
| |
| enum processing_mode { |
| PROCESSING_MODE_OFF = 1, |
| PROCESSING_MODE_FAST, |
| PROCESSING_MODE_HIGH_QUALITY |
| }; |
| |
| |
| struct camera2_hotpixel_ctl { |
| enum processing_mode mode; |
| }; |
| |
| struct camera2_hotpixel_dm { |
| enum processing_mode mode; |
| }; |
| |
| |
| |
| /* android.demosaic */ |
| |
| struct camera2_demosaic_ctl { |
| enum processing_mode mode; |
| }; |
| |
| struct camera2_demosaic_dm { |
| enum processing_mode mode; |
| }; |
| |
| |
| |
| /* android.noiseReduction */ |
| |
| struct camera2_noisereduction_ctl { |
| enum processing_mode mode; |
| uint32_t strength; |
| }; |
| |
| struct camera2_noisereduction_dm { |
| enum processing_mode mode; |
| uint32_t strength; |
| }; |
| |
| |
| |
| /* android.shading */ |
| |
| struct camera2_shading_ctl { |
| enum processing_mode mode; |
| }; |
| |
| struct camera2_shading_dm { |
| enum processing_mode mode; |
| }; |
| |
| |
| |
| /* android.geometric */ |
| |
| struct camera2_geometric_ctl { |
| enum processing_mode mode; |
| }; |
| |
| struct camera2_geometric_dm { |
| enum processing_mode mode; |
| }; |
| |
| |
| |
| /* android.colorCorrection */ |
| |
| enum colorcorrection_mode { |
| COLORCORRECTION_MODE_FAST = 1, |
| COLORCORRECTION_MODE_HIGH_QUALITY, |
| COLORCORRECTION_MODE_TRANSFORM_MATRIX, |
| COLORCORRECTION_MODE_EFFECT_MONO, |
| COLORCORRECTION_MODE_EFFECT_NEGATIVE, |
| COLORCORRECTION_MODE_EFFECT_SOLARIZE, |
| COLORCORRECTION_MODE_EFFECT_SEPIA, |
| COLORCORRECTION_MODE_EFFECT_POSTERIZE, |
| COLORCORRECTION_MODE_EFFECT_WHITEBOARD, |
| COLORCORRECTION_MODE_EFFECT_BLACKBOARD, |
| COLORCORRECTION_MODE_EFFECT_AQUA |
| }; |
| |
| |
| struct camera2_colorcorrection_ctl { |
| enum colorcorrection_mode mode; |
| float transform[9]; |
| uint32_t hue; |
| uint32_t saturation; |
| uint32_t brightness; |
| }; |
| |
| struct camera2_colorcorrection_dm { |
| enum colorcorrection_mode mode; |
| float transform[9]; |
| uint32_t hue; |
| uint32_t saturation; |
| uint32_t brightness; |
| }; |
| |
| struct camera2_colorcorrection_sm { |
| /*assuming 10 supported modes*/ |
| uint8_t availableModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| uint32_t hueRange[2]; |
| uint32_t saturationRange[2]; |
| uint32_t brightnessRange[2]; |
| }; |
| |
| |
| /* android.tonemap */ |
| |
| enum tonemap_mode { |
| TONEMAP_MODE_FAST = 1, |
| TONEMAP_MODE_HIGH_QUALITY, |
| TONEMAP_MODE_CONTRAST_CURVE |
| }; |
| |
| struct camera2_tonemap_ctl { |
| enum tonemap_mode mode; |
| /* assuming maxCurvePoints = 64 */ |
| float curveRed[64]; |
| float curveGreen[64]; |
| float curveBlue[64]; |
| }; |
| |
| struct camera2_tonemap_dm { |
| enum tonemap_mode mode; |
| /* assuming maxCurvePoints = 64 */ |
| float curveRed[64]; |
| float curveGreen[64]; |
| float curveBlue[64]; |
| }; |
| |
| struct camera2_tonemap_sm { |
| uint32_t maxCurvePoints; |
| }; |
| |
| /* android.edge */ |
| |
| struct camera2_edge_ctl { |
| enum processing_mode mode; |
| uint32_t strength; |
| }; |
| |
| struct camera2_edge_dm { |
| enum processing_mode mode; |
| uint32_t strength; |
| }; |
| |
| |
| |
| /* android.scaler */ |
| |
| enum scaler_availableformats { |
| SCALER_FORMAT_BAYER_RAW, |
| SCALER_FORMAT_YV12, |
| SCALER_FORMAT_NV21, |
| SCALER_FORMAT_JPEG, |
| SCALER_FORMAT_UNKNOWN |
| }; |
| |
| struct camera2_scaler_ctl { |
| uint32_t cropRegion[3]; |
| }; |
| |
| struct camera2_scaler_dm { |
| uint32_t cropRegion[3]; |
| }; |
| |
| struct camera2_scaler_sm { |
| enum scaler_availableformats availableFormats[4]; |
| /*assuming # of availableFormats = 4*/ |
| uint32_t availableRawSizes; |
| uint64_t availableRawMinDurations; |
| /* needs check */ |
| uint32_t availableProcessedSizes[8]; |
| uint64_t availableProcessedMinDurations[8]; |
| uint32_t availableJpegSizes[8][2]; |
| uint64_t availableJpegMinDurations[8]; |
| uint32_t availableMaxDigitalZoom[8]; |
| }; |
| |
| /* android.jpeg */ |
| struct camera2_jpeg_ctl { |
| uint32_t quality; |
| uint32_t thumbnailSize[2]; |
| uint32_t thumbnailQuality; |
| double gpsCoordinates[3]; |
| uint32_t gpsProcessingMethod; |
| uint64_t gpsTimestamp; |
| uint32_t orientation; |
| }; |
| |
| struct camera2_jpeg_dm { |
| uint32_t quality; |
| uint32_t thumbnailSize[2]; |
| uint32_t thumbnailQuality; |
| double gpsCoordinates[3]; |
| uint32_t gpsProcessingMethod; |
| uint64_t gpsTimestamp; |
| uint32_t orientation; |
| }; |
| |
| struct camera2_jpeg_sm { |
| uint32_t availableThumbnailSizes[8][2]; |
| uint32_t maxSize; |
| /*assuming supported size=8*/ |
| }; |
| |
| |
| |
| /* android.statistics */ |
| |
| enum facedetect_mode { |
| FACEDETECT_MODE_OFF = 1, |
| FACEDETECT_MODE_SIMPLE, |
| FACEDETECT_MODE_FULL |
| }; |
| |
| enum stats_mode { |
| STATS_MODE_OFF = 1, |
| STATS_MODE_ON |
| }; |
| |
| struct camera2_stats_ctl { |
| enum facedetect_mode faceDetectMode; |
| enum stats_mode histogramMode; |
| enum stats_mode sharpnessMapMode; |
| }; |
| |
| |
| struct camera2_stats_dm { |
| enum facedetect_mode faceDetectMode; |
| uint32_t faceRectangles[CAMERA2_MAX_FACES][4]; |
| uint8_t faceScores[CAMERA2_MAX_FACES]; |
| uint32_t faceLandmarks[CAMERA2_MAX_FACES][6]; |
| uint32_t faceIds[CAMERA2_MAX_FACES]; |
| /* PAYTON_CHECK_20120712 : histogram_mode -> stats_mode */ |
| enum stats_mode histogramMode; |
| /* [hj529.kim, 2012/07/19] androd.statistics.histogram */ |
| uint32_t histogram[3 * 256]; |
| /* PAYTON_CHECK_20120712 : sharpnessmap_mode -> stats_mode */ |
| enum stats_mode sharpnessMapMode; |
| /*sharpnessMap*/ |
| }; |
| |
| |
| struct camera2_stats_sm { |
| uint8_t availableFaceDetectModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| /*assuming supported modes = 3;*/ |
| uint32_t maxFaceCount; |
| uint32_t histogramBucketCount; |
| uint32_t maxHistogramCount; |
| uint32_t sharpnessMapSize[2]; |
| uint32_t maxSharpnessMapValue; |
| }; |
| |
| /* android.control */ |
| |
| enum aa_capture_intent { |
| AA_CAPTURE_INTENT_CUSTOM = 0, |
| AA_CAPTURE_INTENT_PREVIEW, |
| AA_CAPTURE_INTENT_STILL_CAPTURE, |
| AA_CAPTURE_INTENT_VIDEO_RECORD, |
| AA_CAPTURE_INTENT_VIDEO_SNAPSHOT, |
| AA_CAPTURE_INTENT_ZERO_SHUTTER_LAG |
| }; |
| |
| enum aa_mode { |
| AA_CONTROL_NONE = 0, |
| AA_CONTROL_OFF, |
| AA_CONTROL_AUTO, |
| AA_CONTROL_USE_SCENE_MODE |
| }; |
| |
| enum aa_scene_mode { |
| AA_SCENE_MODE_UNSUPPORTED = 1, |
| AA_SCENE_MODE_FACE_PRIORITY, |
| AA_SCENE_MODE_ACTION, |
| AA_SCENE_MODE_PORTRAIT, |
| AA_SCENE_MODE_LANDSCAPE, |
| AA_SCENE_MODE_NIGHT, |
| AA_SCENE_MODE_NIGHT_PORTRAIT, |
| AA_SCENE_MODE_THEATRE, |
| AA_SCENE_MODE_BEACH, |
| AA_SCENE_MODE_SNOW, |
| AA_SCENE_MODE_SUNSET, |
| AA_SCENE_MODE_STEADYPHOTO, |
| AA_SCENE_MODE_FIREWORKS, |
| AA_SCENE_MODE_SPORTS, |
| AA_SCENE_MODE_PARTY, |
| AA_SCENE_MODE_CANDLELIGHT, |
| AA_SCENE_MODE_BARCODE, |
| AA_SCENE_MODE_NIGHT_CAPTURE, /* part of night mode */ |
| AA_SCENE_MODE_MAX |
| }; |
| |
| enum aa_effect_mode { |
| AA_EFFECT_OFF = 1, |
| AA_EFFECT_MONO, |
| AA_EFFECT_NEGATIVE, |
| AA_EFFECT_SOLARIZE, |
| AA_EFFECT_SEPIA, |
| AA_EFFECT_POSTERIZE, |
| AA_EFFECT_WHITEBOARD, |
| AA_EFFECT_BLACKBOARD, |
| AA_EFFECT_AQUA |
| }; |
| |
| enum aa_aemode { |
| AA_AEMODE_OFF = 1, |
| AA_AEMODE_LOCKED, |
| AA_AEMODE_ON, |
| AA_AEMODE_ON_AUTO_FLASH, |
| AA_AEMODE_ON_ALWAYS_FLASH, |
| AA_AEMODE_ON_AUTO_FLASH_REDEYE |
| }; |
| |
| enum aa_ae_flashmode { |
| AA_FLASHMODE_NOP = 0, |
| /*all flash control stop*/ |
| AA_FLASHMODE_OFF = 1, |
| /*internal 3A can control flash*/ |
| AA_FLASHMODE_ON, |
| /*internal 3A can do auto flash algorithm*/ |
| AA_FLASHMODE_AUTO, |
| /*internal 3A can fire flash by auto result*/ |
| AA_FLASHMODE_CAPTURE, |
| /*internal 3A can control flash*/ |
| AA_FLASHMODE_ON_ALWAYS |
| }; |
| |
| enum aa_ae_antibanding_mode { |
| AA_AE_ANTIBANDING_OFF = 1, |
| AA_AE_ANTIBANDING_50HZ, |
| AA_AE_ANTIBANDING_60HZ, |
| AA_AE_ANTIBANDING_AUTO |
| }; |
| |
| enum aa_awbmode { |
| AA_AWBMODE_OFF = 1, |
| AA_AWBMODE_LOCKED, |
| AA_AWBMODE_WB_AUTO, |
| AA_AWBMODE_WB_INCANDESCENT, |
| AA_AWBMODE_WB_FLUORESCENT, |
| AA_AWBMODE_WB_WARM_FLUORESCENT, |
| AA_AWBMODE_WB_DAYLIGHT, |
| AA_AWBMODE_WB_CLOUDY_DAYLIGHT, |
| AA_AWBMODE_WB_TWILIGHT, |
| AA_AWBMODE_WB_SHADE |
| }; |
| |
| enum aa_afmode { |
| NO_CHANGE = 0, |
| AA_AFMODE_OFF = 1, |
| AA_AFMODE_AUTO, |
| AA_AFMODE_MACRO, |
| AA_AFMODE_CONTINUOUS_VIDEO, |
| AA_AFMODE_CONTINUOUS_PICTURE, |
| AA_AFMODE_INFINITY, |
| AA_AFMODE_AUTO_FACE, |
| AA_AFMODE_CONTINUOUS_VIDEO_FACE, |
| AA_AFMODE_CONTINUOUS_PICTURE_FACE, |
| AA_AFMODE_MANUAL, |
| AA_AFMODE_EDOF |
| }; |
| |
| enum aa_afstate { |
| AA_AFSTATE_INACTIVE = 1, |
| AA_AFSTATE_PASSIVE_SCAN, |
| AA_AFSTATE_ACTIVE_SCAN, |
| AA_AFSTATE_AF_ACQUIRED_FOCUS, |
| AA_AFSTATE_AF_FAILED_FOCUS |
| }; |
| |
| enum ae_state { |
| AE_STATE_INACTIVE = 1, |
| AE_STATE_SEARCHING, |
| AE_STATE_CONVERGED, |
| AE_STATE_LOCKED, |
| AE_STATE_FLASH_REQUIRED, |
| AE_STATE_PRECAPTURE |
| }; |
| |
| enum awb_state { |
| AWB_STATE_INACTIVE = 1, |
| AWB_STATE_SEARCHING, |
| AWB_STATE_CONVERGED, |
| AWB_STATE_LOCKED |
| }; |
| |
| enum aa_isomode { |
| AA_ISOMODE_AUTO = 1, |
| AA_ISOMODE_MANUAL, |
| }; |
| |
| enum ae_lockmode { |
| AEMODE_LOCK_OFF = 0, |
| AEMODE_LOCK_ON, |
| }; |
| |
| enum awb_lockmode { |
| AWBMODE_LOCK_OFF = 0, |
| AWBMODE_LOCK_ON, |
| }; |
| |
| struct camera2_aa_ctl { |
| enum aa_capture_intent captureIntent; |
| enum aa_mode mode; |
| enum aa_scene_mode sceneMode; |
| uint32_t videoStabilizationMode; |
| enum aa_aemode aeMode; |
| uint32_t aeRegions[5]; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/ |
| int32_t aeExpCompensation; |
| uint32_t aeTargetFpsRange[2]; |
| enum aa_ae_antibanding_mode aeAntibandingMode; |
| enum aa_ae_flashmode aeflashMode; |
| enum aa_awbmode awbMode; |
| uint32_t awbRegions[5]; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/ |
| enum aa_afmode afMode; |
| uint32_t afRegions[5]; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/ |
| uint32_t afTrigger; |
| enum aa_isomode isoMode; |
| uint32_t isoValue; |
| |
| }; |
| |
| struct camera2_aa_dm { |
| enum aa_mode mode; |
| enum aa_effect_mode effectMode; |
| enum aa_scene_mode sceneMode; |
| uint32_t videoStabilizationMode; |
| enum aa_aemode aeMode; |
| /*needs check*/ |
| uint32_t aeRegions[5]; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/ |
| enum ae_state aeState; |
| enum aa_ae_flashmode aeflashMode; |
| /*needs check*/ |
| enum aa_awbmode awbMode; |
| uint32_t awbRegions[5]; |
| enum awb_state awbState; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region.*/ |
| enum aa_afmode afMode; |
| uint32_t afRegions[5]; |
| /*5 per region(x1,y1,x2,y2,weight). currently assuming 1 region*/ |
| enum aa_afstate afState; |
| enum aa_isomode isoMode; |
| uint32_t isoValue; |
| }; |
| |
| struct camera2_aa_sm { |
| uint8_t availableSceneModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| uint8_t availableEffects[CAMERA2_MAX_AVAILABLE_MODE]; |
| /*assuming # of available scene modes = 10*/ |
| uint32_t maxRegions; |
| uint8_t aeAvailableModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| /*assuming # of available ae modes = 8*/ |
| struct rational aeCompensationStep; |
| int32_t aeCompensationRange[2]; |
| uint32_t aeAvailableTargetFpsRanges[CAMERA2_MAX_AVAILABLE_MODE][2]; |
| uint8_t aeAvailableAntibandingModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| uint8_t awbAvailableModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| /*assuming # of awbAvailableModes = 10*/ |
| uint8_t afAvailableModes[CAMERA2_MAX_AVAILABLE_MODE]; |
| /*assuming # of afAvailableModes = 4*/ |
| uint8_t availableVideoStabilizationModes[4]; |
| /*assuming # of availableVideoStabilizationModes = 4*/ |
| uint32_t isoRange[2]; |
| }; |
| |
| struct camera2_lens_usm { |
| /** Frame delay between sending command and applying frame data */ |
| uint32_t focusDistanceFrameDelay; |
| }; |
| |
| struct camera2_sensor_usm { |
| /** Frame delay between sending command and applying frame data */ |
| uint32_t exposureTimeFrameDelay; |
| uint32_t frameDurationFrameDelay; |
| uint32_t sensitivityFrameDelay; |
| }; |
| |
| struct camera2_flash_usm { |
| /** Frame delay between sending command and applying frame data */ |
| uint32_t flashModeFrameDelay; |
| uint32_t firingPowerFrameDelay; |
| uint64_t firingTimeFrameDelay; |
| }; |
| |
| struct camera2_ctl { |
| struct camera2_request_ctl request; |
| struct camera2_lens_ctl lens; |
| struct camera2_sensor_ctl sensor; |
| struct camera2_flash_ctl flash; |
| struct camera2_hotpixel_ctl hotpixel; |
| struct camera2_demosaic_ctl demosaic; |
| struct camera2_noisereduction_ctl noise; |
| struct camera2_shading_ctl shading; |
| struct camera2_geometric_ctl geometric; |
| struct camera2_colorcorrection_ctl color; |
| struct camera2_tonemap_ctl tonemap; |
| struct camera2_edge_ctl edge; |
| struct camera2_scaler_ctl scaler; |
| struct camera2_jpeg_ctl jpeg; |
| struct camera2_stats_ctl stats; |
| struct camera2_aa_ctl aa; |
| }; |
| |
| struct camera2_dm { |
| struct camera2_request_dm request; |
| struct camera2_lens_dm lens; |
| struct camera2_sensor_dm sensor; |
| struct camera2_flash_dm flash; |
| struct camera2_hotpixel_dm hotpixel; |
| struct camera2_demosaic_dm demosaic; |
| struct camera2_noisereduction_dm noise; |
| struct camera2_shading_dm shading; |
| struct camera2_geometric_dm geometric; |
| struct camera2_colorcorrection_dm color; |
| struct camera2_tonemap_dm tonemap; |
| struct camera2_edge_dm edge; |
| struct camera2_scaler_dm scaler; |
| struct camera2_jpeg_dm jpeg; |
| struct camera2_stats_dm stats; |
| struct camera2_aa_dm aa; |
| }; |
| |
| struct camera2_sm { |
| struct camera2_lens_sm lens; |
| struct camera2_sensor_sm sensor; |
| struct camera2_flash_sm flash; |
| struct camera2_colorcorrection_sm color; |
| struct camera2_tonemap_sm tonemap; |
| struct camera2_scaler_sm scaler; |
| struct camera2_jpeg_sm jpeg; |
| struct camera2_stats_sm stats; |
| struct camera2_aa_sm aa; |
| |
| /** User-defined(ispfw specific) static metadata. */ |
| struct camera2_lens_usm lensUd; |
| struct camera2_sensor_usm sensorUd; |
| struct camera2_flash_usm flashUd; |
| }; |
| |
| /** \brief |
| User-defined control for lens. |
| */ |
| struct camera2_lens_uctl { |
| struct camera2_lens_ctl ctl; |
| |
| /** It depends by af algorithm(normally 255 or 1023) */ |
| uint32_t maxPos; |
| /** Some actuator support slew rate control. */ |
| uint32_t slewRate; |
| }; |
| |
| /** \brief |
| User-defined metadata for lens. |
| */ |
| struct camera2_lens_udm { |
| /** It depends by af algorithm(normally 255 or 1023) */ |
| uint32_t maxPos; |
| /** Some actuator support slew rate control. */ |
| uint32_t slewRate; |
| }; |
| |
| /** \brief |
| User-defined control for sensor. |
| */ |
| struct camera2_sensor_uctl { |
| struct camera2_sensor_ctl ctl; |
| /** Dynamic frame duration. |
| This feature is decided to max. value between |
| 'sensor.exposureTime'+alpha and 'sensor.frameDuration'. |
| */ |
| uint64_t dynamicFrameDuration; |
| }; |
| |
| struct camera2_scaler_uctl { |
| /** \brief |
| target address for next frame. |
| \remarks |
| [0] invalid address, stop |
| [others] valid address |
| */ |
| uint32_t sccTargetAddress[4]; |
| uint32_t scpTargetAddress[4]; |
| }; |
| |
| struct camera2_flash_uctl { |
| struct camera2_flash_ctl ctl; |
| }; |
| |
| /** \brief |
| User-defined control area. |
| \remarks |
| sensor, lens, flash category is empty value. |
| It should be filled by a5 for SET_CAM_CONTROL command. |
| Other category is filled already from host. |
| */ |
| struct camera2_uctl { |
| /** \brief |
| Set sensor, lens, flash control for next frame. |
| \remarks |
| This flag can be combined. |
| [0 bit] lens |
| [1 bit] sensor |
| [2 bit] flash |
| */ |
| uint32_t uUpdateBitMap; |
| |
| /** For debugging */ |
| uint32_t uFrameNumber; |
| |
| /** ispfw specific control(user-defined) of lens. */ |
| struct camera2_lens_uctl lensUd; |
| /** ispfw specific control(user-defined) of sensor. */ |
| struct camera2_sensor_uctl sensorUd; |
| /** ispfw specific control(user-defined) of flash. */ |
| struct camera2_flash_uctl flashUd; |
| |
| struct camera2_scaler_uctl scalerUd; |
| }; |
| |
| struct camera2_udm { |
| struct camera2_lens_udm lens; |
| }; |
| |
| struct camera2_shot { |
| /*google standard area*/ |
| struct camera2_ctl ctl; |
| struct camera2_dm dm; |
| /*user defined area*/ |
| struct camera2_uctl uctl; |
| struct camera2_udm udm; |
| /*magic : 23456789*/ |
| uint32_t magicNumber; |
| }; |
| |
| /** \brief |
| Structure for interfacing between HAL and driver. |
| */ |
| struct camera2_shot_ext { |
| /** \brief |
| setfile change |
| \remarks |
| [x] mode for setfile |
| */ |
| uint32_t setfile; |
| |
| /** \brief |
| stream control |
| \remarks |
| [0] disable stream out |
| [1] enable stream out |
| */ |
| uint32_t request_sensor; |
| uint32_t request_scc; |
| uint32_t request_scp; |
| |
| /** \brief |
| post processing control(DRC) |
| \remarks |
| [0] bypass off |
| [1] bypass on |
| */ |
| uint32_t drc_bypass; |
| |
| /** \brief |
| post processing control(DIS) |
| \remarks |
| [0] bypass off |
| [1] bypass on |
| */ |
| uint32_t dis_bypass; |
| |
| /** \brief |
| post processing control(3DNR) |
| \remarks |
| [0] bypass off |
| [1] bypass on |
| */ |
| uint32_t dnr_bypass; |
| |
| /** \brief |
| post processing control(FD) |
| \remarks |
| [0] bypass off |
| [1] bypass on |
| */ |
| uint32_t fd_bypass; |
| |
| /* reserved for future */ |
| uint32_t reserved[20]; |
| |
| /** \brief |
| processing time debugging |
| \remarks |
| taken time(unit : struct timeval) |
| [0][x] flite start |
| [1][x] flite end |
| [2][x] DRV Shot |
| [3][x] DRV Shot done |
| [4][x] DRV Meta done |
| */ |
| uint32_t timeZone[10][2]; |
| |
| struct camera2_shot shot; |
| uint8_t gpsProcessingMethod[32]; |
| uint8_t isReprocessing; |
| uint8_t reprocessInput; |
| enum ae_lockmode ae_lock; // this field is used in cameraHAL only |
| enum awb_lockmode awb_lock; // this field is used in cameraHAL only |
| enum aa_awbmode awb_mode_dm; |
| }; |
| |
| /** \brief |
| stream structure for scaler. |
| */ |
| struct camera2_stream { |
| /** \brief |
| this address for verifying conincidence of index and address |
| \remarks |
| [X] kernel virtual address for this buffer |
| */ |
| uint32_t address; |
| |
| /** \brief |
| this frame count is from FLITE through dm.request.fcount, |
| this count increases every frame end. initial value is 1. |
| \remarks |
| [X] frame count |
| */ |
| uint32_t fcount; |
| |
| /** \brief |
| this request count is from HAL through ctl.request.fcount, |
| this count is the unique. |
| \remarks |
| [X] request count |
| */ |
| uint32_t rcount; |
| |
| /** \brief |
| frame index of isp framemgr. |
| this value is for driver internal debugging |
| \remarks |
| [X] frame index |
| */ |
| uint32_t findex; |
| }; |
| |
| #define CAM_LENS_CMD (0x1 << 0x0) |
| #define CAM_SENSOR_CMD (0x1 << 0x1) |
| #define CAM_FLASH_CMD (0x1 << 0x2) |
| |
| |
| #endif |
| |