1 /* 2 * Copyright (c) 2021 Rockchip Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 18 #ifndef __AEC_UAPI_HEAD_H__ 19 #define __AEC_UAPI_HEAD_H__ 20 21 #include "aec_head.h" 22 #include "ae/rk_aiq_types_ae_hw.h" 23 #include "rk_aiq_comm.h" 24 25 #define MAX_HDR_FRAMENUM (3) 26 #define RAWAEBIG_SUBWIN_NUM 4 27 #define RAWAEBIG_WIN_NUM 225 28 29 #define ISP2_RAWAE_WINNUM_MAX ((RAWAELITE_WIN_NUM > RAWAEBIG_WIN_NUM) ? RAWAELITE_WIN_NUM : RAWAEBIG_WIN_NUM) 30 #define ISP2_HIST_BINNUM_MAX ((RAWHIST_BIN_N_MAX > SIHIST_BIN_N_MAX) ? RAWHIST_BIN_N_MAX : SIHIST_BIN_N_MAX) 31 32 typedef struct Aec_AeRange_uapi_s { 33 // M4_NUMBER_DESC("Min", "f32", M4_RANGE(0,65535), "0.003", M4_DIGIT(6),M4_HIDE(0)) 34 float Min; 35 // M4_NUMBER_DESC("Max", "f32", M4_RANGE(0,65535), "0.003", M4_DIGIT(6),M4_HIDE(0)) 36 float Max; 37 } Aec_AeRange_uapi_t; 38 39 typedef struct Aec_LinAeRange_uapi_s { 40 // M4_STRUCT_DESC("Time", "normal_ui_style") 41 Aec_AeRange_uapi_t stExpTimeRange; 42 43 // M4_STRUCT_DESC("Gain", "normal_ui_style") 44 Aec_AeRange_uapi_t stGainRange; 45 46 // M4_STRUCT_DESC("IspDGain", "normal_ui_style") 47 Aec_AeRange_uapi_t stIspDGainRange; 48 49 // M4_STRUCT_DESC("PIris", "normal_ui_style",M4_HIDE(1)) 50 Aec_AeRange_uapi_t stPIrisRange; 51 } Aec_LinAeRange_uapi_t; 52 53 typedef struct Aec_HdrAeRange_uapi_s { 54 // M4_STRUCT_LIST_DESC("Time", M4_SIZE(1,3), "normal_ui_style") 55 Aec_AeRange_uapi_t stExpTimeRange[3]; 56 57 // M4_STRUCT_LIST_DESC("Gain", M4_SIZE(1,3), "normal_ui_style") 58 Aec_AeRange_uapi_t stGainRange[3]; 59 60 // M4_STRUCT_LIST_DESC("IspDGain", M4_SIZE(1,3), "normal_ui_style") 61 Aec_AeRange_uapi_t stIspDGainRange[3]; 62 63 // M4_STRUCT_DESC("PIris", "normal_ui_style",M4_HIDE(1)) 64 Aec_AeRange_uapi_t stPIrisRange; 65 } Aec_HdrAeRange_uapi_t; 66 67 typedef struct Uapi_AeAttrV2_uapi_s { 68 CalibDb_AeSpeedV2_t stAeSpeed; 69 // DelayFrmNum 70 CalibDb_DelayTypeV2_t DelayType; 71 uint8_t BlackDelay; 72 uint8_t WhiteDelay; 73 // Auto/Fixed fps 74 CalibDb_AeFrmRateAttrV2_t stFrmRate; 75 CalibDb_AntiFlickerAttrV2_t stAntiFlicker; 76 // auto range 77 Aec_LinAeRange_uapi_t LinAeRange; // result LinAerange 78 Aec_HdrAeRange_uapi_t HdrAeRange; // result HdrAerange 79 } Uapi_AeAttrV2_uapi_t; 80 81 // manual exposure 82 typedef struct Uapi_LinMeAttrV2_uapi_s { 83 // M4_BOOL_DESC("ManualTimeEn", "1") 84 bool ManualTimeEn; 85 // M4_BOOL_DESC("ManualGainEn", "1") 86 bool ManualGainEn; 87 // M4_BOOL_DESC("ManualIspDgainEn", "1") 88 bool ManualIspDgainEn; 89 // M4_NUMBER_DESC("TimeValue", "f32", M4_RANGE(0,1), "0.003", M4_DIGIT(6),M4_HIDE(0)) 90 float TimeValue; // unit: s = 10^6 us 91 // M4_NUMBER_DESC("GainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) 92 float GainValue; 93 // M4_NUMBER_DESC("IspDGainValue", "f32", M4_RANGE(1,4096), "1", M4_DIGIT(3),M4_HIDE(0)) 94 float IspDGainValue; 95 } Uapi_LinMeAttrV2_uapi_t; 96 97 typedef struct Uapi_HdrMeAttrV2_uapi_s { 98 // M4_BOOL_DESC("ManualTimeEn", "1") 99 bool ManualTimeEn; 100 // M4_BOOL_DESC("ManualGainEn", "1") 101 bool ManualGainEn; 102 // M4_BOOL_DESC("ManualIspDgainEn", "1") 103 bool ManualIspDgainEn; 104 // M4_ARRAY_DESC("TimeValue", "f32", M4_SIZE(1,3), M4_RANGE(0,1), "0.003", M4_DIGIT(6), M4_DYNAMIC(0)) 105 float TimeValue[MAX_HDR_FRAMENUM]; 106 // M4_ARRAY_DESC("GainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 107 float GainValue[MAX_HDR_FRAMENUM]; 108 // M4_ARRAY_DESC("IspDGainValue", "f32", M4_SIZE(1,3), M4_RANGE(1,4096), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 109 float IspDGainValue[MAX_HDR_FRAMENUM]; 110 } Uapi_HdrMeAttrV2_uapi_t; 111 112 typedef struct Uapi_MeAttrV2_uapi_s { 113 // M4_STRUCT_DESC("LinearAE", "normal_ui_style") 114 Uapi_LinMeAttrV2_uapi_t LinearAE; 115 116 // M4_STRUCT_DESC("HdrAE", "normal_ui_style") 117 Uapi_HdrMeAttrV2_uapi_t HdrAE; 118 } Uapi_MeAttrV2_uapi_t; 119 120 typedef struct Aec_uapi_advanced_attr_uapi_s { 121 bool enable; 122 uint8_t GridWeights[15 * 15]; 123 uint8_t DayGridWeights[RAWAEBIG_WIN_NUM]; 124 uint8_t NightGridWeights[RAWAEBIG_WIN_NUM]; 125 bool SetAeRangeEn; 126 Aec_LinAeRange_uapi_t SetLinAeRange; 127 Aec_HdrAeRange_uapi_t SetHdrAeRange; 128 } Aec_uapi_advanced_attr_uapi_t; 129 130 typedef struct __uapi_expsw_attr_uapi_s { 131 rk_aiq_uapi_sync_t sync; 132 uint8_t Enable; 133 CalibDb_CamRawStatsModeV2_t RawStatsMode; 134 CalibDb_CamHistStatsModeV2_t HistStatsMode; 135 CalibDb_CamYRangeModeV2_t YRangeMode; 136 uint8_t AecRunInterval; 137 138 // M4_ENUM_DESC("OPMode", "RKAiqOPMode_uapi_t","RK_AIQ_OP_MODE_AUTO") 139 RKAiqOPMode_t AecOpType; 140 Cam15x15UCharMatrix_t GridWeights; 141 Uapi_AeAttrV2_uapi_t stAuto; 142 143 // M4_STRUCT_DESC("ManualCtrl", "normal_ui_style") 144 Uapi_MeAttrV2_uapi_t stManual; 145 146 Aec_uapi_advanced_attr_uapi_t stAdvanced; 147 } uapi_expsw_attr_t; 148 149 typedef struct uapi_linaeinfo_s { 150 // M4_NUMBER_DESC("LumaDeviation", "f32", M4_RANGE(-256,256), "0.0", M4_DIGIT(3),M4_HIDE(1)) 151 float LumaDeviation; 152 153 // M4_NUMBER_DESC("MeanLuma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) 154 float MeanLuma; 155 156 // M4_STRUCT_DESC("LinAeRange", "normal_ui_style") 157 Aec_LinAeRange_uapi_t LinAeRange; // result LinAerange 158 159 // M4_STRUCT_DESC("LinearExp", "normal_ui_style") 160 RkAiqExpRealParam_t LinearExp; 161 } uapi_linaeinfo_t; 162 163 typedef struct uapi_hdraeinfo_s { 164 // M4_ARRAY_DESC("HdrLumaDeviation", "f32", M4_SIZE(1,3), M4_RANGE(-256,256), "0.0", M4_DIGIT(3), M4_DYNAMIC(0), M4_HIDE(1)) 165 float HdrLumaDeviation[3]; 166 167 // M4_NUMBER_DESC("Frm0Luma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) 168 float Frm0Luma; 169 170 // M4_NUMBER_DESC("Frm1Luma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) 171 float Frm1Luma; 172 173 // M4_NUMBER_DESC("Frm2Luma", "f32", M4_RANGE(0,256), "0.0", M4_DIGIT(2)) 174 float Frm2Luma; 175 176 // M4_STRUCT_DESC("HdrAeRange", "normal_ui_style") 177 Aec_HdrAeRange_uapi_t HdrAeRange; // result HdrAerange 178 179 // M4_STRUCT_LIST_DESC("HdrExp", M4_SIZE(1,3), "normal_ui_style") 180 RkAiqExpRealParam_t HdrExp[3]; 181 } uapi_hdraeinfo_t; 182 183 184 typedef struct uapi_expinfo_s { 185 // M4_BOOL_DESC("IsConverged", "0") 186 bool IsConverged; 187 188 // M4_BOOL_DESC("IsExpMax", "0") 189 bool IsExpMax; 190 191 // M4_BOOL_DESC("EnvChange", "0",M4_HIDE(1)) 192 bool EnvChange; 193 194 // M4_STRUCT_DESC("LinAeInfo", "normal_ui_style") 195 uapi_linaeinfo_t LinAeInfo; 196 197 // M4_STRUCT_DESC("HdrAeInfo", "normal_ui_style") 198 uapi_hdraeinfo_t HdrAeInfo; 199 200 // M4_NUMBER_DESC("LinePeriodsPerField", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) 201 float LinePeriodsPerField; 202 203 // M4_NUMBER_DESC("PixelPeriodsPerLine", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) 204 float PixelPeriodsPerLine; 205 206 // M4_NUMBER_DESC("PixelClockFreqMHZ", "f32", M4_RANGE(0,4096), "0", M4_DIGIT(2),M4_HIDE(1)) 207 float PixelClockFreqMHZ; 208 209 // M4_NUMBER_DESC("GlobalEnvLv", "f32", M4_RANGE(0,65535), "0", M4_DIGIT(2),M4_HIDE(1)) 210 float GlobalEnvLv; 211 212 // M4_NUMBER_DESC("OverExpROIPdf", "f32", M4_RANGE(0,1), "0", M4_DIGIT(2),M4_HIDE(1)) 213 float OverExpROIPdf; 214 215 // M4_NUMBER_DESC("HighLightROIPdf", "f32", M4_RANGE(0,1), "0", M4_DIGIT(2),M4_HIDE(1)) 216 float HighLightROIPdf; 217 218 // M4_NUMBER_DESC("LowLightROIPdf", "f32", M4_RANGE(0,1), "0", M4_DIGIT(2),M4_HIDE(1)) 219 float LowLightROIPdf; 220 221 // M4_NUMBER_DESC("Fps", "f32", M4_RANGE(0,4096), "0", M4_DIGIT(2)) 222 float Fps; 223 } uapi_expinfo_t; 224 225 /*****************************************************************************/ 226 /** 227 * @brief ISP AEC HW-Meas Stats Params 228 */ 229 /*****************************************************************************/ 230 231 typedef struct uapi_rawhist_stats_s { 232 // M4_ARRAY_DESC("bins", "u32", M4_SIZE(1,256), M4_RANGE(0,268435456), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 233 unsigned int bins[RAWHIST_BIN_N_MAX]; 234 } uapi_rawhist_stats_t; 235 236 typedef struct uapi_sihist_stats_s { 237 // M4_ARRAY_DESC("bins", "u32", M4_SIZE(1,32), M4_RANGE(0,268435456), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 238 unsigned int bins[SIHIST_BIN_N_MAX]; 239 } uapi_sihist_stats_t; 240 241 typedef struct uapi_rawae_big_stats_s { 242 // M4_ARRAY_DESC("channelr_xy", "u16", M4_SIZE(15,15), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 243 uint16_t channelr_xy[RAWAEBIG_WIN_NUM]; 244 245 // M4_ARRAY_DESC("channelg_xy", "u16", M4_SIZE(15,15), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 246 uint16_t channelg_xy[RAWAEBIG_WIN_NUM]; 247 248 // M4_ARRAY_DESC("channelb_xy", "u16", M4_SIZE(15,15), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 249 uint16_t channelb_xy[RAWAEBIG_WIN_NUM]; 250 251 // M4_ARRAY_DESC("channely_xy", "u16", M4_SIZE(15,15), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 252 uint16_t channely_xy[RAWAEBIG_WIN_NUM]; //not HW! 253 254 // M4_ARRAY_DESC("wndx_channelr", "u16", M4_SIZE(1,4), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 255 uint16_t wndx_channelr[RAWAEBIG_SUBWIN_NUM]; //not HW! 256 257 // M4_ARRAY_DESC("wndx_channelg", "u16", M4_SIZE(1,4), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 258 uint16_t wndx_channelg[RAWAEBIG_SUBWIN_NUM]; //not HW! 259 260 // M4_ARRAY_DESC("wndx_channelb", "u16", M4_SIZE(1,4), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 261 uint16_t wndx_channelb[RAWAEBIG_SUBWIN_NUM]; //not HW! 262 263 // M4_ARRAY_DESC("wndx_channely", "u16", M4_SIZE(1,4), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 264 uint16_t wndx_channely[RAWAEBIG_SUBWIN_NUM]; //not HW! 265 266 // M4_ARRAY_DESC("wndx_sumr", "u32", M4_SIZE(1,4), M4_RANGE(0,536870912), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 267 uint64_t wndx_sumr[RAWAEBIG_SUBWIN_NUM]; 268 269 // M4_ARRAY_DESC("wndx_sumg", "u32", M4_SIZE(1,4), M4_RANGE(0,4294967296), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 270 uint64_t wndx_sumg[RAWAEBIG_SUBWIN_NUM]; 271 272 // M4_ARRAY_DESC("wndx_sumb", "u32", M4_SIZE(1,4), M4_RANGE(0,536870912), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 273 uint64_t wndx_sumb[RAWAEBIG_SUBWIN_NUM]; 274 } uapi_rawae_big_stats_t; 275 276 typedef struct uapi_rawae_lite_stat_s { 277 // M4_ARRAY_DESC("channelr_xy", "u16", M4_SIZE(5,5), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 278 uint16_t channelr_xy[RAWAELITE_WIN_NUM]; 279 280 // M4_ARRAY_DESC("channelg_xy", "u16", M4_SIZE(5,5), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 281 uint16_t channelg_xy[RAWAELITE_WIN_NUM]; 282 283 // M4_ARRAY_DESC("channelb_xy", "u16", M4_SIZE(5,5), M4_RANGE(0,1023), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 284 uint16_t channelb_xy[RAWAELITE_WIN_NUM]; 285 286 // M4_ARRAY_DESC("channely_xy", "u16", M4_SIZE(5,5), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 287 uint16_t channely_xy[RAWAELITE_WIN_NUM]; //not HW! 288 } uapi_rawae_lite_stat_t; 289 290 typedef struct uapi_yuvae_stats_s { 291 // M4_ARRAY_DESC("channely_xy", "u8", M4_SIZE(15,15), M4_RANGE(0,255), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 292 unsigned char mean[YUVAE_WIN_NUM]; 293 294 // M4_ARRAY_DESC("channely_xy", "u64", M4_SIZE(1,4), M4_RANGE(0,4294967296), "0", M4_DIGIT(0), M4_DYNAMIC(0),M4_HIDE(1)) 295 uint64_t ro_yuvae_sumy[YUVAE_SUBWIN_NUM]; 296 } uapi_yuvae_stats_t; 297 298 typedef struct uapi_raw_stats_s { 299 //rawae 300 // M4_STRUCT_DESC("rawae_big", "normal_ui_style") 301 uapi_rawae_big_stats_t rawae_big; 302 // M4_STRUCT_DESC("rawae_lite", "normal_ui_style") 303 uapi_rawae_lite_stat_t rawae_lite; 304 //rawhist 305 // M4_STRUCT_DESC("rawhist_big", "normal_ui_style") 306 uapi_rawhist_stats_t rawhist_big; 307 // M4_STRUCT_DESC("rawhist_lite", "normal_ui_style") 308 uapi_rawhist_stats_t rawhist_lite; 309 } uapi_raw_stats_t; 310 311 typedef struct uapi_ae_hwstats_s { 312 // M4_STRUCT_LIST_DESC("chn", M4_SIZE(1,3), "normal_ui_style") 313 uapi_raw_stats_t chn[3]; 314 // M4_STRUCT_DESC("extra", "normal_ui_style") 315 uapi_raw_stats_t extra; 316 // M4_STRUCT_DESC("yuvae", "normal_ui_style",M4_HIDE(1)) 317 uapi_yuvae_stats_t yuvae; 318 // M4_STRUCT_DESC("sihist", "normal_ui_style",M4_HIDE(1)) 319 uapi_sihist_stats_t sihist; 320 } uapi_ae_hwstats_t; 321 322 323 #endif /*__AEC_UAPI_HEAD_H__*/ 324