/* Copyright (c) 2017 Samsung Electronics Co, Ltd.
 *
 * 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.

 *

 * Alternatively, Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*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 */
/*2012.08.28 Version 0.6 Added AA_SCENE_MODE_NIGHT_CAPTURE */
/*2012.10.15 Version 0.7 Added contrast in colorcorrection */
/*2012.10.22 Version 0.8 Added analogGain and digitalGain in sensor control */
/*2012.10.30 Version 0.9 Added disTargetAddress in camera2_scaler_uctl */
/*2012.10.31 Version 0.10 Added user-defined metadata for 3A */
/*2012.11.27 Version 0.11 Added image effects */
/*2012.12.10 Version 0.12 Modified aa_aemode */

#ifndef FIMC_IS_METADATA_H_
#define FIMC_IS_METADATA_H_

#ifndef _LINUX_TYPES_H
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
/*typedef unsigned long long uint64_t;*/
#endif

struct rational {
    int32_t num;
    int32_t den;
};

#define CAMERA2_MAX_AVAILABLE_MODE          21
#define CAMERA2_MAX_FACES                   16
#define CAMERA2_MAX_VENDER_LENGTH           400
#define CAMERA2_MAX_IPC_VENDER_LENGTH       912
#define CAPTURE_NODE_MAX                    12

#define CAMERA2_MAX_PDAF_MULTIROI_COLUMN    13
#define CAMERA2_MAX_PDAF_MULTIROI_ROW       9
#define CAMERA2_MAX_UCTL_VENDER_LENGTH      32

#define CAMERA2_MAX_UCTL_VENDOR2_LENGTH      400
#define CAMERA2_MAX_UDM_VENDOR2_LENGTH       32
#define OPEN_MAGIC_NUMBER       0x01020304
#define SHOT_MAGIC_NUMBER       0x23456789

#include "ExynosCameraConfig.h"

/*
 *controls/dynamic metadata
 */

/* android.request */

enum metadata_mode {
    METADATA_MODE_NONE,
    METADATA_MODE_FULL
};

enum is_subscenario_id {
    ISS_SUB_SCENARIO_STILL_PREVIEW = 0,     /* 0: still preview */
    ISS_SUB_SCENARIO_VIDEO = 1,             /* 1: video */
    ISS_SUB_SCENARIO_DUAL_STILL = 2,        /* 2: dual still preview */
    ISS_SUB_SCENARIO_DUAL_VIDEO = 3,        /* 3: dual video */
    ISS_SUB_SCENARIO_VIDEO_HIGH_SPEED = 4,  /* 4: video high speed */
    ISS_SUB_SCENARIO_DUAL_PREVIEW = ISS_SUB_SCENARIO_VIDEO_HIGH_SPEED,
    ISS_SUB_SCENARIO_STILL_CAPTURE = 5,     /* 5: still capture */
    ISS_SUB_SCENARIO_FHD_60FPS = 6,         /* 6: video FHD 60fps */
    ISS_SUB_SCENARIO_UHD_30FPS = 7,         /* 7: video UHD 30fps */
    ISS_SUB_SCENARIO_WVGA_300FPS = 8,       /* 8: video WVGA 300fps */
    ISS_SUB_SCENARIO_STILL_PREVIEW_WDR_ON = 9,
    ISS_SUB_SCENARIO_VIDEO_WDR_ON = 10,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON = 11,
    ISS_SUB_SCENARIO_UHD_30FPS_WDR_ON = 12,
    ISS_SUB_SCENARIO_STILL_CAPTURE_ZOOM = 13,
    ISS_SUB_SCENARIO_STILL_CAPTURE_ZOOM_INDOOR = 14,
    ISS_SUB_SCENARIO_STILL_CAPTURE_ZOOM_OUTDOOR = 15,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON_ZOOM = 16,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON_ZOOM_INDOOR = 17,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON_ZOOM_OUTDOOR = 18,
    ISS_SUB_SCENARIO_STILL_CAPTURE_LLS = 19,
    ISS_SUB_SCENARIO_MERGED_STILL_CAPTURE_WDR_AUTO = ISS_SUB_SCENARIO_STILL_CAPTURE_LLS,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON_LLS = 20,
    ISS_SUB_SCENARIO_MERGED_STILL_CAPTURE_WDR_ON = ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_ON_LLS,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_AUTO_ZOOM = 21,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_AUTO_ZOOM_INDOOR = 22,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_AUTO_ZOOM_OUTDOOR = 23,
    ISS_SUB_SCENARIO_STILL_CAPTURE_WDR_AUTO = 24,
    ISS_SUB_SCENARIO_VIDEO_WDR_AUTO = 25,
    ISS_SUB_SCENARIO_STILL_PREVIEW_WDR_AUTO = 26,
    ISS_SUB_SCENARIO_FHD_240FPS = 27,
    ISS_SUB_SCENARIO_MERGED_STILL_CAPTURE = 28,
    ISS_SUB_SCENARIO_STILL_CAPTURE_SHARPEN = 29,
    ISS_SUB_SCENARIO_STILL_CAPTURE_LONG = 30,
    ISS_SUB_SCENARIO_STILL_CAPTURE_MANUAL_ISO = 31,
    ISS_SUB_SCENARIO_STILL_PREVIEW_BINNING = 40,        /* 40: binning mode for low power */
    ISS_SUB_SCENARIO_STILL_CAPTURE_BDS = 41,            /* 41: still capture bds */
    ISS_SUB_SCENARIO_STILL_PREVIEW_LLS = 42,            /* 42: still preview lls */
    ISS_SUB_SCENARIO_LIVE_OUTFOCUS_PREVIEW = 44,
    ISS_SUB_SCENARIO_LIVE_OUTFOCUS_CAPTURE = 45,
    ISS_SUB_SCENARIO_LIVE_OUTFOCUS_VIDEO = 46,

    ISS_SUB_SCENARIO_FRONT_VT1 = 31,                    /* 31: front camera VT1 */
    ISS_SUB_SCENARIO_FRONT_VT2 = 32,                    /* 32: front camera VT2 */
    ISS_SUB_SCENARIO_FRONT_SMART_STAY = 33,             /* 33: front camera smart stay */
    ISS_SUB_SCENARIO_FRONT_PANORAMA = 34,               /* 34: front camera front panorama */
    ISS_SUB_SCENARIO_FRONT_C2_OFF_STILL_PREVIEW = 35,   /* 35: C2 off front still preview */
    ISS_SUB_SCENARIO_FRONT_C2_OFF_STILL_CAPTURE = 36,   /* 36: C2 off front still capture */
    ISS_SUB_SCENARIO_FRONT_C2_OFF_VIDEO = 37,           /* 37: C2 off front video */
    ISS_SUB_SCENARIO_FRONT_VT4 = 38,                    /* 38: front camera VT4 */
    ISS_SUB_SCENARIO_FRONT_VT1_STILL_CAPTURE = 39,      /* 39: front camera VT1 still capture */
    ISS_SUB_SCENARIO_FRONT_STILL_PREVIEW_BINNING = 40,  /* 40: front camera binning mode for low power */
    ISS_SUB_SCENARIO_FRONT_COLOR_IRIS_PREVIEW = 43,     /* 43: front camera Color Iris preview */
    ISS_SUB_END,
};

enum is_scenario_is {
    FIMC_IS_SCENARIO_SWVDIS = 1,
    FIMC_IS_SCENARIO_COLOR_IRIS = 2,
    FIMC_IS_SCENARIO_AUTO_DUAL = 3,
    FIMC_IS_SCENARIO_FULL_SIZE = 4,
};

enum available_capabilities {
    REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0,
    REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR,
    REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING,
    REQUEST_AVAILABLE_CAPABILITIES_RAW,
    REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING,
    REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS,
    REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE,
    REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING,
    REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT,
    REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO,
};

struct camera2_request_ctl {
    uint32_t            frameCount;
    uint32_t            id;
    enum metadata_mode  metadataMode;

    /* vendor feature */
    uint32_t            vendor_frameCount;
};

struct camera2_request_dm {
    uint32_t            frameCount;
    uint32_t            id;
    enum metadata_mode  metadataMode;
    uint8_t             pipelineDepth;
    uint32_t            vendor_frameCount;
};

struct camera2_request_sm {
    uint32_t    maxNumOutputStreams[3];
    uint32_t    maxNumOutputRaw;
    uint32_t    maxNumOutputProc;
    uint32_t    maxNumOutputProcStalling;
    uint32_t    maxNumInputStreams;
    uint8_t     pipelineMaxDepth;
    uint32_t    partialResultCount;
    uint8_t     availableCapabilities[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t    availableRequestKeys[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t    availableResultKeys[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t    availableCharacteristicsKeys[CAMERA2_MAX_AVAILABLE_MODE];
};

struct camera2_entry_ctl {
    uint32_t    lowIndexParam;
    uint32_t    highIndexParam;
    uint32_t    parameter[2048];
};

struct camera2_entry_dm {
    uint32_t    lowIndexParam;
    uint32_t    highIndexParam;
};

/* android.lens */

enum optical_stabilization_mode {
    OPTICAL_STABILIZATION_MODE_OFF = 0,
    OPTICAL_STABILIZATION_MODE_ON = 1,

    /* vendor feature */
    OPTICAL_STABILIZATION_MODE_STILL = 100, // Still mode
    OPTICAL_STABILIZATION_MODE_STILL_ZOOM,  // Still Zoom mode
    OPTICAL_STABILIZATION_MODE_VIDEO,       // Recording mode
    OPTICAL_STABILIZATION_MODE_SINE_X,      // factory mode x
    OPTICAL_STABILIZATION_MODE_SINE_Y,      // factory mode y
    OPTICAL_STABILIZATION_MODE_CENTERING,   // Centering mode
    OPTICAL_STABILIZATION_MODE_VDIS,        // VDIS mode
    OPTICAL_STABILIZATION_MODE_VIDEO_RATIO_4_3, // Recording mode(VGA)
};

enum lens_state {
    LENS_STATE_STATIONARY = 0,
    LENS_STATE_MOVING,
};


enum lens_focus_distance_calibration {
    LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0,
    LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE,
    LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED,
};

enum lens_facing {
    LENS_FACING_BACK,
    LENS_FACING_FRONT,
    LENS_FACING_EXTERNAL,
};

struct camera2_lens_ctl {
    int32_t aperture;
    float   filterDensity;
    float   focalLength;
    float   focusDistance;
    enum optical_stabilization_mode opticalStabilizationMode;
};

struct camera2_lens_dm {
    int32_t aperture;
    float   filterDensity;
    float   focalLength;
    float   focusDistance;
    float   focusRange[2];
    enum optical_stabilization_mode opticalStabilizationMode;
    enum lens_state     state;
    float   poseRotation[4];
    float   poseTranslation[3];
    float   intrinsicCalibration[5];
    float   radialDistortion[6];
};

struct camera2_lens_sm {
    float       availableApertures[CAMERA2_MAX_AVAILABLE_MODE];
    float       availableFilterDensities[CAMERA2_MAX_AVAILABLE_MODE];
    float       availableFocalLength[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t     availableOpticalStabilization[CAMERA2_MAX_AVAILABLE_MODE];
    float       hyperfocalDistance;
    float       minimumFocusDistance;
    uint32_t    shadingMapSize[2];
    enum lens_focus_distance_calibration    focusDistanceCalibration;
    enum lens_facing    facing;
    float       poseRotation[4];
    float       poseTranslation[3];
    float       intrinsicCalibration[5];
    float       radialDistortion[6];
};

/* android.sensor */

enum sensor_test_pattern_mode {
    SENSOR_TEST_PATTERN_MODE_OFF = 1,
    SENSOR_TEST_PATTERN_MODE_SOLID_COLOR,
    SENSOR_TEST_PATTERN_MODE_COLOR_BARS,
    SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY,
    SENSOR_TEST_PATTERN_MODE_PN9,
    SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 257,
};

enum sensor_colorfilterarrangement {
    SENSOR_COLORFILTERARRANGEMENT_RGGB,
    SENSOR_COLORFILTERARRANGEMENT_GRBG,
    SENSOR_COLORFILTERARRANGEMENT_GBRG,
    SENSOR_COLORFILTERARRANGEMENT_BGGR,
    SENSOR_COLORFILTERARRANGEMENT_RGB
};

enum sensor_timestamp_calibration {
    SENSOR_INFO_TIMESTAMP_CALIBRATION_UNCALIBRATED = 0,
    SENSOR_INFO_TIMESTAMP_CALIBRATION_CALIBRATED,
};

enum sensor_lensshading_applied {
    SENSOR_INFO_LENS_SHADING_APPLIED_FALSE = 0,
    SENSOR_INFO_LENS_SHADING_APPLIED_TRUE,
};

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 {
    uint64_t    exposureTime;
    uint64_t    frameDuration;
    uint32_t    sensitivity;
    int32_t     testPatternData[4];
    enum sensor_test_pattern_mode	testPatternMode;
};

struct camera2_sensor_dm {
    uint64_t        exposureTime;
    uint64_t        frameDuration;
    uint32_t        sensitivity;
    uint64_t        timeStamp;
    float           temperature;
    struct rational neutralColorPoint[3];
    double          noiseProfile[4][2];
    float           profileHueSatMap[2][2][2][3];
    float           profileToneCurve[32][2];
    float           greenSplit;
    int32_t         testPatternData[4];
    enum sensor_test_pattern_mode   testPatternMode;
    uint64_t        rollingShutterSkew;
};

struct camera2_sensor_sm {
    uint32_t    activeArraySize[4];
    uint32_t    preCorrectionActiveArraySize[4];
    uint32_t    sensitivityRange[2];
    enum sensor_colorfilterarrangement  colorFilterArrangement;
    uint64_t    exposureTimeRange[2];
    uint64_t    maxFrameDuration;
    float       physicalSize[2];
    uint32_t    pixelArraySize[2];
    uint32_t    whiteLevel;
    enum sensor_timestamp_calibration   timestampCalibration;
    enum sensor_lensshading_applied     lensShadingApplied;
    enum sensor_ref_illuminant          referenceIlluminant1;
    enum sensor_ref_illuminant          referenceIlluminant2;
    struct rational calibrationTransform1[9];
    struct rational calibrationTransform2[9];
    struct rational colorTransform1[9];
    struct rational colorTransform2[9];
    struct rational forwardMatrix1[9];
    struct rational forwardMatrix2[9];
    struct rational baseGainFactor;
    uint32_t    blackLevelPattern[4];
    uint32_t    maxAnalogSensitivity;
    uint32_t    orientation;
    uint32_t    profileHueSatMapDimensions[3];
    uint32_t    availableTestPatternModes[CAMERA2_MAX_AVAILABLE_MODE];
};



/* android.flash */

enum flash_mode {
    CAM2_FLASH_MODE_NONE = 0,
    CAM2_FLASH_MODE_OFF = 1,
    CAM2_FLASH_MODE_SINGLE,
    CAM2_FLASH_MODE_TORCH,

    /* vendor feature */
    CAM2_FLASH_MODE_BEST = 100,
    CAM2_FLASH_MODE_LCD = 101,
};

enum flash_state {
    FLASH_STATE_UNAVAILABLE = 0,
    FLASH_STATE_CHARGING,
    FLASH_STATE_READY,
    FLASH_STATE_FIRED,
    FLASH_STATE_PARTIAL,
};

enum capture_state {
    CAPTURE_STATE_NONE = 0,
    CAPTURE_STATE_FLASH = 1,
    CAPTURE_STATE_HDR_DARK = 12,
    CAPTURE_STATE_HDR_NORMAL = 13,
    CAPTURE_STATE_HDR_BRIGHT = 14,
    CAPTURE_STATE_ZSL_LIKE = 20,
    CAPTURE_STATE_STREAM_ON_CAPTURE = 30,
    CAPTURE_STATE_RAW_CAPTURE = 100,
}; /* firingStable state */

enum flash_info_available {
    FLASH_INFO_AVAILABLE_FALSE = 0,
    FLASH_INFO_AVAILABLE_TRUE,
};

struct camera2_flash_ctl {
    uint32_t            firingPower;
    uint64_t            firingTime;
    enum flash_mode     flashMode;
};

struct camera2_flash_dm {
    uint32_t            firingPower;
    uint64_t            firingTime;
    enum flash_mode     flashMode;
    enum flash_state    flashState;

    /* vendor feature */
    uint32_t            vendor_firingStable;
    uint32_t            vendor_decision;
    uint32_t            vendor_flashReady;
    uint32_t            vendor_flashOffReady;
};

struct camera2_flash_sm {
    enum flash_info_available   available;
    uint64_t                    chargeDuration;
    uint8_t                     colorTemperature;
    uint8_t                     maxEnergy;
};


/* android.hotpixel */

enum processing_mode {
    PROCESSING_MODE_OFF = 1,
    PROCESSING_MODE_FAST,
    PROCESSING_MODE_HIGH_QUALITY,
    PROCESSING_MODE_MINIMAL,

    /* vendor feature */
    PROCESSING_MODE_MANUAL = 100,
};


struct camera2_hotpixel_ctl {
    enum processing_mode    mode;
};

struct camera2_hotpixel_dm {
    enum processing_mode    mode;
};

struct camera2_hotpixel_sm {
    uint8_t availableHotPixelModes[CAMERA2_MAX_AVAILABLE_MODE];
};



/* android.demosaic */

enum demosaic_processing_mode {
    DEMOSAIC_PROCESSING_MODE_FAST = 1,
    DEMOSAIC_PROCESSING_MODE_HIGH_QUALITY
};

struct camera2_demosaic_ctl {
    enum demosaic_processing_mode	mode;
};

struct camera2_demosaic_dm {
    enum demosaic_processing_mode	mode;
};



/* android.noiseReduction */

struct camera2_noisereduction_ctl {
    enum processing_mode    mode;
    uint8_t                 strength;
};

struct camera2_noisereduction_dm {
    enum processing_mode    mode;
    uint8_t                 strength;
};

struct camera2_noisereduction_sm {
    uint8_t availableNoiseReductionModes[CAMERA2_MAX_AVAILABLE_MODE];
};



/* android.shading */

struct camera2_shading_ctl {
    enum processing_mode    mode;
    uint8_t                 strength; /* Range: 1 ~ 10 */ // TODO: [API32] not implemented yet
};

struct camera2_shading_dm {
    enum processing_mode    mode;
    uint8_t                 strength; /* Range: 1 ~ 10 */ // TODO: [API32] not implemented yet
};

struct camera2_shading_sm {
    enum processing_mode    availableModes[CAMERA2_MAX_AVAILABLE_MODE];
};


/* android.colorCorrection */

enum colorcorrection_mode {
    COLORCORRECTION_MODE_TRANSFORM_MATRIX = 1,
    COLORCORRECTION_MODE_FAST,
    COLORCORRECTION_MODE_HIGH_QUALITY,
};


struct camera2_colorcorrection_ctl {
    enum colorcorrection_mode   mode;
    struct rational             transform[9];
    float                       gains[4];
    enum processing_mode        aberrationCorrectionMode;

    /* vendor feature */
    uint32_t    vendor_hue;
    uint32_t    vendor_saturation;
    uint32_t    vendor_brightness;
    uint32_t    vendor_contrast;
};

struct camera2_colorcorrection_dm {
    enum colorcorrection_mode   mode;
    struct rational             transform[9];
    float                       gains[4];
    enum processing_mode        aberrationCorrectionMode;

    /* vendor feature */
    uint32_t    vendor_hue;
    uint32_t    vendor_saturation;
    uint32_t    vendor_brightness;
    uint32_t    vendor_contrast;
};

struct camera2_colorcorrection_sm {
    uint8_t     availableModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t     availableAberrationCorrectionModes[CAMERA2_MAX_AVAILABLE_MODE];

    /* vendor feature */
    uint32_t    vendor_hueRange[2];
    uint32_t    vendor_saturationRange[2];
    uint32_t    vendor_brightnessRange[2];
    uint32_t    vendor_contrastRange[2];
};


/* android.tonemap */

enum tonemap_mode {
    TONEMAP_MODE_CONTRAST_CURVE = 1,
    TONEMAP_MODE_FAST,
    TONEMAP_MODE_HIGH_QUALITY,
    TONEMAP_MODE_GAMMA_VALUE,
    TONEMAP_MODE_PRESET_CURVE,
};

enum tonemap_presetCurve {
    TONEMAP_PRESET_CURVE_SRGB,
    TONEMAP_PRESET_CURVE_REC709,
};

struct camera2_tonemap_ctl {
    float   curveBlue[64];
    float   curveGreen[64];
    float   curveRed[64];
    float   curve;
    enum tonemap_mode         mode;
    float   gamma;
    enum tonemap_presetCurve  presetCurve;
};

struct camera2_tonemap_dm {
    float   curveBlue[64];
    float   curveGreen[64];
    float   curveRed[64];
    float   curve;
    enum tonemap_mode         mode;
    float   gamma;
    enum tonemap_presetCurve  presetCurve;
};

struct camera2_tonemap_sm {
    uint32_t    maxCurvePoints;
    uint8_t     availableToneMapModes[CAMERA2_MAX_AVAILABLE_MODE];
};

/* android.edge */

struct camera2_edge_ctl {
    enum processing_mode    mode;
    uint8_t                 strength;
};

struct camera2_edge_dm {
    enum processing_mode    mode;
    uint8_t                 strength;
};

struct camera2_edge_sm {
    uint8_t     availableEdgeModes[CAMERA2_MAX_AVAILABLE_MODE];
};



/* android.scaler */

struct camera2_scaler_ctl {
    uint32_t    cropRegion[4];
};

struct camera2_scaler_dm {
    uint32_t    cropRegion[4];
};

enum available_stream_configurations {
    SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT = 0,
    SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT,
};

enum scaler_cropping_type {
    SCALER_CROPPING_TYPE_CENTER_ONLY = 0,
    SCALER_CROPPING_TYPE_FREEFORM,
};

struct camera2_scaler_sm {
    float       availableMaxDigitalZoom;
    int32_t     availableInputOutputFormatsMap;
    uint8_t     availableStreamConfigurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    uint64_t    availableMinFrameDurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    uint64_t    availableStallDurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    int32_t     streamConfigurationMap;
    enum scaler_cropping_type   croppingType;
};

/* android.jpeg */
struct camera2_jpeg_ctl {
    uint8_t     gpsLocation;
    double      gpsCoordinates[3];
    uint8_t     gpsProcessingMethod[32];
    uint64_t    gpsTimestamp;
    uint32_t    orientation;
    uint8_t     quality;
    uint8_t     thumbnailQuality;
    uint32_t    thumbnailSize[2];
};

struct camera2_jpeg_dm {
    uint8_t     gpsLocation;
    double      gpsCoordinates[3];
    uint8_t     gpsProcessingMethod[32];
    uint64_t    gpsTimestamp;
    uint32_t    orientation;
    uint8_t     quality;
    uint32_t    size;
    uint8_t     thumbnailQuality;
    uint32_t    thumbnailSize[2];
};

struct camera2_jpeg_sm {
    uint32_t    availableThumbnailSizes[8][2];
    uint32_t    maxSize;
};

/* 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
};


enum stats_scene_flicker {
    STATISTICS_SCENE_FLICKER_NONE = 1,
    STATISTICS_SCENE_FLICKER_50HZ,
    STATISTICS_SCENE_FLICKER_60HZ,
};

enum stats_lowlightmode {
    STATE_LLS_LEVEL_ZSL                          = 0,
    STATE_LLS_LEVEL_LOW                          = 1,
    STATE_LLS_LEVEL_HIGH                         = 2,
    STATE_LLS_LEVEL_SIS                          = 3,
    STATE_LLS_LEVEL_ZSL_LIKE                     = 4,
    STATE_LLS_LEVEL_ZSL_LIKE1                    = 7,
    STATE_LLS_LEVEL_SHARPEN_SINGLE               = 8,
    STATE_LLS_MANUAL_ISO                         = 9,
    STATE_LLS_LEVEL_SHARPEN_DR                   = 10,
    STATE_LLS_LEVEL_SHARPEN_IMA                  = 11,
    STATE_LLS_LEVEL_STK                          = 12,
    STATE_LLS_LEVEL_FLASH                        = 16,
    STATE_LLS_LEVEL_MULTI_MERGE_2                = 18,
    STATE_LLS_LEVEL_MULTI_MERGE_3                = 19,
    STATE_LLS_LEVEL_MULTI_MERGE_4                = 20,
    STATE_LLS_LEVEL_MULTI_PICK_2                 = 34,
    STATE_LLS_LEVEL_MULTI_PICK_3                 = 35,
    STATE_LLS_LEVEL_MULTI_PICK_4                 = 36,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_2      = 50,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_3      = 51,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_4      = 52,
    STATE_LLS_LEVEL_FLASH_2                      = 66,
    STATE_LLS_LEVEL_FLASH_3                      = 67,
    STATE_LLS_LEVEL_FLASH_4                      = 68,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_LOW_2  = 82,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_LOW_3  = 83,
    STATE_LLS_LEVEL_MULTI_MERGE_INDICATOR_LOW_4  = 84,
    STATE_LLS_LEVEL_FLASH_LOW_2                  = 98,
    STATE_LLS_LEVEL_FLASH_LOW_3                  = 99,
    STATE_LLS_LEVEL_FLASH_LOW_4                  = 100,
    STATE_LLS_LEVEL_DUMMY                        = 150,
};

enum stats_wdrAutoState {
    STATE_WDR_AUTO_OFF = 1,
    STATE_WDR_AUTO_REQUIRED = 2,
};

struct camera2_stats_ctl {
    enum facedetect_mode    faceDetectMode;
    enum stats_mode         histogramMode;
    enum stats_mode         sharpnessMapMode;
    enum stats_mode         hotPixelMapMode;
    enum stats_mode         lensShadingMapMode;
};


struct camera2_stats_dm {
    enum facedetect_mode        faceDetectMode;
    uint32_t                    faceIds[CAMERA2_MAX_FACES];
    uint32_t                    faceLandmarks[CAMERA2_MAX_FACES][6];
    uint32_t                    faceRectangles[CAMERA2_MAX_FACES][4];
    uint8_t                     faceScores[CAMERA2_MAX_FACES];
    uint32_t                    faces[CAMERA2_MAX_FACES];
    uint32_t                    histogram[3 * 256];
    enum stats_mode             histogramMode;
    int32_t                     sharpnessMap[2][2][3];
    enum stats_mode             sharpnessMapMode;
    uint8_t                     lensShadingCorrectionMap;
    float                       lensShadingMap[2][2][4];
    enum stats_scene_flicker    sceneFlicker;
    enum stats_mode             hotPixelMapMode;
    int32_t                     hotPixelMap[CAMERA2_MAX_AVAILABLE_MODE][2];
    enum stats_mode             lensShadingMapMode;

    /* vendor feature */
    enum stats_lowlightmode     vendor_LowLightMode;
    uint32_t                    vendor_lls_tuning_set_index;
    uint32_t                    vendor_lls_brightness_index;
    enum stats_wdrAutoState     vendor_wdrAutoState;
};


struct camera2_stats_sm {
    uint8_t         availableFaceDetectModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t        histogramBucketCount;
    uint32_t        maxFaceCount;
    uint32_t        maxHistogramCount;
    uint32_t        maxSharpnessMapValue;
    uint32_t        sharpnessMapSize[2];
    uint32_t        availableHotPixelMapModes[CAMERA2_MAX_AVAILABLE_MODE];
    enum stats_mode availableLensShadingMapModes[CAMERA2_MAX_AVAILABLE_MODE];
};

/* 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,
    AA_CAPTURE_INTENT_MANUAL,

    /* vendor feature */
    AA_CAPTURE_INTENT_STILL_CAPTURE_OIS_SINGLE = 100,
    AA_CAPTURE_INTENT_STILL_CAPTURE_OIS_MULTI,
    AA_CAPTURE_INTENT_STILL_CAPTURE_OIS_BEST,
    AA_CAPTURE_INTENT_STILL_CAPTURE_COMP_BYPASS,
    AA_CAPTURE_INTENT_STILL_CAPTURE_RAWDUMP = AA_CAPTURE_INTENT_STILL_CAPTURE_COMP_BYPASS,
    AA_CAPTURE_INTENT_STILL_CAPTURE_OIS_DEBLUR,
    AA_CAPTURE_INTENT_STILL_CAPTURE_DEBLUR_DYNAMIC_SHOT,
    AA_CAPTURE_INTENT_STILL_CAPTURE_OIS_DYNAMIC_SHOT,
    AA_CAPTURE_INTENT_STILL_CAPTURE_EXPOSURE_DYNAMIC_SHOT,
    AA_CAPTURE_INTENT_STILL_CAPTURE_CANCEL,
};

enum aa_mode {
    AA_CONTROL_OFF = 1,
    AA_CONTROL_AUTO,
    AA_CONTROL_USE_SCENE_MODE,
    AA_CONTROL_OFF_KEEP_STATE,
};

enum aa_scene_mode {
    AA_SCENE_MODE_DISABLED = 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_HIGH_SPEED_VIDEO,
    AA_SCENE_MODE_HDR,
    AA_SCENE_MODE_FACE_PRIORITY_LOW_LIGHT,

    /* vendor feature */
    AA_SCENE_MODE_NIGHT_CAPTURE = 100,
    AA_SCENE_MODE_ANTISHAKE,
    AA_SCENE_MODE_LLS,
    AA_SCENE_MODE_FDAE,
    AA_SCENE_MODE_DUAL,
    AA_SCENE_MODE_DRAMA,
    AA_SCENE_MODE_ANIMATED,
    AA_SCENE_MODE_PANORAMA,
    AA_SCENE_MODE_GOLF,
    AA_SCENE_MODE_PREVIEW,
    AA_SCENE_MODE_VIDEO,
    AA_SCENE_MODE_SLOWMOTION_2,
    AA_SCENE_MODE_SLOWMOTION_4_8,
    AA_SCENE_MODE_DUAL_PREVIEW,
    AA_SCENE_MODE_DUAL_VIDEO,
    AA_SCENE_MODE_120_PREVIEW,
    AA_SCENE_MODE_LIGHT_TRACE,
    AA_SCENE_MODE_FOOD,
    AA_SCENE_MODE_AQUA,
    AA_SCENE_MODE_THERMAL,
    AA_SCENE_MODE_VIDEO_COLLAGE,
    AA_SCENE_MODE_PRO_MODE,
    AA_SCENE_MODE_COLOR_IRIS,
    AA_SCENE_MODE_FACE_LOCK,
    AA_SCENE_MODE_LIVE_OUTFOCUS,
    AA_SCENE_MODE_REMOSAIC,
};

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,

    /* vendor feature */
    AA_EFFECT_EMBOSS = 100,
    AA_EFFECT_EMBOSS_MONO,
    AA_EFFECT_SKETCH,
    AA_EFFECT_RED_YELLOW_POINT,
    AA_EFFECT_GREEN_POINT,
    AA_EFFECT_BLUE_POINT,
    AA_EFFECT_MAGENTA_POINT,
    AA_EFFECT_WARM_VINTAGE,
    AA_EFFECT_COLD_VINTAGE,
    AA_EFFECT_WASHED,
    AA_EFFECT_BEAUTY_FACE,

};

enum aa_ae_lock {
    AA_AE_LOCK_OFF = 1,
    AA_AE_LOCK_ON,
};

enum aa_aemode {
    AA_AEMODE_OFF = 1,
    AA_AEMODE_ON,
    AA_AEMODE_ON_AUTO_FLASH,
    AA_AEMODE_ON_ALWAYS_FLASH,
    AA_AEMODE_ON_AUTO_FLASH_REDEYE,

    /* vendor feature */
    AA_AEMODE_CENTER = 100,
    AA_AEMODE_AVERAGE,
    AA_AEMODE_MATRIX,
    AA_AEMODE_SPOT,
    AA_AEMODE_CENTER_TOUCH,
    AA_AEMODE_AVERAGE_TOUCH,
    AA_AEMODE_MATRIX_TOUCH,
    AA_AEMODE_SPOT_TOUCH,
    UNKNOWN_AA_AE_MODE
};

enum aa_ae_flashmode {
    /*all flash control stop*/
    AA_FLASHMODE_OFF = 1,
    /*flash start*/
    AA_FLASHMODE_START,
    /*flash cancle*/
    AA_FLASHMODE_CANCEL,
    /*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 forced*/
    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,

    /* vendor feature */
    AA_AE_ANTIBANDING_AUTO_50HZ = 100,  /* 50Hz + Auto */
    AA_AE_ANTIBANDING_AUTO_60HZ         /* 60Hz + Auto */
};

enum aa_awb_lock {
    AA_AWB_LOCK_OFF = 1,
    AA_AWB_LOCK_ON,
};

enum aa_awbmode {
    AA_AWBMODE_OFF = 1,
    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,
    AA_AWBMODE_WB_CUSTOM_K
};

enum aa_ae_precapture_trigger {
    AA_AE_PRECAPTURE_TRIGGER_IDLE = 0,
    AA_AE_PRECAPTURE_TRIGGER_START,
    AA_AE_PRECAPTURE_TRIGGER_CANCEL,
};

enum aa_afmode {
    AA_AFMODE_OFF = 1,
    AA_AFMODE_AUTO,
    AA_AFMODE_MACRO,
    AA_AFMODE_CONTINUOUS_VIDEO,
    AA_AFMODE_CONTINUOUS_PICTURE,
    AA_AFMODE_EDOF,
};

enum aa_afmode_option_bit {
    AA_AFMODE_OPTION_BIT_VIDEO = 0,
    AA_AFMODE_OPTION_BIT_MACRO = 1,
    AA_AFMODE_OPTION_BIT_FACE = 2,
    AA_AFMODE_OPTION_BIT_DELAYED = 3,
    AA_AFMODE_OPTION_BIT_OUT_FOCUSING = 4,
    AA_AFMODE_OPTION_BIT_OBJECT_TRACKING = 5,
    AA_AFMODE_OPTION_BIT_AF_ROI_NO_CONV = 6,
    AA_AFMODE_OPTION_BIT_MULTI_AF = 7,
};

enum aa_afmode_ext {
    AA_AFMODE_EXT_OFF = 1,
    AA_AFMODE_EXT_ADVANCED_MACRO_FOCUS = 2,
    AA_AFMODE_EXT_FOCUS_LOCATION = 3,
    AA_AFMODE_EXT_FIXED_FACE = 4,
};

enum aa_af_trigger {
    AA_AF_TRIGGER_IDLE = 0,
    AA_AF_TRIGGER_START,
    AA_AF_TRIGGER_CANCEL,
};

enum aa_afstate {
    AA_AFSTATE_INACTIVE = 1,
    AA_AFSTATE_PASSIVE_SCAN,
    AA_AFSTATE_PASSIVE_FOCUSED,
    AA_AFSTATE_ACTIVE_SCAN,
    AA_AFSTATE_FOCUSED_LOCKED,
    AA_AFSTATE_NOT_FOCUSED_LOCKED,
    AA_AFSTATE_PASSIVE_UNFOCUSED,
};

enum ae_state {
    AE_STATE_INACTIVE = 1,
    AE_STATE_SEARCHING,
    AE_STATE_CONVERGED,
    AE_STATE_LOCKED,
    AE_STATE_FLASH_REQUIRED,
    AE_STATE_PRECAPTURE,
    AE_STATE_LOCKED_CONVERGED = 10,
    AE_STATE_LOCKED_FLASH_REQUIRED,
    AE_STATE_SEARCHING_FLASH_REQUIRED,
};

enum awb_state {
    AWB_STATE_INACTIVE = 1,
    AWB_STATE_SEARCHING,
    AWB_STATE_CONVERGED,
    AWB_STATE_LOCKED
};

enum aa_videostabilization_mode {
    VIDEO_STABILIZATION_MODE_OFF = 0,
    VIDEO_STABILIZATION_MODE_ON,
};

enum aa_isomode {
    AA_ISOMODE_AUTO = 1,
    AA_ISOMODE_MANUAL,
};

enum aa_cameraid {
    AA_CAMERAID_FRONT = 1,
    AA_CAMERAID_REAR,
};

enum aa_cameratype {
    AA_CAMERATYPE_SINGLE = 1,
    AA_CAMERATYPE_WIDE,
    AA_CAMERATYPE_TELE,
};

enum aa_videomode {
    AA_VIDEOMODE_OFF = 0,
    AA_VIDEOMODE_ON,
};

enum aa_ae_facemode {
    AA_AE_FACEMODE_OFF = 0,
    AA_AE_FACEMODE_ON,
};

enum aa_ae_lockavailable {
    AE_LOCK_AVAILABLE_FALSE = 0,
    AE_LOCK_AVAILABLE_TRUE,
};

enum aa_awb_lockavailable {
    AWB_LOCK_AVAILABLE_FALSE = 0,
    AWB_LOCK_AVAILABLE_TRUE,
};

enum aa_available_mode {
    AA_OFF = 0,
    AA_AUTO,
    /* AA_USE_SCENE_MODE,
     * AA_OFF_KEEP_STATE, */
};

struct camera2_aa_ctl {
    enum aa_ae_antibanding_mode     aeAntibandingMode;
    int32_t                         aeExpCompensation;
    enum aa_ae_lock                 aeLock;
    enum aa_aemode                  aeMode;
    uint32_t                        aeRegions[5];
    uint32_t                        aeTargetFpsRange[2];
    enum aa_ae_precapture_trigger   aePrecaptureTrigger;
    enum aa_afmode                  afMode;
    uint32_t                        afRegions[5];
    enum aa_af_trigger              afTrigger;
    enum aa_awb_lock                awbLock;
    enum aa_awbmode                 awbMode;
    uint32_t                        awbRegions[5];
    enum aa_capture_intent          captureIntent;
    enum aa_effect_mode             effectMode;
    enum aa_mode                    mode;
    enum aa_scene_mode              sceneMode;
    enum aa_videostabilization_mode videoStabilizationMode;

    /* vendor feature */
    float                   vendor_aeExpCompensationStep;
    uint32_t                vendor_afmode_option;
    enum aa_afmode_ext      vendor_afmode_ext;
    enum aa_ae_flashmode    vendor_aeflashMode;
    enum aa_isomode         vendor_isoMode;
    uint32_t                vendor_isoValue;
    int32_t                 vendor_awbValue;
    enum aa_cameraid        vendor_cameraId;
    enum aa_videomode       vendor_videoMode;
    enum aa_ae_facemode     vendor_aeFaceMode;
    enum aa_afstate         vendor_afState;
    int32_t                 vendor_exposureValue;
    uint32_t                vendor_touchAeDone;
    uint32_t                vendor_touchBvChange;
    uint32_t                vendor_captureCount;
    uint32_t                vendor_captureExposureTime;
    uint32_t                vendor_reserved[10];
};

struct camera2_aa_dm {
    enum aa_ae_antibanding_mode     aeAntibandingMode;
    int32_t                         aeExpCompensation;
    enum aa_ae_lock                 aeLock;
    enum aa_aemode                  aeMode;
    uint32_t                        aeRegions[5];
    uint32_t                        aeTargetFpsRange[2];
    enum aa_ae_precapture_trigger   aePrecaptureTrigger;
    enum ae_state                   aeState;
    enum aa_afmode                  afMode;
    uint32_t                        afRegions[5];
    enum aa_af_trigger              afTrigger;
    enum aa_afstate                 afState;
    enum aa_awb_lock                awbLock;
    enum aa_awbmode                 awbMode;
    uint32_t                        awbRegions[5];
    enum aa_capture_intent          captureIntent;
    enum awb_state                  awbState;
    enum aa_effect_mode             effectMode;
    enum aa_mode                    mode;
    enum aa_scene_mode              sceneMode;
    enum aa_videostabilization_mode videoStabilizationMode;

    /* vendor feature */
    float                   vendor_aeExpCompensationStep;
    uint32_t                vendor_afmode_option;
    enum aa_afmode_ext      vendor_afmode_ext;
    enum aa_ae_flashmode    vendor_aeflashMode;
    enum aa_isomode         vendor_isoMode;
    uint32_t                vendor_isoValue;
    int32_t                 vendor_awbValue;
    enum aa_cameraid        vendor_cameraId;
    enum aa_videomode       vendor_videoMode;
    enum aa_ae_facemode     vendor_aeFaceMode;
    enum aa_afstate         vendor_afState;
    int32_t                 vendor_exposureValue;
    uint32_t                vendor_touchAeDone;
    uint32_t                vendor_touchBvChange;
    uint32_t                vendor_captureCount;
    uint32_t                vendor_captureExposureTime;
    float                   vendor_objectDistanceCm;
    uint32_t                vendor_reserved[9];
};

struct camera2_aa_sm {
    uint8_t         aeAvailableAntibandingModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t         aeAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t        aeAvailableTargetFpsRanges[CAMERA2_MAX_AVAILABLE_MODE][2];
    int32_t         aeCompensationRange[2];
    struct rational aeCompensationStep;
    uint8_t         afAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t         availableEffects[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t         availableSceneModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint8_t         availableVideoStabilizationModes[4];
    uint8_t         awbAvailableModes[CAMERA2_MAX_AVAILABLE_MODE];
    uint32_t        maxRegions[3];
    uint32_t        maxRegionsAe;
    uint32_t        maxRegionsAwb;
    uint32_t        maxRegionsAf;
    uint8_t         sceneModeOverrides[CAMERA2_MAX_AVAILABLE_MODE][3];
    uint32_t        availableHighSpeedVideoConfigurations[CAMERA2_MAX_AVAILABLE_MODE][5];
    enum aa_ae_lockavailable        aeLockAvailable;
    enum aa_awb_lockavailable       awbLockAvailable;
    enum aa_available_mode          availableModes;

    /* vendor feature */
    uint32_t        vendor_isoRange[2];
};

/* android.led */

enum led_transmit {
    TRANSMIT_OFF = 0,
    TRANSMIT_ON,
};

struct camera2_led_ctl {
    enum led_transmit       transmit;
};

struct camera2_led_dm {
    enum led_transmit       transmit;
};

struct camera2_led_sm {
    uint8_t     availableLeds[CAMERA2_MAX_AVAILABLE_MODE];
};

/* android.info */

enum info_supported_hardware_level {
    INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0,
    INFO_SUPPORTED_HARDWARE_LEVEL_FULL,
    INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,
};

struct camera2_info_sm {
    enum info_supported_hardware_level  supportedHardwareLevel;
};

/* android.blacklevel */

enum blacklevel_lock {
    BLACK_LEVEL_LOCK_OFF = 0,
    BLACK_LEVEL_LOCK_ON,
};

struct camera2_blacklevel_ctl {
    enum blacklevel_lock        lock;
};

struct camera2_blacklevel_dm {
    enum blacklevel_lock        lock;
};

/* android.reprocess */

struct camera2_reprocess_ctl {
    float       effectiveExposureFactor;
};

struct camera2_reprocess_dm {
    float       effectiveExposureFactor;
};

struct camera2_reprocess_sm {
    uint32_t    maxCaptureStall;
};

/* android.depth */

enum depth_available_depth_stream_config {
    DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_OUTPUT,
    DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_INPUT,
};

enum depth_depth_is_exclusive {
    DEPTH_DEPTH_IS_EXCLUSIVE_FALSE,
    DEPTH_DEPTH_IS_EXCLUSIVE_TRUE,
};

struct camera2_depth_sm {
    uint32_t                                    maxDepthSamples;
    enum depth_available_depth_stream_config    availableDepthStreamConfigurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    uint64_t                                    availableDepthMinFrameDurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    uint64_t                                    availableDepthStallDurations[CAMERA2_MAX_AVAILABLE_MODE][4];
    enum depth_depth_is_exclusive               depthIsExclusive;
};

/* android.sync */

enum sync_frame_number {
    SYNC_FRAME_NUMBER_CONVERGING    = -1,
    SYNC_FRAME_NUMBER_UNKNOWN       = -2,
};

enum sync_max_latency {
    SYNC_MAX_LATENCY_PER_FRAME_CONTROL  = 0,
    SYNC_MAX_LATENCY_UNKNOWN            = -1,
};

struct camera2_sync_ctl {
    int64_t         frameNumber;
};

struct camera2_sync_dm {
    int32_t         maxLatency;
};

struct camera2_lens_usm {
    uint32_t    focusDistanceFrameDelay;
};

struct camera2_sensor_usm {
    uint32_t    exposureTimeFrameDelay;
    uint32_t    frameDurationFrameDelay;
    uint32_t    sensitivityFrameDelay;
};

struct camera2_flash_usm {
    uint32_t    flashModeFrameDelay;
    uint32_t    firingPowerFrameDelay;
    uint64_t    firingTimeFrameDelay;
};

struct camera2_ctl {
    struct camera2_colorcorrection_ctl  color;
    struct camera2_aa_ctl               aa;
    struct camera2_demosaic_ctl         demosaic;
    struct camera2_edge_ctl             edge;
    struct camera2_flash_ctl            flash;
    struct camera2_hotpixel_ctl         hotpixel;
    struct camera2_jpeg_ctl             jpeg;
    struct camera2_lens_ctl             lens;
    struct camera2_noisereduction_ctl   noise;
    struct camera2_request_ctl          request;
    struct camera2_scaler_ctl           scaler;
    struct camera2_sensor_ctl           sensor;
    struct camera2_shading_ctl          shading;
    struct camera2_stats_ctl            stats;
    struct camera2_tonemap_ctl          tonemap;
    struct camera2_led_ctl              led;
    struct camera2_blacklevel_ctl       blacklevel;
    struct camera2_sync_ctl             sync;
    struct camera2_reprocess_ctl        reprocess;

    /* vendor feature */
    struct camera2_entry_ctl            vendor_entry;
};

struct camera2_dm {
    struct camera2_colorcorrection_dm   color;
    struct camera2_aa_dm                aa;
    struct camera2_demosaic_dm          demosaic;
    struct camera2_edge_dm              edge;
    struct camera2_flash_dm             flash;
    struct camera2_hotpixel_dm          hotpixel;
    struct camera2_jpeg_dm              jpeg;
    struct camera2_lens_dm              lens;
    struct camera2_noisereduction_dm    noise;
    struct camera2_request_dm           request;
    struct camera2_scaler_dm            scaler;
    struct camera2_sensor_dm            sensor;
    struct camera2_shading_dm           shading;
    struct camera2_stats_dm             stats;
    struct camera2_tonemap_dm           tonemap;
    struct camera2_led_dm               led;
    struct camera2_blacklevel_dm        blacklevel;
    struct camera2_sync_dm              sync;
    struct camera2_reprocess_dm         reprocess;

    /* vendor feature */
    struct camera2_entry_dm             vendor_entry;
};

struct camera2_sm {
    struct camera2_colorcorrection_sm   color;
    struct camera2_aa_sm                aa;
    struct camera2_edge_sm              edge;
    struct camera2_flash_sm             flash;
    struct camera2_hotpixel_sm          hotpixel;
    struct camera2_jpeg_sm              jpeg;
    struct camera2_lens_sm              lens;
    struct camera2_noisereduction_sm    noise;
    struct camera2_request_sm           request;
    struct camera2_scaler_sm            scaler;
    struct camera2_sensor_sm            sensor;
    struct camera2_shading_sm           shading;
    struct camera2_stats_sm             stats;
    struct camera2_tonemap_sm           tonemap;
    struct camera2_led_sm               led;
    struct camera2_info_sm              info;
    struct camera2_reprocess_sm         reprocess;
    struct camera2_depth_sm             depth;

    /** User-defined(ispfw specific) static metadata. */
    struct camera2_lens_usm             lensUd;
    struct camera2_sensor_usm           sensorUd;
    struct camera2_flash_usm            flashUd;
};

struct camera2_obj_af_info {
    int32_t focusState;
    int32_t focusROILeft;
    int32_t focusROIRight;
    int32_t focusROITop;
    int32_t focusROIBottom;
    int32_t focusWeight;
    int32_t w_movement;
    int32_t h_movement;
    int32_t w_velocity;
    int32_t h_velocity;
};

struct camera2_hrm_sensor_info {
    uint32_t       visible_data;
    uint32_t       ir_data;
    uint32_t       flicker_data; // 0: No flicker detect, 100: 50Hz, 120: 60Hz
    int32_t        status;
};

struct camera2_illuminaion_sensor_info {
    uint16_t visible_cdata;
    uint16_t visible_rdata;
    uint16_t visible_gdata;
    uint16_t visible_bdata;
    uint16_t visible_gain;
    uint16_t visible_exptime;
    uint16_t ir_north;
    uint16_t ir_south;
    uint16_t ir_east;
    uint16_t ir_west;
    uint16_t ir_gain;
    uint16_t ir_exptime;
};

struct camera2_gyro_sensor_info {
    float x;
    float y;
    float z;
};

struct camera2_accelerometer_sensor_info {
    float x;
    float y;
    float z;
};

struct camera2_proximity_sensor_info {
    int32_t flicker_data;
};

struct camera2_aa_uctl {
    struct camera2_obj_af_info              af_data;
    struct camera2_hrm_sensor_info          hrmInfo;
    struct camera2_illuminaion_sensor_info  illuminationInfo;
    struct camera2_gyro_sensor_info         gyroInfo;
    struct camera2_accelerometer_sensor_info    accInfo;
    struct camera2_proximity_sensor_info    proximityInfo;
};

struct camera2_aa_udm {
    struct camera2_obj_af_info              af_data;
    struct camera2_hrm_sensor_info          hrmInfo;
    struct camera2_illuminaion_sensor_info  illuminationInfo;
    struct camera2_gyro_sensor_info         gyroInfo;
    struct camera2_accelerometer_sensor_info    accInfo;
    struct camera2_proximity_sensor_info    proximityInfo;
};

struct camera2_lens_uctl {
    uint32_t        pos;
    uint32_t        posSize;
    uint32_t        direction;
    uint32_t        slewRate;
    uint32_t        oisCoefVal;
};

struct camera2_lens_udm {
    uint32_t        pos;
    uint32_t        posSize;
    uint32_t        direction;
    uint32_t        slewRate;
    uint32_t        oisCoefVal;
};

struct camera2_ae_udm {
    uint32_t    vsLength;
    uint32_t    vendorSpecific[CAMERA2_MAX_VENDER_LENGTH];
    uint32_t    vs2Length;
    uint32_t    vendorSpecific2[CAMERA2_MAX_UDM_VENDOR2_LENGTH];
};

struct camera2_awb_udm {
    uint32_t    vsLength;
    uint32_t    vendorSpecific[CAMERA2_MAX_VENDER_LENGTH];
    uint32_t    vs2Length;
    uint32_t    vendorSpecific2[CAMERA2_MAX_UDM_VENDOR2_LENGTH];
};

struct camera2_af_uctl {
    uint32_t        vs2Length;
    uint32_t        vendorSpecific2[CAMERA2_MAX_UCTL_VENDOR2_LENGTH];
};

struct camera2_af_udm {
    uint32_t        vsLength;
    uint32_t        vendorSpecific[CAMERA2_MAX_VENDER_LENGTH];
    int32_t         lensPositionInfinity;
    int32_t         lensPositionMacro;
    int32_t         lensPositionCurrent;
    uint32_t        vs2Length;
    uint32_t        vendorSpecific2[CAMERA2_MAX_UDM_VENDOR2_LENGTH];
};

struct camera2_as_udm {
    uint32_t    vsLength;
    uint32_t    vendorSpecific[CAMERA2_MAX_VENDER_LENGTH];
};

struct camera2_ipc_udm {
    uint32_t    vsLength;
    uint32_t    vendorSpecific[CAMERA2_MAX_IPC_VENDER_LENGTH];
};

/** \brief
        User-defined metadata for rta debug info.
 */
struct camera2_rta_udm {
    uint32_t vsLength;
    uint32_t vendorSpecific[100];
};

struct camera2_internal_udm {
    uint32_t ProcessedFrameInfo;
    uint32_t vendorSpecific1[CAMERA2_MAX_VENDER_LENGTH];
    uint32_t vendorSpecific2[CAMERA2_MAX_VENDER_LENGTH];
    /*
       vendorSpecific2[0] : 3aaIspSircSdk
       vendorSpedific2[1] : IspTpuSirdSdk
       vendorSpecific2[100] : exposure
       vendorSpecific2[101] : iso(gain)
       vendorSpecific2[102] : Bv
       vendorSpecific2[103] : Tv
     */
};

struct camera2_sensor_uctl {
    uint64_t    dynamicFrameDuration;
    uint32_t    analogGain;
    uint32_t    digitalGain;
    uint64_t    longExposureTime;
    uint64_t    shortExposureTime;
    uint32_t    longAnalogGain;
    uint32_t    shortAnalogGain;
    uint32_t    longDigitalGain;
    uint32_t    shortDigitalGain;
    uint64_t    exposureTime;
    uint32_t    frameDuration;
    uint32_t    sensitivity;
    uint32_t    CtrlFrameDuration;
};

struct camera2_sensor_udm {
    uint64_t    dynamicFrameDuration;
    uint32_t    analogGain;
    uint32_t    digitalGain;
    uint64_t    longExposureTime;
    uint64_t    shortExposureTime;
    uint32_t    longAnalogGain;
    uint32_t    shortAnalogGain;
    uint32_t    longDigitalGain;
    uint32_t    shortDigitalGain;
    uint64_t    timeStampBoot;
    uint32_t    multiLuminances[9];
};

enum mcsc_port {
    MCSC_PORT_NONE = -1,
    MCSC_PORT_0,
    MCSC_PORT_1,
    MCSC_PORT_2,
    MCSC_PORT_3,
    MCSC_PORT_4,
    MCSC_PORT_MAX,
};

enum mcsc_interface_type {
    INTERFACE_TYPE_YSUM = 0,
    INTERFACE_TYPE_DS,
    INTERFACE_TYPE_MAX,
};

struct ysum_data {
    uint32_t lower_ysum_value;
    uint32_t higher_ysum_value;
};

struct camera2_scaler_uctl {
    uint32_t sourceAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t txcTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t txpTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t ixcTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t ixpTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sccTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t scpTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc0TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc1TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc2TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc3TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc4TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t sc5TargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t dxcTargetAddress[EXYNOS_CAMERA_BUFFER_MAX_PLANES];
    uint32_t orientation;
    enum mcsc_port mcsc_sub_blk_port[INTERFACE_TYPE_MAX];
};

struct camera2_scaler_udm {
    struct ysum_data ysumdata;
};

struct camera2_flash_uctl {
    uint32_t        firingPower;
    uint64_t        firingTime;
    enum flash_mode flashMode;
};

struct camera2_flash_udm {
    uint32_t        firingPower;
    uint64_t        firingTime;
    enum flash_mode flashMode;
};

enum companion_drc_mode {
    COMPANION_DRC_OFF = 1,
    COMPANION_DRC_ON,
};

enum companion_wdr_mode {
    COMPANION_WDR_OFF = 1,
    COMPANION_WDR_ON = 2,
    COMPANION_WDR_AUTO = 3,
    COMPANION_WDR_AUTO_LIKE = 4,
    TOTALCOUNT_COMPANION_WDR,
    COMPANION_WDR_UNKNOWN,
};

enum companion_paf_mode {
    COMPANION_PAF_OFF = 1,
    COMPANION_PAF_ON,
};

enum companion_caf_mode {
    COMPANION_CAF_OFF = 1,
    COMPANION_CAF_ON,
};

enum companion_bypass_mode {
    COMPANION_FULL_BYPASS_OFF = 1,
    COMPANION_FULL_BYPASS_ON,
};

enum companion_lsc_mode {
    COMPANION_LSC_OFF = 1,
    COMPANION_LSC_ON,
};

enum companion_bpc_mode {
    COMPANION_BPC_OFF = 1,
    COMPANION_BPC_ON,
};

enum companion_disparity_mode {
    COMPANION_DISPARITY_OFF = 1,
    COMPANION_DISPARITY_SAD,
    COMPANION_DISPARITY_CENSUS_MEAN,
    COMPANION_DISPARITY_CENSUS_CENTER    // Disparity mode default
};

enum camera_flash_mode {
   CAMERA_FLASH_MODE_OFF = 0,
   CAMERA_FLASH_MODE_AUTO,
   CAMERA_FLASH_MODE_ON,
   CAMERA_FLASH_MODE_RED_EYE,
   CAMERA_FLASH_MODE_TORCH
};

enum camera_op_mode {
    CAMERA_OP_MODE_GED = 0,   // default
    CAMERA_OP_MODE_TW,
    CAMERA_OP_MODE_HAL3_GED,
    CAMERA_OP_MODE_HAL3_TW = CAMERA_OP_MODE_TW,   // Temp
    CAMERA_OP_MODE_FAC,
    CAMERA_OP_MODE_HAL3_FAC,
};

struct camera2_companion_uctl {
    enum companion_drc_mode     drc_mode;
    enum companion_wdr_mode     wdr_mode;
    enum companion_paf_mode     paf_mode;
    enum companion_caf_mode     caf_mode;
    enum companion_lsc_mode     lsc_mode;
    enum companion_bpc_mode     bpc_mode;
    enum companion_bypass_mode  bypass_mode;
    enum companion_disparity_mode   disparity_mode;
};

struct camera2_pdaf_single_result {
    uint16_t    mode;
    uint16_t    goalPos;
    uint16_t    reliability;
    uint16_t    currentPos;
};

struct camera2_pdaf_multi_result {
    uint16_t    mode;
    uint16_t    goalPos;
    uint16_t    reliability;
    uint16_t    focused;
};

struct camera2_pdaf_udm {
    uint16_t    numCol;
    uint16_t    numRow;
    struct camera2_pdaf_multi_result    multiResult[CAMERA2_MAX_PDAF_MULTIROI_ROW][CAMERA2_MAX_PDAF_MULTIROI_COLUMN];
    struct camera2_pdaf_single_result   singleResult;
    uint16_t    lensPosResolution;
};

struct camera2_companion_udm {
    enum companion_drc_mode     drc_mode;
    enum companion_wdr_mode     wdr_mode;
    enum companion_paf_mode     paf_mode;
    enum companion_caf_mode     caf_mode;
    enum companion_lsc_mode     lsc_mode;
    enum companion_bpc_mode     bpc_mode;
    enum companion_bypass_mode  bypass_mode;
    struct camera2_pdaf_udm     pdaf;
    enum companion_disparity_mode     disparity_mode;
};

struct camera2_fd_uctl {
    enum facedetect_mode faceDetectMode;
    uint32_t  faceIds[CAMERA2_MAX_FACES];
    uint32_t  faceLandmarks[CAMERA2_MAX_FACES][6];
    uint32_t  faceRectangles[CAMERA2_MAX_FACES][4];
    uint8_t   faceScores[CAMERA2_MAX_FACES];
    uint32_t  faces[CAMERA2_MAX_FACES];
    uint32_t  vendorSpecific[CAMERA2_MAX_UCTL_VENDER_LENGTH];
/* ---------------------------------------------------------
        vendorSpecific[0] = fdMapAddress[0];
        vendorSpecific[1] = fdMapAddress[1];
        vendorSpecific[2] = fdMapAddress[2];
        vendorSpecific[4] = fdMapAddress[4];
        vendorSpecific[5] = fdMapAddress[5];
        vendorSpecific[6] = fdMapAddress[6];
        vendorSpecific[7] = fdMapAddress[7];
        vendorSpecific[8] = fdYMapAddress;
        vendorSpecific[9] = fdCoefK;
        vendorSpecific[10] = fdUp;
        vendorSpecific[11] = fdShift;
        vendorSpecific[12] ~ vendorSpecific[31] : reserved
    ---------------------------------------------------------
*/
};

struct camera2_fd_udm {
    uint32_t    vendorSpecific[CAMERA2_MAX_UCTL_VENDER_LENGTH];
/* ---------------------------------------------------------
        vendorSpecific[0] = fdSat;
        vendorSpecific[1] ~ vendorSpecific[31] : reserved
    ---------------------------------------------------------
*/
};

struct camera2_ni_udm {
    uint32_t currentFrameNoiseIndex; /* Noise Index for N */
    uint32_t nextFrameNoiseIndex; /* Noise Index for N+1 */
    uint32_t nextNextFrameNoiseIndex; /* Noise Index for N+2 */
};

enum camera2_drc_mode {
    DRC_OFF = 1,
    DRC_ON,
};

struct camera2_drc_uctl {
    enum camera2_drc_mode uDrcEn;
};

enum camera2_dcp_process_mode {
	DCP_PROCESS_OFF = 0,
	DCP_PROCESS_ON,
};

struct camera2_area {
	int32_t x;		/* !< x pos */
	int32_t y;	/* !< y pos */
	int32_t w;		/* !< width */
	int32_t h;		/* !< height */
};

struct camera2_dcp_homo_matrix {
	int32_t dx[7][9];	/* 7 rows x 9 columns, range precision */
	int32_t dy[7][9];
};

struct camera2_dcp_rgb_gamma_lut {
	enum camera2_dcp_process_mode mode;
	uint32_t x_LUT[32];
	uint32_t r_LUT[32];
	uint32_t g_LUT[32];
	uint32_t b_LUT[32];
};

struct camera2_dcp_uctl
{
    struct camera2_dcp_homo_matrix wide_gdc_grid_value;
    struct camera2_dcp_homo_matrix tele_gdc_grid_value;
    struct camera2_area wide_gdc_upscale_size;
    struct camera2_area tele_gdc_upscale_size;
    struct camera2_dcp_rgb_gamma_lut wide_gamma_LUT;
    struct camera2_dcp_rgb_gamma_lut tele_gamma_LUT;
};

enum camera_vt_mode {
    VT_MODE_OFF = 0,
    VT_MODE_1,
    VT_MODE_2,
    VT_MODE_3,
    VT_MODE_4,
    VT_MODE_5,   /* vga ~ hd 20Fps */
};

enum camera2_is_hw_lls_mode {
    CAMERA_HW_LLS_OFF = 0,
    CAMERA_HW_LLS_ON,
};

enum camera2_is_hw_lls_progress {
    CAMERA_HW_LLS_FIRST_FRAME = 0,
    CAMERA_HW_LLS_SECOND_FRAME,
    CAMERA_HW_LLS_INTERMEDIATE_FRAME,
    CAMERA_HW_LLS_LAST_FRAME,
};

struct camera2_is_hw_lls_uctl {
    enum camera2_is_hw_lls_mode    hwLlsMode;
    enum camera2_is_hw_lls_progress    hwLlsProgress;
};

struct camera2_uctl {
    uint32_t                        uUpdateBitMap;
    uint32_t                        uFrameNumber;
    struct camera2_aa_uctl          aaUd;
    struct camera2_af_uctl          af;
    struct camera2_lens_uctl        lensUd;
    struct camera2_sensor_uctl      sensorUd;
    struct camera2_flash_uctl       flashUd;
    struct camera2_scaler_uctl      scalerUd;
    struct camera2_companion_uctl   companionUd;
    struct camera2_fd_uctl          fdUd;
    struct camera2_drc_uctl         drcUd;
    struct camera2_dcp_uctl         dcpUd;
    enum camera_vt_mode             vtMode;
    float                           zoomRatio;
    enum camera_flash_mode          flashMode;
    enum camera_op_mode             opMode;
    struct camera2_is_hw_lls_uctl   hwLls_mode;
    uint32_t                        statsRoi[4];
    enum aa_cameratype              masterCam;
    uint32_t                        reserved[1];
};

struct camera2_udm {
    struct camera2_aa_udm        aa;
    struct camera2_lens_udm      lens;
    struct camera2_sensor_udm	 sensor;
    struct camera2_flash_udm	 flash;
    struct camera2_ae_udm        ae;
    struct camera2_awb_udm       awb;
    struct camera2_af_udm        af;
    struct camera2_as_udm        as;
    struct camera2_ipc_udm       ipc;
    struct camera2_rta_udm       rta;
    struct camera2_internal_udm  internal;
    struct camera2_scaler_udm    scaler;
    struct camera2_companion_udm companion;
    struct camera2_fd_udm        fd;
    enum camera_vt_mode          vtMode;
    float                        zoomRatio;
    enum camera_flash_mode       flashMode;
    enum camera_op_mode          opMode;
    struct camera2_ni_udm        ni;
    uint32_t                     reserved[3];
};

struct camera2_shot {
    struct camera2_ctl    ctl;
    struct camera2_dm     dm;
    struct camera2_uctl   uctl;
    struct camera2_udm    udm;
    uint32_t              magicNumber;
};

struct camera2_node_input {
    uint32_t    cropRegion[4];
};

struct camera2_node_output {
    uint32_t    cropRegion[4];
};

struct camera2_node {
    uint32_t    vid;
    uint32_t    request;
    struct camera2_node_input    input;
    struct camera2_node_output   output;
/*
pixelformat : per-frame format
byteperline : stride for DMA
 */
    uint32_t    pixelformat;
};

struct camera2_node_group {
    struct camera2_node    leader;
    struct camera2_node    capture[CAPTURE_NODE_MAX];
};

struct hfd_meta {
    uint32_t    hfd_enable;
	uint32_t		is_rot[CAMERA2_MAX_FACES];
	uint32_t		is_yaw[CAMERA2_MAX_FACES];
    uint32_t    rot[CAMERA2_MAX_FACES];
	uint32_t		mirror_x[CAMERA2_MAX_FACES];
	uint32_t		hw_rot_mirror[CAMERA2_MAX_FACES];
};

struct camera2_stream {
    uint32_t        address;
    uint32_t        fcount;
    uint32_t        rcount;
    uint32_t        findex;
    uint32_t        fvalid;
    uint32_t        input_crop_region[4];
    uint32_t        output_crop_region[4];
};

struct camera2_shot_ext {
    struct camera2_stream     reserved_stream;
    uint32_t                  setfile;
    struct camera2_node_group node_group;
    uint32_t                  drc_bypass;
    uint32_t                  dis_bypass;
    uint32_t                  dnr_bypass;
    uint32_t                  fd_bypass;
    uint32_t                  free_cnt;
    uint32_t                  request_cnt;
    uint32_t                  process_cnt;
    uint32_t                  complete_cnt;
    uint32_t                  invalid;
    struct hfd_meta           hfd;
    uint32_t                  reserved[13];
    uint32_t                  timeZone[10][2];
    struct camera2_shot       shot;
};

#define CAM_LENS_CMD        (0x1 << 0x0)
#define CAM_SENSOR_CMD      (0x1 << 0x1)
#define CAM_FLASH_CMD       (0x1 << 0x2)

enum camera_pixel_size {
    CAMERA_PIXEL_SIZE_8BIT = 0,
    CAMERA_PIXEL_SIZE_10BIT,
    CAMERA_PIXEL_SIZE_PACKED_10BIT,
    CAMERA_PIXEL_SIZE_8_2BIT,
};

/* typedefs below are for firmware sources */

typedef enum metadata_mode metadata_mode_t;
typedef struct camera2_request_ctl camera2_request_ctl_t;
typedef struct camera2_request_dm camera2_request_dm_t;
typedef enum optical_stabilization_mode optical_stabilization_mode_t;
typedef enum lens_facing lens_facing_t;
typedef struct camera2_entry_ctl camera2_entry_ctl_t;
typedef struct camera2_entry_dm camera2_entry_dm_t;
typedef struct camera2_lens_ctl camera2_lens_ctl_t;
typedef struct camera2_lens_dm camera2_lens_dm_t;
typedef struct camera2_lens_sm camera2_lens_sm_t;
typedef enum sensor_colorfilterarrangement sensor_colorfilterarrangement_t;
typedef enum sensor_lensshading_applied sensor_lensshading_applied_t;
typedef enum sensor_ref_illuminant sensor_ref_illuminant_t;
typedef struct camera2_sensor_ctl camera2_sensor_ctl_t;
typedef struct camera2_sensor_dm camera2_sensor_dm_t;
typedef struct camera2_sensor_sm camera2_sensor_sm_t;
typedef enum flash_mode flash_mode_t;
typedef struct camera2_flash_ctl camera2_flash_ctl_t;
typedef struct camera2_flash_dm camera2_flash_dm_t;
typedef struct camera2_flash_sm camera2_flash_sm_t;
typedef enum processing_mode processing_mode_t;
typedef struct camera2_hotpixel_ctl camera2_hotpixel_ctl_t;
typedef struct camera2_hotpixel_dm camera2_hotpixel_dm_t;
typedef struct camera2_hotpixel_sm camera2_hotpixel_sm_t;

typedef struct camera2_demosaic_ctl camera2_demosaic_ctl_t;
typedef struct camera2_demosaic_dm camera2_demosaic_dm_t;
typedef struct camera2_noisereduction_ctl camera2_noisereduction_ctl_t;
typedef struct camera2_noisereduction_dm camera2_noisereduction_dm_t;
typedef struct camera2_noisereduction_sm camera2_noisereduction_sm_t;
typedef struct camera2_shading_ctl camera2_shading_ctl_t;
typedef struct camera2_shading_dm camera2_shading_dm_t;
typedef enum colorcorrection_mode colorcorrection_mode_t;
typedef struct camera2_colorcorrection_ctl camera2_colorcorrection_ctl_t;
typedef struct camera2_colorcorrection_dm camera2_colorcorrection_dm_t;
typedef struct camera2_colorcorrection_sm camera2_colorcorrection_sm_t;
typedef enum tonemap_mode tonemap_mode_t;
typedef enum tonemap_presetCurve tonemap_presetCurve_t;
typedef struct camera2_tonemap_ctl camera2_tonemap_ctl_t;
typedef struct camera2_tonemap_dm camera2_tonemap_dm_t;
typedef struct camera2_tonemap_sm camera2_tonemap_sm_t;

typedef struct camera2_edge_ctl camera2_edge_ctl_t;
typedef struct camera2_edge_dm camera2_edge_dm_t;
typedef struct camera2_edge_sm camera2_edge_sm_t;
typedef struct camera2_scaler_ctl camera2_scaler_ctl_t;
typedef struct camera2_scaler_dm camera2_scaler_dm_t;
typedef struct camera2_jpeg_ctl camera2_jpeg_ctl_t;
typedef struct camera2_jpeg_dm camera2_jpeg_dm_t;
typedef struct camera2_jpeg_sm camera2_jpeg_sm_t;
typedef enum facedetect_mode facedetect_mode_t;
typedef enum stats_mode stats_mode_t;
typedef struct camera2_stats_ctl camera2_stats_ctl_t;
typedef struct camera2_stats_dm camera2_stats_dm_t;
typedef struct camera2_stats_sm camera2_stats_sm_t;
typedef enum aa_capture_intent aa_capture_intent_t;
typedef enum aa_mode aa_mode_t;
typedef enum aa_scene_mode aa_scene_mode_t;
typedef enum aa_effect_mode aa_effect_mode_t;
typedef enum aa_aemode aa_aemode_t;
typedef enum aa_ae_antibanding_mode aa_ae_antibanding_mode_t;
typedef enum aa_awbmode aa_awbmode_t;
typedef enum aa_afmode aa_afmode_t;
typedef enum aa_afstate aa_afstate_t;
typedef enum aa_ae_lockavailable aa_ae_lockavailable_t;
typedef enum aa_awb_lockavailable aa_awb_lockavailable_t;
typedef enum aa_available_mode aa_available_mode_t;
typedef struct camera2_aa_ctl camera2_aa_ctl_t;
typedef struct camera2_aa_dm camera2_aa_dm_t;
typedef struct camera2_aa_sm camera2_aa_sm_t;
typedef struct camera2_lens_usm camera2_lens_usm_t;
typedef struct camera2_sensor_usm camera2_sensor_usm_t;
typedef struct camera2_flash_usm camera2_flash_usm_t;
typedef struct camera2_ctl camera2_ctl_t;
typedef struct camera2_uctl camera2_uctl_t;
typedef struct camera2_dm camera2_dm_t;
typedef struct camera2_sm camera2_sm_t;

typedef struct camera2_reprocess_ctl camera2_reprocess_ctl_t;
typedef struct camera2_reprocess_dm camera2_reprocess_dm_t;
typedef struct camera2_reprocess_sm camera2_reprocess_sm_t;
typedef enum depth_available_depth_stream_config depth_available_depth_stream_config_t;
typedef enum depth_depth_is_exclusive depth_depth_is_exclusive_t;
typedef struct camera2_depth_sm camera2_depth_ctl_t;

typedef struct camera2_scaler_sm camera2_scaler_sm_t;
typedef struct camera2_scaler_uctl camera2_scaler_uctl_t;

typedef struct camera2_fd_uctl camera2_fd_uctl_t;
typedef struct camera2_fd_udm camera2_fd_udm_t;

typedef struct camera2_sensor_uctl camera2_sensor_uctl_t;

typedef struct camera2_aa_uctl camera2_aa_uctl_t;
typedef struct camera2_aa_udm camera2_aa_udm_t;

typedef struct camera2_lens_uctl camera2_lens_uctl_t;
typedef struct camera2_lens_udm camera2_lens_udm_t;

typedef struct camera2_ae_udm camera2_ae_udm_t;
typedef struct camera2_awb_udm camera2_awb_udm_t;
typedef struct camera2_af_udm camera2_af_udm_t;
typedef struct camera2_as_udm camera2_as_udm_t;
typedef struct camera2_ipc_udm camera2_ipc_udm_t;
typedef struct camera2_udm camera2_udm_t;

typedef struct camera2_rta_udm camera2_rta_udm_t;
typedef struct camera2_internal_udm camera2_internal_udm_t;

typedef struct camera2_flash_uctl camera2_flash_uctl_t;

typedef struct camera2_companion_udm camera2_companion_udm_t;

typedef struct camera2_shot camera2_shot_t;

typedef struct camera2_ni_udm camera2_ni_udm_t;
#endif
