blob: 191e081f3bb08b73c6133f5089df064735199dfd [file] [log] [blame]
/*
* 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