xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/iq_parser_v2/aec_uapi_head.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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