| /* | 
|  * aec_head.h | 
|  * | 
|  *  Copyright (c) 2021 Rockchip Corporation | 
|  * | 
|  * 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. | 
|  * | 
|  */ | 
|   | 
| #ifndef __CALIBDBV2_AEC_HEAD_H__ | 
| #define __CALIBDBV2_AEC_HEAD_H__ | 
|   | 
| #include "rk_aiq_comm.h" | 
|   | 
| RKAIQ_BEGIN_DECLARE | 
|   | 
| // #define M4_STRUCT_DESC(ALIAS, SIZE, UI_MODULE) | 
| // #define M4_NUMBER_DESC(ALIAS, TYPE, SIZE, RANGE, DEFAULT) | 
| // #define M4_STRING_DESC(ALIAS, SIZE, RANGE, DEFAULT) | 
| // #define M4_ENUM_DESC(ALIAS, ENUM, DEFAULT) | 
|   | 
| #include "rk_aiq_comm.h" | 
|   | 
| #define AECV2_PIRIS_STEP_TABLE_MAX (1024) | 
| #define AECV2_MAX_GRIDWEIGHT_NUM (225) | 
| #define AECV2_MAX_HDRFRAME_NUM (3) | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC enum Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef enum _CalibDb_HdrAeRatioTypeV2_e { | 
|     AECV2_HDR_RATIOTYPE_MODE_AUTO, | 
|     AECV2_HDR_RATIOTYPE_MODE_FIX, | 
| } CalibDb_HdrAeRatioTypeV2_t; | 
|   | 
| typedef enum _CalibDb_AeStrategyModeV2_e { | 
|     AECV2_STRATEGY_MODE_LOWLIGHT_PRIOR, | 
|     AECV2_STRATEGY_MODE_HIGHLIGHT_PRIOR, | 
| } CalibDb_AeStrategyModeV2_t; | 
|   | 
| typedef enum _CalibDb_AeHdrLongFrmModeV2_e { | 
|     AECV2_HDR_LONGFRMMODE_NORMAL             = 0, | 
|     AECV2_HDR_LONGFRMMODE_AUTO_LONG_FRAME    = 1, | 
|     AECV2_HDR_LONGFRMMODE_LONG_FRAME         = 2, | 
| } CalibDb_AeHdrLongFrmModeV2_t; | 
|   | 
| typedef enum _CalibDb_AecMeasAreaModeV2_e { | 
|     AECV2_MEASURE_AREA_AUTO    = 0, | 
|     AECV2_MEASURE_AREA_UP, | 
|     AECV2_MEASURE_AREA_BOTTOM, | 
|     AECV2_MEASURE_AREA_LEFT, | 
|     AECV2_MEASURE_AREA_RIGHT, | 
|     AECV2_MEASURE_AREA_CENTER, | 
| } CalibDb_AecMeasAreaModeV2_t; | 
|   | 
| typedef enum _CalibDb_FlickerFreqV2_e { | 
|     AECV2_FLICKER_FREQUENCY_OFF   = 0, | 
|     AECV2_FLICKER_FREQUENCY_50HZ = 1, | 
|     AECV2_FLICKER_FREQUENCY_60HZ = 2, | 
| } CalibDb_FlickerFreqV2_t; | 
|   | 
| typedef enum _CalibDb_AntiFlickerModeV2_e { | 
|     AECV2_ANTIFLICKER_AUTO_MODE, | 
|     AECV2_ANTIFLICKER_NORMAL_MODE, | 
| } CalibDb_AntiFlickerModeV2_t; | 
|   | 
| typedef enum _CalibDb_IrisTypeV2_e { | 
|     IRISV2_DC_TYPE = 0, | 
|     IRISV2_P_TYPE = 1, | 
| } CalibDb_IrisTypeV2_t; | 
|   | 
| typedef enum _CalibDb_CamYRangeModeV2_e { | 
|     CAM_YRANGEV2_MODE_INVALID    = 0,    /**< invalid y range mode   */ | 
|     CAM_YRANGEV2_MODE_FULL,              /**< Y = 0.299 * R + 0.587 * G + 0.114 * B,full range BT601*/ | 
|     CAM_YRANGEV2_MODE_LIMITED,           /**< Y = 16 + 0.25R + 0.5G + 0.1094B,limited range*/ | 
|     CAM_YRANGEV2_MODE_MAX, | 
| } CalibDb_CamYRangeModeV2_t; | 
|   | 
| typedef enum _CalibDb_CamRawStatsModeV2_e { | 
|     CAM_RAWSTATSV2_MODE_INVALID       = 0,    /**< lower border (only for an internal evaluation) */ | 
|     CAM_RAWSTATSV2_MODE_R,                 /**< R channel */ | 
|     CAM_RAWSTATSV2_MODE_G,                 /**< G channel */ | 
|     CAM_RAWSTATSV2_MODE_B,                 /**< B channel */ | 
|     CAM_RAWSTATSV2_MODE_Y,                 /**< luminance channel */ | 
|     CAM_RAWSTATSV2_MODE_MAX,                  /**< upper border (only for an internal evaluation) */ | 
| } CalibDb_CamRawStatsModeV2_t; | 
|   | 
| typedef enum _CalibDb_CamHistStatsModeV2_e { | 
|     CAM_HISTV2_MODE_INVALID       = 0,    /**< lower border (only for an internal evaluation) */ | 
|     CAM_HISTV2_MODE_RGB_COMBINED  = 1,    /**< RGB combined histogram, only available for SiHist */ | 
|     CAM_HISTV2_MODE_R             = 2,    /**< R histogram */ | 
|     CAM_HISTV2_MODE_G             = 3,    /**< G histogram */ | 
|     CAM_HISTV2_MODE_B             = 4,    /**< B histogram */ | 
|     CAM_HISTV2_MODE_Y             = 5,    /**< Y luminance histogram */ | 
|     CAM_HISTV2_MODE_MAX,                                  /**< upper border (only for an internal evaluation) */ | 
| } CalibDb_CamHistStatsModeV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC algo CommonCtrl Config Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_AeDelayFrmNumV2_s { | 
|     // M4_NUMBER_DESC("BlackDelay", "u8", M4_RANGE(0,255), "0", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint8_t                 BlackDelay; | 
|   | 
|     // M4_NUMBER_DESC("WhiteDelay", "u8", M4_RANGE(0,255), "0", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint8_t                 WhiteDelay; | 
| } CalibDb_AeDelayFrmNumV2_t; | 
|   | 
| typedef struct CalibDb_AeSpeedV2_s { | 
|     // M4_NUMBER_DESC("DampOver", "f32", M4_RANGE(0,1.00), "0.15", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                   DampOver; | 
|   | 
|     // M4_NUMBER_DESC("DampUnder", "f32", M4_RANGE(0,1.00), "0.45", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                   DampUnder; | 
|   | 
|     // M4_NUMBER_DESC("DampDark2Bright", "f32", M4_RANGE(0,1.00), "0.15", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                   DampDark2Bright; | 
|   | 
|     // M4_NUMBER_DESC("DampBright2Dark", "f32", M4_RANGE(0,1.00), "0.45", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                   DampBright2Dark; | 
| } CalibDb_AeSpeedV2_t; | 
|   | 
| typedef struct CalibDb_AeFrmRateAttrV2_s { | 
|     // M4_BOOL_DESC("isFpsFix", "1") | 
|     bool                    isFpsFix; | 
|   | 
|     // M4_NUMBER_DESC("FpsValue", "f32", M4_RANGE(0,200), "0", M4_DIGIT(1),M4_HIDE(0)) | 
|     float                   FpsValue; | 
| } CalibDb_AeFrmRateAttrV2_t; | 
|   | 
| typedef struct CalibDb_AntiFlickerAttrV2_s { | 
|     // M4_BOOL_DESC("enable", "1") | 
|     bool                           enable; | 
|   | 
|     // M4_ENUM_DESC("Frequency", "CalibDb_FlickerFreqV2_t","AECV2_FLICKER_FREQUENCY_50HZ") | 
|     CalibDb_FlickerFreqV2_t        Frequency; | 
|   | 
|     // M4_ENUM_DESC("Mode", "CalibDb_AntiFlickerModeV2_t","AECV2_ANTIFLICKER_AUTO_MODE") | 
|     CalibDb_AntiFlickerModeV2_t    Mode; | 
| } CalibDb_AntiFlickerAttrV2_t; | 
|   | 
| //manual exposure | 
| typedef struct CalibDb_LinMeAttrV2_s { | 
|     // M4_BOOL_DESC("ManualTimeEn", "1") | 
|     bool                 ManualTimeEn; | 
|   | 
|     // M4_BOOL_DESC("ManualGainEn", "1") | 
|     bool                 ManualGainEn; | 
|   | 
|     // M4_BOOL_DESC("ManualIspDgainEn", "1") | 
|     bool                 ManualIspDgainEn; | 
|   | 
|     // M4_NUMBER_DESC("TimeValue", "f32", M4_RANGE(0,1), "0.003", M4_DIGIT(6),M4_HIDE(0)) | 
|     float                TimeValue; //unit: s = 10^6 us | 
|   | 
|     // M4_NUMBER_DESC("GainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                GainValue; | 
|   | 
|     // M4_NUMBER_DESC("IspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                IspDGainValue; | 
| } CalibDb_LinMeAttrV2_t; | 
|   | 
| typedef struct CalibDb_HdrMeAttrV2_s { | 
|     // M4_BOOL_DESC("ManualTimeEn", "1") | 
|     bool                    ManualTimeEn; | 
|   | 
|     // M4_BOOL_DESC("ManualGainEn", "1") | 
|     bool                    ManualGainEn; | 
|   | 
|     // M4_BOOL_DESC("ManualIspDgainEn", "1") | 
|     bool                    ManualIspDgainEn; | 
|   | 
|     // M4_ARRAY_DESC("TimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.003", M4_DIGIT(6), M4_DYNAMIC(0)) | 
|     float                   TimeValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("GainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                   GainValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("IspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                   IspDGainValue[AECV2_MAX_HDRFRAME_NUM]; | 
| } CalibDb_HdrMeAttrV2_t; | 
|   | 
| typedef struct CalibDb_MeAttrV2_s { | 
|     // M4_STRUCT_DESC("LinearAE", "normal_ui_style") | 
|     CalibDb_LinMeAttrV2_t    LinearAE; | 
|   | 
|     // M4_STRUCT_DESC("HdrAE", "normal_ui_style") | 
|     CalibDb_HdrMeAttrV2_t    HdrAE; | 
| } CalibDb_MeAttrV2_t; | 
|   | 
| //win_scale = [h_off, v_off, h_size, v_size], range=[0,1] | 
| typedef struct CalibDb_Aec_WinScale_s { | 
|     // M4_NUMBER_DESC("h_offs", "f32", M4_RANGE(0,1), "0", M4_DIGIT(2),M4_HIDE(0)) | 
|     float h_offs; | 
|   | 
|     // M4_NUMBER_DESC("v_offs", "f32", M4_RANGE(0,1), "0", M4_DIGIT(2),M4_HIDE(0)) | 
|     float v_offs; | 
|   | 
|     // M4_NUMBER_DESC("h_size", "f32", M4_RANGE(0,1), "1", M4_DIGIT(2),M4_HIDE(0)) | 
|     float h_size; | 
|   | 
|     // M4_NUMBER_DESC("v_size", "f32", M4_RANGE(0,1), "1", M4_DIGIT(2),M4_HIDE(0)) | 
|     float v_size; | 
| } CalibDb_Aec_WinScale_t; | 
|   | 
| typedef struct CalibDb_Aec_WinScaleV2_t { | 
|   | 
|     // M4_STRUCT_DESC("InRawWinScale", "normal_ui_style") | 
|     CalibDb_Aec_WinScale_t        InRawWinScale; | 
|   | 
|     // M4_STRUCT_DESC("TmoRawWinScale", "normal_ui_style") | 
|     CalibDb_Aec_WinScale_t        TmoRawWinScale; | 
|   | 
|     // M4_STRUCT_DESC("YuvWinScale", "normal_ui_style") | 
|     CalibDb_Aec_WinScale_t        YuvWinScale; | 
| } CalibDb_Aec_WinScaleV2_t; | 
|   | 
| typedef struct CalibDb_AeEnvLvCalibV2_s { | 
|     // M4_NUMBER_DESC("CalibFNumber", "f32", M4_RANGE(0,256), "1.6", M4_DIGIT(2),M4_HIDE(0)) | 
|     float        CalibFNumber; | 
|   | 
|     // M4_ARRAY_DESC("CurveCoeff", "f32", M4_SIZE(1,2), M4_RANGE(-1024,1024), "1.0", M4_DIGIT(5), M4_DYNAMIC(0)) | 
|     float        CurveCoeff[2];//y=ax+b, Coeff=[a,b] | 
| } CalibDb_AeEnvLvCalibV2_t; | 
|   | 
| typedef struct CalibDb_AecCommon_AttrV2_s { | 
|     // M4_BOOL_DESC("Enable", "1") | 
|     bool                              Enable; | 
|   | 
|     // M4_NUMBER_DESC("AecRunInterval", "u8", M4_RANGE(0,255), "0", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint8_t                           AecRunInterval; | 
|   | 
|     // M4_ENUM_DESC("AecOpType", "RKAiqOPMode_t","RK_AIQ_OP_MODE_AUTO") | 
|     RKAiqOPMode_t                     AecOpType; | 
|   | 
|     // M4_ENUM_DESC("HistStatsMode", "CalibDb_CamHistStatsModeV2_t","CAM_HISTV2_MODE_G") | 
|     CalibDb_CamHistStatsModeV2_t      HistStatsMode; | 
|   | 
|     // M4_ENUM_DESC("RawStatsMode", "CalibDb_CamRawStatsModeV2_t","CAM_RAWSTATSV2_MODE_G") | 
|     CalibDb_CamRawStatsModeV2_t       RawStatsMode; | 
|   | 
|     // M4_ENUM_DESC("YRangeMode", "CalibDb_CamYRangeModeV2_t","CAM_YRANGEV2_MODE_FULL") | 
|     CalibDb_CamYRangeModeV2_t         YRangeMode; | 
|   | 
|     // M4_ARRAY_DESC("AecGridWeight", "u8", M4_SIZE(15,15), M4_RANGE(0,32), "1", M4_DIGIT(0), M4_DYNAMIC(0)) | 
|     uint8_t                           AecGridWeight[AECV2_MAX_GRIDWEIGHT_NUM]; | 
|   | 
|     // M4_STRUCT_DESC("AecManualCtrl", "normal_ui_style") | 
|     CalibDb_MeAttrV2_t                AecManualCtrl; | 
|   | 
|     // M4_STRUCT_DESC("AecSpeed", "normal_ui_style") | 
|     CalibDb_AeSpeedV2_t               AecSpeed; | 
|   | 
|     // M4_STRUCT_DESC("AecDelayFrmNum", "normal_ui_style") | 
|     CalibDb_AeDelayFrmNumV2_t         AecDelayFrmNum; | 
|   | 
|     // M4_STRUCT_DESC("AecFrameRateMode", "normal_ui_style") | 
|     CalibDb_AeFrmRateAttrV2_t         AecFrameRateMode; | 
|   | 
|     // M4_STRUCT_DESC("AecAntiFlicker", "normal_ui_style") | 
|     CalibDb_AntiFlickerAttrV2_t       AecAntiFlicker; | 
|   | 
|     // M4_STRUCT_DESC("AecEnvLvCalib", "normal_ui_style") | 
|     CalibDb_AeEnvLvCalibV2_t          AecEnvLvCalib; | 
|   | 
|     // M4_STRUCT_DESC("AecWinScale", "normal_ui_style") | 
|     CalibDb_Aec_WinScaleV2_t          AecWinScale; | 
| } CalibDb_AecCommon_AttrV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC algo LinAE Config Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_LinExpInitExpV2_s { | 
|     // M4_NUMBER_DESC("InitTimeValue", "f32", M4_RANGE(0,1), "0.003", M4_DIGIT(6),M4_HIDE(0)) | 
|     float                   InitTimeValue; | 
|   | 
|     // M4_NUMBER_DESC("InitGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                   InitGainValue; | 
|   | 
|     // M4_NUMBER_DESC("InitIspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                   InitIspDGainValue; | 
|   | 
|     // M4_NUMBER_DESC("InitPIrisGainValue", "s32", M4_RANGE(1,4096), "1024", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                     InitPIrisGainValue; | 
|   | 
|     // M4_NUMBER_DESC("InitDCIrisDutyValue", "s32", M4_RANGE(0,100), "100", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                     InitDCIrisDutyValue; | 
| } CalibDb_LinExpInitExpV2_t; | 
|   | 
| typedef struct CalibDb_LinAeRoute_AttrV2_s { | 
|     // M4_ARRAY_DESC("TimeDot", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(6), M4_DYNAMIC(1)) | 
|     float*                    TimeDot; | 
|     int                       TimeDot_len; | 
|     // M4_ARRAY_DESC("GainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    GainDot; | 
|     int                       GainDot_len; | 
|     // M4_ARRAY_DESC("IspDGainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    IspDGainDot; | 
|     int                       IspDGainDot_len; | 
|     // M4_ARRAY_DESC("PIrisDot", "s32", M4_SIZE(1,6), M4_RANGE(1,4096), "1024", M4_DIGIT(0), M4_DYNAMIC(1)) | 
|     int*                      PIrisDot; | 
|     int                       PIrisDot_len; | 
| } CalibDb_LinAeRoute_AttrV2_t; | 
|   | 
| typedef struct CalibDb_AecDynamicSetpointV2_s { | 
|     // M4_ARRAY_DESC("ExpLevel", "f32", M4_SIZE(1,6), M4_RANGE(0,4096), "0", M4_DIGIT(5), M4_DYNAMIC(1)) | 
|     float*                    ExpLevel; | 
|     int                       ExpLevel_len; | 
|     // M4_ARRAY_DESC("DySetpoint", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "40", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                    DySetpoint; | 
|     int                       DySetpoint_len; | 
| } CalibDb_AecDynamicSetpointV2_t; | 
|   | 
| typedef struct CalibDb_BacklitSetPointV2_s { | 
|     // M4_ARRAY_DESC("ExpLevel", "f32", M4_SIZE(1,6), M4_RANGE(0,4096), "0", M4_DIGIT(5), M4_DYNAMIC(1)) | 
|     float*                     ExpLevel; | 
|     int                        ExpLevel_len; | 
|     // M4_ARRAY_DESC("NonOEPdfTh", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0.4", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                     NonOEPdfTh; | 
|     int                        NonOEPdfTh_len; | 
|     // M4_ARRAY_DESC("LowLightPdfTh", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0.2", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                     LowLightPdfTh; | 
|     int                        LowLightPdfTh_len; | 
|     // M4_ARRAY_DESC("TargetLLLuma", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "20", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                     TargetLLLuma; | 
|     int                        TargetLLLuma_len; | 
| } CalibDb_BacklitSetPointV2_t; | 
|   | 
| typedef struct CalibDb_AecBacklightV2_s { | 
|     // M4_BOOL_DESC("Enable", "0") | 
|     bool                        Enable; | 
|   | 
|     // M4_NUMBER_DESC("StrBias", "f32", M4_RANGE(-500,500), "0", M4_DIGIT(2),M4_HIDE(1)) | 
|     float                       StrBias;//uint: % | 
|   | 
|     // M4_ENUM_DESC("MeasArea", "CalibDb_AecMeasAreaModeV2_t","AECV2_MEASURE_AREA_AUTO") | 
|     CalibDb_AecMeasAreaModeV2_t MeasArea; | 
|   | 
|     // M4_NUMBER_DESC("OEROILowTh", "f32", M4_RANGE(0,255), "150", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                       OEROILowTh; | 
|   | 
|     // M4_NUMBER_DESC("LumaDistTh", "f32", M4_RANGE(0,100), "10", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                       LumaDistTh;//uint: % | 
|   | 
|     // M4_NUMBER_DESC("LvLowTh", "f32", M4_RANGE(0,100), "7.5", M4_DIGIT(4),M4_HIDE(0)) | 
|     float                       LvLowTh; | 
|   | 
|     // M4_NUMBER_DESC("LvHighTh", "f32", M4_RANGE(0,100), "0.3125", M4_DIGIT(4),M4_HIDE(0)) | 
|     float                       LvHighTh; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("BacklitSetPoint", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_BacklitSetPointV2_t BacklitSetPoint; | 
| } CalibDb_AecBacklightV2_t; | 
|   | 
| typedef struct CalibDb_OverExpSetPointV2_s { | 
|     // M4_ARRAY_DESC("OEpdf", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      OEpdf; | 
|     int                         OEpdf_len; | 
|     // M4_ARRAY_DESC("LowLightWeight", "f32", M4_SIZE(1,6), M4_RANGE(0,20), "1", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      LowLightWeight; | 
|     int                         LowLightWeight_len; | 
|     // M4_ARRAY_DESC("HighLightWeight", "f32", M4_SIZE(1,6), M4_RANGE(0,20), "2", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      HighLightWeight; | 
|     int                         HighLightWeight_len; | 
| } CalibDb_OverExpSetPointV2_t; | 
|   | 
| typedef struct CalibDb_AecOverExpCtrlV2_s { | 
|     // M4_BOOL_DESC("Enable", "0") | 
|     bool                       Enable; | 
|   | 
|     // M4_NUMBER_DESC("StrBias", "f32", M4_RANGE(-500,500), "0", M4_DIGIT(2),M4_HIDE(1)) | 
|     float                      StrBias; //uint: % | 
|   | 
|     // M4_NUMBER_DESC("MaxWeight", "f32", M4_RANGE(0,20), "8", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                      MaxWeight; | 
|   | 
|     // M4_NUMBER_DESC("HighLightTh", "f32", M4_RANGE(0,255), "150", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                      HighLightTh; | 
|   | 
|     // M4_NUMBER_DESC("LowLightTh", "f32", M4_RANGE(0,255), "30", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                      LowLightTh; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("OverExpSetPoint", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_OverExpSetPointV2_t  OverExpSetPoint; | 
| } CalibDb_AecOverExpCtrlV2_t; | 
|   | 
| typedef struct CalibDb_LinearAE_AttrV2_s { | 
|     // M4_BOOL_DESC("RawStatsEn", "1") | 
|     bool                            RawStatsEn; | 
|   | 
|     // M4_NUMBER_DESC("ToleranceIn", "f32", M4_RANGE(0,100), "10", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                           ToleranceIn;//uint: % | 
|   | 
|     // M4_NUMBER_DESC("ToleranceOut", "f32", M4_RANGE(0,100), "15", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                           ToleranceOut;//uint: % | 
|   | 
|     // M4_NUMBER_DESC("Evbias", "f32", M4_RANGE(-500,500), "0", M4_DIGIT(2),M4_HIDE(1)) | 
|     float                           Evbias; //uint: % | 
|   | 
|     // M4_ENUM_DESC("StrategyMode", "CalibDb_AeStrategyModeV2_t","AECV2_STRATEGY_MODE_LOWLIGHT_PRIOR") | 
|     CalibDb_AeStrategyModeV2_t      StrategyMode; | 
|   | 
|     // M4_STRUCT_DESC("InitExp", "normal_ui_style") | 
|     CalibDb_LinExpInitExpV2_t       InitExp; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("Route", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_LinAeRoute_AttrV2_t     Route; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("DySetpoint", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_AecDynamicSetpointV2_t  DySetpoint; | 
|   | 
|     // M4_STRUCT_DESC("BackLightCtrl", "normal_ui_style") | 
|     CalibDb_AecBacklightV2_t        BackLightCtrl; | 
|   | 
|     // M4_STRUCT_DESC("OverExpCtrl", "normal_ui_style") | 
|     CalibDb_AecOverExpCtrlV2_t      OverExpCtrl; | 
| } CalibDb_LinearAE_AttrV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC algo HdrAE Config Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_HdrExpInitExpV2_s { | 
|     // M4_ARRAY_DESC("InitTimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.01", M4_DIGIT(6), M4_DYNAMIC(0)) | 
|     float                   InitTimeValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("InitGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                   InitGainValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("InitIspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                   InitIspDGainValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_NUMBER_DESC("InitPIrisGainValue", "s32", M4_RANGE(1,4096), "1024", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                     InitPIrisGainValue; | 
|   | 
|     // M4_NUMBER_DESC("InitDCIrisDutyValue", "s32", M4_RANGE(0,100), "100", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                     InitDCIrisDutyValue; | 
| } CalibDb_HdrExpInitExpV2_t; | 
|   | 
| typedef struct CalibDb_ExpRatioV2_s { | 
|     // M4_ARRAY_DESC("RatioExpDot", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(4), M4_DYNAMIC(1)) | 
|     float*            RatioExpDot; | 
|     int               RatioExpDot_len; | 
|     // M4_ARRAY_DESC("M2SRatioFix", "f32", M4_SIZE(1,6), M4_RANGE(1,256), "8", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*            M2SRatioFix; | 
|     int               M2SRatioFix_len; | 
|     // M4_ARRAY_DESC("L2MRatioFix", "f32", M4_SIZE(1,6), M4_RANGE(1,256), "8", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*            L2MRatioFix; | 
|     int               L2MRatioFix_len; | 
|     // M4_ARRAY_DESC("M2SRatioMax", "f32", M4_SIZE(1,6), M4_RANGE(1,256), "64", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*            M2SRatioMax; | 
|     int               M2SRatioMax_len; | 
|     // M4_ARRAY_DESC("L2MRatioMax", "f32", M4_SIZE(1,6), M4_RANGE(1,256), "64", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*            L2MRatioMax; | 
|     int               L2MRatioMax_len; | 
| } CalibDb_ExpRatioV2_t; | 
|   | 
| typedef struct CalibDb_ExpRatioCtrlV2_s { | 
|     // M4_ENUM_DESC("ExpRatioType", "CalibDb_HdrAeRatioTypeV2_t","AECV2_HDR_RATIOTYPE_MODE_AUTO") | 
|     CalibDb_HdrAeRatioTypeV2_t     ExpRatioType; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("ExpRatio", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_ExpRatioV2_t           ExpRatio; | 
| } CalibDb_ExpRatioCtrlV2_t; | 
|   | 
| typedef struct CalibDb_HdrAeRoute_AttrV2_s { | 
|     // M4_ARRAY_DESC("Frm0TimeDot", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(6), M4_DYNAMIC(1)) | 
|     float*                    Frm0TimeDot; | 
|     int                       Frm0TimeDot_len; | 
|     // M4_ARRAY_DESC("Frm0GainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm0GainDot; | 
|     int                       Frm0GainDot_len; | 
|     // M4_ARRAY_DESC("Frm0IspDGainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm0IspDGainDot; | 
|     int                       Frm0IspDGainDot_len; | 
|     // M4_ARRAY_DESC("Frm1TimeDot", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(6), M4_DYNAMIC(1)) | 
|     float*                    Frm1TimeDot; | 
|     int                       Frm1TimeDot_len; | 
|     // M4_ARRAY_DESC("Frm1GainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm1GainDot; | 
|     int                       Frm1GainDot_len; | 
|     // M4_ARRAY_DESC("Frm1IspDGainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm1IspDGainDot; | 
|     int                       Frm1IspDGainDot_len; | 
|     // M4_ARRAY_DESC("Frm2TimeDot", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0", M4_DIGIT(6), M4_DYNAMIC(1)) | 
|     float*                    Frm2TimeDot; | 
|     int                       Frm2TimeDot_len; | 
|     // M4_ARRAY_DESC("Frm2GainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm2GainDot; | 
|     int                       Frm2GainDot_len; | 
|     // M4_ARRAY_DESC("Frm2IspDGainDot", "f32", M4_SIZE(1,6), M4_RANGE(1,4096), "1", M4_DIGIT(3), M4_DYNAMIC(1)) | 
|     float*                    Frm2IspDGainDot; | 
|     int                       Frm2IspDGainDot_len; | 
|     // M4_ARRAY_DESC("PIrisDot", "s32", M4_SIZE(1,6), M4_RANGE(1,4096), "1024", M4_DIGIT(0), M4_DYNAMIC(1)) | 
|     int*                      PIrisDot; | 
|     int                       PIrisDot_len; | 
| } CalibDb_HdrAeRoute_AttrV2_t; | 
|   | 
| typedef struct CalibDb_LfrmSetPointV2_s | 
| { | 
|     // M4_ARRAY_DESC("LExpLevel", "f32", M4_SIZE(1,6), M4_RANGE(0,4096), "0", M4_DIGIT(5), M4_DYNAMIC(1)) | 
|     float*                      LExpLevel; | 
|     int                         LExpLevel_len; | 
|     // M4_ARRAY_DESC("NonOEPdfTh", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0.4", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      NonOEPdfTh; | 
|     int                         NonOEPdfTh_len; | 
|     // M4_ARRAY_DESC("LowLightPdfTh", "f32", M4_SIZE(1,6), M4_RANGE(0,1), "0.2", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      LowLightPdfTh; | 
|     int                         LowLightPdfTh_len; | 
|     // M4_ARRAY_DESC("LSetPoint", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "40", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      LSetPoint; | 
|     int                         LSetPoint_len; | 
|     // M4_ARRAY_DESC("TargetLLLuma", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "20", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                      TargetLLLuma; | 
|     int                         TargetLLLuma_len; | 
| } CalibDb_LfrmSetPointV2_t; | 
|   | 
| typedef struct CalibDb_LfrmCtrlV2_s | 
| { | 
|     // M4_NUMBER_DESC("OEROILowTh", "f32", M4_RANGE(0,255), "150", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                       OEROILowTh; | 
|   | 
|     // M4_NUMBER_DESC("LvLowTh", "f32", M4_RANGE(0,100), "7.5", M4_DIGIT(4),M4_HIDE(0)) | 
|     float                       LvLowTh; | 
|   | 
|     // M4_NUMBER_DESC("LvHighTh", "f32", M4_RANGE(0,100), "0.3125", M4_DIGIT(4),M4_HIDE(0)) | 
|     float                       LvHighTh; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("LfrmSetPoint", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_LfrmSetPointV2_t    LfrmSetPoint; | 
| } CalibDb_LfrmCtrlV2_t; | 
|   | 
| typedef struct CalibDb_MfrmCtrlV2_s | 
| { | 
|     // M4_ARRAY_DESC("MExpLevel", "f32", M4_SIZE(1,6), M4_RANGE(0,4096), "0", M4_DIGIT(5), M4_DYNAMIC(1)) | 
|     float*                  MExpLevel; | 
|     int                     MExpLevel_len; | 
|     // M4_ARRAY_DESC("MSetPoint", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "40", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                  MSetPoint; | 
|     int                     MSetPoint_len; | 
| } CalibDb_MfrmCtrlV2_t; | 
|   | 
| typedef struct CalibDb_SfrmSetPointV2_s | 
| { | 
|     // M4_ARRAY_DESC("SExpLevel", "f32", M4_SIZE(1,6), M4_RANGE(0,4096), "0", M4_DIGIT(6), M4_DYNAMIC(1)) | 
|     float*                 SExpLevel; | 
|     int                    SExpLevel_len; | 
|     // M4_ARRAY_DESC("SSetPoint", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "20", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                 SSetPoint; | 
|     int                    SSetPoint_len; | 
|     // M4_ARRAY_DESC("TargetHLLuma", "f32", M4_SIZE(1,6), M4_RANGE(0,255), "150", M4_DIGIT(2), M4_DYNAMIC(1)) | 
|     float*                 TargetHLLuma; | 
|     int                    TargetHLLuma_len; | 
| } CalibDb_SfrmSetPointV2_t; | 
|   | 
| typedef struct CalibDb_SfrmCtrlV2_s | 
| { | 
|     // M4_BOOL_DESC("HLROIExpandEn", "0") | 
|     bool                        HLROIExpandEn; | 
|   | 
|     // M4_NUMBER_DESC("HLLumaTolerance", "f32", M4_RANGE(0,100), "12", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                       HLLumaTolerance;//unit:% | 
|   | 
|     // M4_ARRAY_TABLE_DESC("SfrmSetPoint", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_SfrmSetPointV2_t    SfrmSetPoint; | 
| } CalibDb_SfrmCtrlV2_t; | 
|   | 
| typedef struct CalibDb_LongFrmCtrlV2_s { | 
|     // M4_ENUM_DESC("mode", "CalibDb_AeHdrLongFrmModeV2_t","AECV2_HDR_LONGFRMMODE_NORMAL") | 
|     CalibDb_AeHdrLongFrmModeV2_t    mode; | 
|   | 
|     // M4_NUMBER_DESC("SfrmMinLine", "u16", M4_RANGE(0,1024), "2", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint16_t                        SfrmMinLine;//uint:line | 
|   | 
|     // M4_NUMBER_DESC("LfrmModeExpTh", "f32", M4_RANGE(0,100), "0.62", M4_DIGIT(4),M4_HIDE(0)) | 
|     float                           LfrmModeExpTh; | 
| } CalibDb_LongFrmCtrlV2_t; | 
|   | 
| typedef struct CalibDb_HdrAE_AttrV2_s { | 
|     // M4_NUMBER_DESC("ToleranceIn", "f32", M4_RANGE(0,100), "10", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                           ToleranceIn;//unit:% | 
|   | 
|     // M4_NUMBER_DESC("ToleranceOut", "f32", M4_RANGE(0,100), "15", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                           ToleranceOut;//unit:% | 
|   | 
|     // M4_NUMBER_DESC("Evbias", "f32", M4_RANGE(-500,500), "0", M4_DIGIT(0),M4_HIDE(1)) | 
|     float                           Evbias; | 
|   | 
|     // M4_ENUM_DESC("StrategyMode", "CalibDb_AeStrategyModeV2_t","AECV2_STRATEGY_MODE_LOWLIGHT_PRIOR") | 
|     CalibDb_AeStrategyModeV2_t      StrategyMode; | 
|   | 
|     // M4_NUMBER_DESC("LumaDistTh", "f32", M4_RANGE(0,100), "10", M4_DIGIT(2),M4_HIDE(0)) | 
|     float                           LumaDistTh; //used for area-growing,unit:% | 
|   | 
|     // M4_STRUCT_DESC("InitExp", "normal_ui_style") | 
|     CalibDb_HdrExpInitExpV2_t       InitExp; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("Route", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_HdrAeRoute_AttrV2_t     Route; | 
|   | 
|     // M4_STRUCT_DESC("ExpRatioCtrl", "normal_ui_style") | 
|     CalibDb_ExpRatioCtrlV2_t        ExpRatioCtrl; | 
|   | 
|     // M4_STRUCT_DESC("LongFrmMode", "normal_ui_style") | 
|     CalibDb_LongFrmCtrlV2_t         LongFrmMode; | 
|   | 
|     // M4_STRUCT_DESC("LframeCtrl", "normal_ui_style") | 
|     CalibDb_LfrmCtrlV2_t            LframeCtrl; | 
|   | 
|     // M4_ARRAY_TABLE_DESC("MframeCtrl", "array_table_ui", M4_INDEX_DEFAULT) | 
|     CalibDb_MfrmCtrlV2_t            MframeCtrl; | 
|   | 
|     // M4_STRUCT_DESC("SframeCtrl", "normal_ui_style") | 
|     CalibDb_SfrmCtrlV2_t            SframeCtrl; | 
| } CalibDb_HdrAE_AttrV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC algo SyncTest Config Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_LinAlterExpV2_s { | 
|     // M4_NUMBER_DESC("TimeValue", "f32", M4_RANGE(0,1), "0.01", M4_DIGIT(6),M4_HIDE(0)) | 
|     float                    TimeValue; | 
|   | 
|     // M4_NUMBER_DESC("GainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                    GainValue; | 
|   | 
|     // M4_NUMBER_DESC("IspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) | 
|     float                    IspDGainValue; | 
|   | 
|     // M4_NUMBER_DESC("PIrisGainValue", "s32", M4_RANGE(1,4096), "1024", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                      PIrisGainValue; | 
|   | 
|     // M4_NUMBER_DESC("DcgMode", "s32", M4_RANGE(-1,1), "0", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                      DcgMode; | 
| } CalibDb_LinAlterExpV2_t; | 
|   | 
| typedef struct CalibDb_HdrAlterExpV2_s { | 
|     // M4_ARRAY_DESC("TimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.01", M4_DIGIT(6), M4_DYNAMIC(0)) | 
|     float                    TimeValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("GainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                    GainValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_ARRAY_DESC("IspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) | 
|     float                    IspDGainValue[AECV2_MAX_HDRFRAME_NUM]; | 
|   | 
|     // M4_NUMBER_DESC("PIrisGainValues", "s32", M4_RANGE(1,4096), "1024", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                      PIrisGainValue; | 
|   | 
|     // M4_ARRAY_DESC("DcgMode", "s32", M4_SIZE(1,3), M4_RANGE(-1,1), "0", M4_DIGIT(0), M4_DYNAMIC(0)) | 
|     int                      DcgMode[AECV2_MAX_HDRFRAME_NUM]; | 
| } CalibDb_HdrAlterExpV2_t; | 
|   | 
| typedef struct CalibDb_AlterExpV2_s { | 
|     // M4_STRUCT_LIST_DESC("LinearAE", M4_SIZE_DYNAMIC,"normal_ui_style") | 
|     CalibDb_LinAlterExpV2_t*       LinearAE; | 
|     int                            LinearAE_len; | 
|   | 
|     // M4_STRUCT_LIST_DESC("HdrAE", M4_SIZE_DYNAMIC,"normal_ui_style") | 
|     CalibDb_HdrAlterExpV2_t*       HdrAE; | 
|     int                            HdrAE_len; | 
| } CalibDb_AlterExpV2_t; | 
|   | 
| typedef struct CalibDb_AeSyncTestV2_s { | 
|     // M4_BOOL_DESC("Enable", "0") | 
|     bool                        Enable; | 
|   | 
|     // M4_NUMBER_DESC("IntervalFrm", "s32", M4_RANGE(0,1024), "5", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                         IntervalFrm; | 
|   | 
|     // M4_STRUCT_DESC("AlterExp", "normal_ui_style") | 
|     CalibDb_AlterExpV2_t        AlterExp; | 
| } CalibDb_AeSyncTestV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   ISP2.0 AEC algo IrisCtrl Config Params | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_MIris_AttrV2_s { | 
|     // M4_NUMBER_DESC("PIrisGainValue", "s32", M4_RANGE(1,4096), "1024", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                  PIrisGainValue; | 
|   | 
|     // M4_NUMBER_DESC("DCIrisHoldValue", "s32", M4_RANGE(0,100), "50", M4_DIGIT(0),M4_HIDE(0)) | 
|     int                  DCIrisHoldValue; | 
| } CalibDb_MIris_AttrV2_t; | 
|   | 
| typedef struct CalibDb_PIris_AttrV2_s { | 
|     // M4_NUMBER_DESC("TotalStep", "u16", M4_RANGE(0,1024), "81", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint16_t             TotalStep; | 
|   | 
|     // M4_NUMBER_DESC("EffcStep", "u16", M4_RANGE(0,1024), "64", M4_DIGIT(0),M4_HIDE(0)) | 
|     uint16_t             EffcStep; | 
|   | 
|     // M4_BOOL_DESC("ZeroIsMax", "1") | 
|     bool                 ZeroIsMax; | 
|   | 
|     // M4_ARRAY_DESC("StepTable", "u16", M4_SIZE(1,1024), M4_RANGE(1,4096), "1024", M4_DIGIT(0), M4_DYNAMIC(0)) | 
|     uint16_t             StepTable[AECV2_PIRIS_STEP_TABLE_MAX]; | 
| } CalibDb_PIris_AttrV2_t; | 
|   | 
| typedef struct CalibDb_DCIris_AttrV2_s { | 
|     // M4_NUMBER_DESC("Kp", "f32", M4_RANGE(0,10), "1", M4_DIGIT(2),M4_HIDE(0)) | 
|     float       Kp; | 
|     // M4_NUMBER_DESC("Ki", "f32", M4_RANGE(0,10), "0.2", M4_DIGIT(2),M4_HIDE(0)) | 
|     float       Ki; | 
|     // M4_NUMBER_DESC("Kd", "f32", M4_RANGE(0,10), "0.5", M4_DIGIT(2),M4_HIDE(0)) | 
|     float       Kd; | 
|     // M4_NUMBER_DESC("MinPwmDuty", "s32", M4_RANGE(0,100), "0", M4_DIGIT(0),M4_HIDE(0)) | 
|     int         MinPwmDuty; | 
|     // M4_NUMBER_DESC("MaxPwmDuty", "s32", M4_RANGE(0,100), "100", M4_DIGIT(0),M4_HIDE(0)) | 
|     int         MaxPwmDuty; | 
|     // M4_NUMBER_DESC("OpenPwmDuty", "s32", M4_RANGE(0,100), "50", M4_DIGIT(0),M4_HIDE(0)) | 
|     int         OpenPwmDuty; | 
|     // M4_NUMBER_DESC("ClosePwmDuty", "s32", M4_RANGE(0,100), "60", M4_DIGIT(0),M4_HIDE(0)) | 
|     int         ClosePwmDuty; | 
| } CalibDb_DCIris_AttrV2_t; | 
|   | 
| typedef struct CalibDb_AecIrisCtrlV2_s { | 
|     // M4_BOOL_DESC("Enable", "0") | 
|     bool                         Enable; | 
|   | 
|     // M4_ENUM_DESC("IrisType", "CalibDb_IrisTypeV2_t","IRISV2_DC_TYPE") | 
|     CalibDb_IrisTypeV2_t         IrisType; | 
|   | 
|     // M4_BOOL_DESC("ManualEn", "0") | 
|     bool                         ManualEn; | 
|   | 
|     // M4_STRUCT_DESC("ManualAttr", "normal_ui_style") | 
|     CalibDb_MIris_AttrV2_t       ManualAttr; | 
|   | 
|     // M4_STRUCT_DESC("InitAttr", "normal_ui_style") | 
|     CalibDb_MIris_AttrV2_t       InitAttr; | 
|   | 
|     // M4_STRUCT_DESC("PIrisAttr", "normal_ui_style") | 
|     CalibDb_PIris_AttrV2_t       PIrisAttr; | 
|   | 
|     // M4_STRUCT_DESC("DCIrisAttr", "normal_ui_style") | 
|     CalibDb_DCIris_AttrV2_t      DCIrisAttr; | 
| } CalibDb_AecIrisCtrlV2_t; | 
|   | 
| /*****************************************************************************/ | 
| /** | 
|  * @brief   Global AEC tuning structure of isp2.0 | 
|  */ | 
| /*****************************************************************************/ | 
| typedef struct CalibDb_Aec_ParaV2_s { | 
|     // M4_STRUCT_DESC("CommCtrl", "normal_ui_style") | 
|     CalibDb_AecCommon_AttrV2_t          CommCtrl; | 
|   | 
|     // M4_STRUCT_DESC("LinearAeCtrl", "normal_ui_style") | 
|     CalibDb_LinearAE_AttrV2_t           LinearAeCtrl; | 
|   | 
|     // M4_STRUCT_DESC("HdrAeCtrl", "normal_ui_style") | 
|     CalibDb_HdrAE_AttrV2_t              HdrAeCtrl; | 
|   | 
|     // M4_STRUCT_DESC("IrisCtrl", "normal_ui_style") | 
|     CalibDb_AecIrisCtrlV2_t             IrisCtrl; | 
|   | 
|     // M4_STRUCT_DESC("SyncTest", "normal_ui_style") | 
|     CalibDb_AeSyncTestV2_t              SyncTest; //special module for debug | 
| } CalibDb_Aec_ParaV2_t; | 
|   | 
| RKAIQ_END_DECLARE | 
|   | 
| #endif |