1 /* 2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef __HI_AE_COMM_H__ 17 #define __HI_AE_COMM_H__ 18 19 #include "hi_type.h" 20 #include "hi_comm_isp.h" 21 22 #ifdef __cplusplus 23 #if __cplusplus 24 extern "C" { 25 #endif 26 #endif /* End of #ifdef __cplusplus */ 27 28 #define HI_AE_LIB_NAME "hisi_ae_lib" 29 30 /* ae ctrl cmd */ 31 typedef enum hiAE_CTRL_CMD_E { 32 AE_DEBUG_ATTR_SET, 33 AE_DEBUG_ATTR_GET, 34 35 AE_CTRL_BUTT, 36 } AE_CTRL_CMD_E; 37 38 typedef struct hiAE_DBG_ATTR_S { 39 HI_U32 u32MaxIntTime; 40 HI_U32 u32MinIntTime; 41 HI_U32 u32MaxAgain; 42 HI_U32 u32MinAgain; 43 HI_U32 u32MaxDgain; 44 HI_U32 u32MinDgain; 45 HI_U32 u32MaxIspDgain; 46 HI_U32 u32MinIspDgain; 47 HI_U32 u32MaxSysGain; 48 HI_U32 u32MinSysGain; 49 HI_U32 u32Compensation; 50 HI_U32 u32EVBias; 51 HI_BOOL bManualExposureEn; 52 HI_BOOL bManualTimeEn; 53 HI_BOOL bManualAgainEn; 54 HI_BOOL bManualDgainEn; 55 HI_BOOL bManualIspDgainEn; 56 HI_U32 u32ManualExposureLines; 57 HI_U32 u32ManualAgain; 58 HI_U32 u32ManualDgain; 59 HI_U32 u32ManualIspDgain; 60 HI_U32 au32AeWeights[(AE_ZONE_ROW) * (AE_ZONE_COLUMN)]; 61 } AE_DBG_ATTR_S; 62 63 typedef struct hiAE_DBG_STATUS_S { 64 HI_U32 u32FrmNumBgn; 65 HI_U32 u32FullLines; 66 HI_U32 u32IntTime; 67 HI_U32 u32ShortIntTime; 68 HI_U32 u32MedIntTime; 69 HI_U32 u32LongIntTime; 70 HI_U32 u32Again; 71 HI_U32 u32Dgain; 72 HI_U32 u32IspDgain; 73 HI_U32 u32IrisFNOLin; 74 HI_U64 u64Exposure; 75 HI_U32 u32Increment; 76 HI_S32 s32HistError; 77 HI_S32 s32HistOriAverage; 78 HI_S32 s32LumaOffset; 79 HI_U32 u32Iso; 80 HI_U32 u32ExpRatio; 81 HI_U32 u32OverExpRatio; 82 HI_U32 u32OverExpRatioFilter; 83 } AE_DBG_STATUS_S; 84 85 /* sensor's interface to ae 86 * eg: 0.35db, enAccuType=AE_ACCURACY_DB, f32Accuracy=0.35 87 * and the multiply of 0.35db is power(10, (0.35/20)) 88 * eg: 1/16, 2/16, 3/16 multiplies, enAccuType=AE_ACCURACY_LINEAR, f32Accuracy=0.0625 89 * eg: 1,2,4,8,16 multiplies, enAccuType=AE_ACCURACY_DB, f32Accuracy=6 90 */ 91 typedef enum hiAE_ACCURACY_E { 92 AE_ACCURACY_DB = 0, 93 AE_ACCURACY_LINEAR, 94 AE_ACCURACY_TABLE, 95 96 AE_ACCURACY_BUTT, 97 } AE_ACCURACY_E; 98 99 typedef struct hiAE_ACCURACY_S { 100 AE_ACCURACY_E enAccuType; 101 float f32Accuracy; 102 float f32Offset; 103 } AE_ACCURACY_S; 104 105 typedef struct hiAE_SENSOR_DEFAULT_S { 106 HI_U8 au8HistThresh[HIST_THRESH_NUM]; 107 HI_U8 u8AeCompensation; 108 109 HI_U32 u32LinesPer500ms; 110 HI_U32 u32FlickerFreq; 111 HI_FLOAT f32Fps; 112 HI_U32 u32HmaxTimes; /* unit is ns */ 113 HI_U32 u32InitExposure; 114 HI_U32 u32InitAESpeed; 115 HI_U32 u32InitAETolerance; 116 117 HI_U32 u32FullLinesStd; 118 HI_U32 u32FullLinesMax; 119 HI_U32 u32FullLines; 120 HI_U32 u32BinningFullLines; 121 HI_U32 u32MaxIntTime; /* RW;unit is line */ 122 HI_U32 u32MinIntTime; 123 HI_U32 u32MaxIntTimeTarget; 124 HI_U32 u32MinIntTimeTarget; 125 AE_ACCURACY_S stIntTimeAccu; 126 127 HI_U32 u32MaxAgain; 128 HI_U32 u32MinAgain; 129 HI_U32 u32MaxAgainTarget; 130 HI_U32 u32MinAgainTarget; 131 AE_ACCURACY_S stAgainAccu; 132 133 HI_U32 u32MaxDgain; 134 HI_U32 u32MinDgain; 135 HI_U32 u32MaxDgainTarget; 136 HI_U32 u32MinDgainTarget; 137 AE_ACCURACY_S stDgainAccu; 138 139 HI_U32 u32MaxISPDgainTarget; 140 HI_U32 u32MinISPDgainTarget; 141 HI_U32 u32ISPDgainShift; 142 143 HI_U32 u32MaxIntTimeStep; 144 HI_BOOL bMaxTimeStepEnable; 145 HI_U32 u32MaxIncTimeStep[WDR_MAX_FRAME_NUM]; 146 HI_U32 u32MaxDecTimeStep[WDR_MAX_FRAME_NUM]; 147 HI_U32 u32LFMaxShortTime; 148 HI_U32 u32LFMinExposure; 149 150 ISP_AE_ROUTE_S stAERouteAttr; 151 HI_BOOL bAERouteExValid; 152 ISP_AE_ROUTE_EX_S stAERouteAttrEx; 153 154 ISP_AE_ROUTE_S stAERouteSFAttr; 155 ISP_AE_ROUTE_EX_S stAERouteSFAttrEx; 156 157 HI_U16 u16ManRatioEnable; 158 HI_U32 au32Ratio[EXP_RATIO_NUM]; 159 160 ISP_IRIS_TYPE_E enIrisType; 161 ISP_PIRIS_ATTR_S stPirisAttr; 162 ISP_IRIS_F_NO_E enMaxIrisFNO; /* RW; Range:[0, 10]; Format:4.0; 163 Max F number of Piris's aperture, it's related to the specific iris */ 164 ISP_IRIS_F_NO_E enMinIrisFNO; /* RW; Range:[0, 10]; Format:4.0; 165 Min F number of Piris's aperture, it's related to the specific iris */ 166 ISP_AE_STRATEGY_E enAeExpMode; 167 168 HI_U16 u16ISOCalCoef; 169 HI_U8 u8AERunInterval; 170 HI_U32 u32ExpRatioMax; 171 HI_U32 u32ExpRatioMin; 172 HI_BOOL bDiffGainSupport; 173 ISP_QUICK_START_PARAM_S stQuickStart; 174 ISP_PRIOR_FRAME_E enPriorFrame; 175 HI_BOOL bAEGainSepCfg; 176 HI_BOOL bLhcgSupport; 177 HI_U32 u32SnsLhcgExpRatio; 178 } AE_SENSOR_DEFAULT_S; 179 180 typedef struct hiAE_FSWDR_ATTR_S { 181 ISP_FSWDR_MODE_E enFSWDRMode; 182 } AE_FSWDR_ATTR_S; 183 184 typedef struct hiAE_EXP_PARAM_REG_S { 185 HI_U32 u32RegAddr; 186 HI_U32 u32RegValue; 187 } AE_EXP_PARAM_REG_S; 188 189 typedef struct hiAE_EXP_PARAM_S { 190 HI_U32 u32TarFps; 191 HI_U32 u32ExpTime; 192 HI_U32 u32ExpAgain; 193 HI_U32 u32ExpDgain; 194 HI_U32 u32ExpIspDgain; 195 AE_EXP_PARAM_REG_S stTimeReg[10]; /* 10 */ 196 AE_EXP_PARAM_REG_S stAgainReg[10]; /* 10 */ 197 AE_EXP_PARAM_REG_S stDgainReg[10]; /* 10 */ 198 } AE_EXP_PARAM_S; 199 200 typedef struct hiAE_SENSOR_EXP_FUNC_S { 201 HI_S32 (*pfn_cmos_get_ae_default)(VI_PIPE ViPipe, AE_SENSOR_DEFAULT_S *pstAeSnsDft); 202 203 /* the function of sensor set fps */ 204 HI_VOID (*pfn_cmos_fps_set)(VI_PIPE ViPipe, HI_FLOAT f32Fps, AE_SENSOR_DEFAULT_S *pstAeSnsDft); 205 HI_VOID (*pfn_cmos_slow_framerate_set)(VI_PIPE ViPipe, HI_U32 u32FullLines, AE_SENSOR_DEFAULT_S *pstAeSnsDft); 206 207 /* while isp notify ae to update sensor regs, ae call these funcs. */ 208 HI_VOID (*pfn_cmos_inttime_update)(VI_PIPE ViPipe, HI_U32 u32IntTime); 209 HI_VOID (*pfn_cmos_gains_update)(VI_PIPE ViPipe, HI_U32 u32Again, HI_U32 u32Dgain); 210 211 HI_VOID (*pfn_cmos_again_calc_table)(VI_PIPE ViPipe, HI_U32 *pu32AgainLin, HI_U32 *pu32AgainDb); 212 HI_VOID (*pfn_cmos_dgain_calc_table)(VI_PIPE ViPipe, HI_U32 *pu32DgainLin, HI_U32 *pu32DgainDb); 213 214 HI_VOID (*pfn_cmos_get_inttime_max)(VI_PIPE ViPipe, HI_U16 u16ManRatioEnable, 215 HI_U32 *au32Ratio, HI_U32 *au32IntTimeMax, HI_U32 *au32IntTimeMin, HI_U32 *pu32LFMaxIntTime); 216 217 /* long frame mode set */ 218 HI_VOID (*pfn_cmos_ae_fswdr_attr_set)(VI_PIPE ViPipe, AE_FSWDR_ATTR_S *pstAeFSWDRAttr); 219 HI_VOID (*pfn_cmos_ae_quick_start_status_set)(VI_PIPE ViPipe, HI_BOOL bQuickStartStatus); 220 HI_VOID (*pfn_cmos_exp_param_convert)(VI_PIPE ViPipe, AE_EXP_PARAM_S *pstExpFuncs); 221 } AE_SENSOR_EXP_FUNC_S; 222 223 typedef struct hiAE_SENSOR_REGISTER_S { 224 AE_SENSOR_EXP_FUNC_S stSnsExp; 225 } AE_SENSOR_REGISTER_S; 226 227 #ifdef __cplusplus 228 #if __cplusplus 229 } 230 #endif 231 #endif /* End of #ifdef __cplusplus */ 232 233 #endif 234