1 /*
2  *rk_aiq_types_alsc_algo_int.h
3  *
4  *  Copyright (c) 2019 Rockchip Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19 
20 #ifndef _RK_AIQ_TYPE_AUVNR_ALGO_INT_V1_H_
21 #define _RK_AIQ_TYPE_AUVNR_ALGO_INT_V1_H_
22 
23 #include <math.h>
24 #include <string.h>
25 #include <stdlib.h>
26 #include "rk_aiq_comm.h"
27 #include "RkAiqCalibDbTypes.h"
28 #include "auvnr/rk_aiq_types_auvnr_algo_v1.h"
29 #include "uvnr_head_v1.h"
30 
31 
32 //RKAIQ_BEGIN_DECLARE
33 
34 #define UVNR_MAX_ISO_STEP (CALIBDB_NR_SHARP_MAX_ISO_LEVEL)
35 
36 typedef enum Auvnr_result_e {
37     AUVNR_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
38     AUVNR_RET_FAILURE             = 1,   // process failure
39     AUVNR_RET_INVALID_PARM        = 2,   // invalid parameter
40     AUVNR_RET_WRONG_CONFIG        = 3,   // feature not supported
41     AUVNR_RET_BUSY                = 4,   // there's already something going on...
42     AUVNR_RET_CANCELED            = 5,   // operation canceled
43     AUVNR_RET_OUTOFMEM            = 6,   // out of memory
44     AUVNR_RET_OUTOFRANGE          = 7,   // parameter/value out of range
45     AUVNR_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
46     AUVNR_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
47     AUVNR_RET_NO_INPUTIMAGE       = 10   // no input image
48 } Auvnr_result_t;
49 
50 typedef enum Auvnr_State_e {
51     AUVNR_STATE_INVALID           = 0,                   /**< initialization value */
52     AUVNR_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
53     AUVNR_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
54     AUVNR_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
55     AUVNR_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
56     AUVNR_STATE_MAX                                      /**< max */
57 } Auvnr_State_t;
58 
59 typedef enum Auvnr_OPMode_e {
60     AUVNR_OP_MODE_INVALID           = 0,                   /**< initialization value */
61     AUVNR_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
62     AUVNR_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
63     AUVNR_OP_MODE_MAX                                      /**< max */
64 } Auvnr_OPMode_t;
65 
66 typedef enum Auvnr_ParamMode_e {
67 	AUVNR_PARAM_MODE_INVALID           = 0,
68     AUVNR_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
69     AUVNR_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
70     AUVNR_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
71     AUVNR_PARAM_MODE_MAX                                      /**< max */
72 } Auvnr_ParamMode_t;
73 
74 typedef struct Auvnr_ExpInfo_s {
75     int hdr_mode;
76     float arTime[3];
77     float arAGain[3];
78     float arDGain[3];
79     int   arIso[3];
80     int   arDcgMode[3];
81     int   cur_snr_mode;
82 	int   snr_mode;
83 
84 	float preTime[3];
85 	float preAGain[3];
86 	float preDGain[3];
87 	int preIso[3];
88 	int   preDcgMode[3];
89     int pre_snr_mode;
90 
91 	int mfnr_mode_3to1;
92 } Auvnr_ExpInfo_t;
93 
94 typedef struct RK_UVNR_Params_V1_s
95 {
96 	#ifndef RK_SIMULATOR_HW
97     float iso[UVNR_MAX_ISO_STEP];
98 #endif
99 
100     char    rkuvnrISO[256];
101 
102     //step0:
103     float   ratio[UVNR_MAX_ISO_STEP];
104     float   offset[UVNR_MAX_ISO_STEP];
105 
106     //step1
107     int     wStep1[UVNR_MAX_ISO_STEP];
108     int     hStep1[UVNR_MAX_ISO_STEP];
109     int     meanSize1[UVNR_MAX_ISO_STEP];
110 
111     int     nonMed1[4];
112     int     medSize1[UVNR_MAX_ISO_STEP];
113     float   medRatio1[UVNR_MAX_ISO_STEP];
114     int     isMedIIR1[UVNR_MAX_ISO_STEP];
115 
116     int     nonBf1[4];
117     int     bfSize1[UVNR_MAX_ISO_STEP];
118     float   sigmaR1[UVNR_MAX_ISO_STEP];
119     float   sigmaD1[UVNR_MAX_ISO_STEP];
120     float   uvgain1[UVNR_MAX_ISO_STEP];
121     float   bfRatio1[UVNR_MAX_ISO_STEP];
122     int     isRowIIR1[UVNR_MAX_ISO_STEP];
123     int     isYcopy1[UVNR_MAX_ISO_STEP];
124 
125     //step2
126     int     block2_ext[4];
127 
128     int     wStep2[UVNR_MAX_ISO_STEP];
129     int     hStep2[UVNR_MAX_ISO_STEP];
130     int     meanSize2[UVNR_MAX_ISO_STEP];
131 
132     int     nonMed2[4];
133     int     medSize2[UVNR_MAX_ISO_STEP];
134     float   medRatio2[UVNR_MAX_ISO_STEP];
135     int     isMedIIR2[UVNR_MAX_ISO_STEP];
136 
137     int     nonBf2[4];
138     int     bfSize2[UVNR_MAX_ISO_STEP];
139     float   sigmaR2[UVNR_MAX_ISO_STEP];
140     float   sigmaD2[UVNR_MAX_ISO_STEP];
141     float   uvgain2[UVNR_MAX_ISO_STEP];
142     float   bfRatio2[UVNR_MAX_ISO_STEP];
143     int     isRowIIR2[UVNR_MAX_ISO_STEP];
144     int     isYcopy2[UVNR_MAX_ISO_STEP];
145 
146     //step3
147     int     nonBf3[4];
148     int     bfSize3[UVNR_MAX_ISO_STEP];
149     float   sigmaR3[UVNR_MAX_ISO_STEP];
150     float   sigmaD3[UVNR_MAX_ISO_STEP];
151     float   uvgain3[UVNR_MAX_ISO_STEP];
152     float   bfRatio3[UVNR_MAX_ISO_STEP];
153     int     isRowIIR3[UVNR_MAX_ISO_STEP];
154     int     isYcopy3[UVNR_MAX_ISO_STEP];
155 
156     //kernels
157     float   kernel_3x3_table[3];
158     float   kernel_5x5_talbe[5];
159     float   kernel_9x9_table[8];
160     int     kernel_9x9_num;
161 
162     //curves
163     int     sigmaAdj_x[9];
164     float   sigamAdj_y[9];
165 
166     int     threAdj_x[9];
167     int     threAjd_y[9];
168 }RK_UVNR_Params_V1_t;
169 
170 typedef struct RK_UVNR_Params_V1_Select_s
171 {
172 	char    select_iso[256];
173 
174     //step0
175     float   ratio;
176     float   offset;
177 
178     //step1
179     int     wStep1;
180     int     hStep1;
181     int     meanSize1;
182 
183     int     nonMed1[4];
184     int     medSize1;
185     float   medRatio1;
186     int     isMedIIR1;
187 
188     int     nonBf1[4];
189     int     bfSize1;
190     float   sigmaR1;
191     float   sigmaD1;
192     float   uvgain1;
193     float   bfRatio1;
194     int     isRowIIR1;
195     int     isYcopy1;
196 
197     //step2
198     int     block2_ext[4];
199     int     wStep2;
200     int     hStep2;
201     int     meanSize2;
202 
203     int     nonMed2[4];
204     int     medSize2;
205     float   medRatio2;
206     int     isMedIIR2;
207 
208     int     nonBf2[4];
209     int     bfSize2;
210     float   sigmaR2;
211     float   sigmaD2;
212     float   uvgain2;
213     float   bfRatio2;
214     int     isRowIIR2;
215     int     isYcopy2;
216 
217     //step3
218     int     nonBf3[4];
219     int     bfSize3;
220     float   sigmaR3;
221     float   sigmaD3;
222     float   uvgain3;
223     float   bfRatio3;
224     int     isRowIIR3;
225     int     isYcopy3;
226 
227     //kernels
228     float   kernel_3x3_table[3];
229     float   kernel_5x5_table[5];
230     float   kernel_9x9_table[8];
231     int     kernel_9x9_num;
232 
233     //curves
234     int     sigmaAdj_x[9];
235     float   sigmaAdj_y[9];
236 
237     int     threAdj_x[9];
238     int     threAdj_y[9];
239 }RK_UVNR_Params_V1_Select_t;
240 
241 
242 typedef struct Auvnr_Manual_Attr_V1_s
243 {
244     int uvnrEn;
245 	RK_UVNR_Params_V1_Select_t stSelect;
246 
247 } Auvnr_Manual_Attr_V1_t;
248 
249 typedef struct Auvnr_Auto_Attr_V1_s
250 {
251     //all ISO params and select param
252     int uvnrEn;
253 
254 	RK_UVNR_Params_V1_t stParams;
255     RK_UVNR_Params_V1_Select_t stSelect;
256 
257 } Auvnr_Auto_Attr_V1_t;
258 
259 typedef struct Auvnr_ProcResult_V1_s {
260     int uvnrEn;
261 
262     //for sw simultaion
263     //RK_UVNR_Params_V1_Select_t stSelect;
264 
265     //for hw register
266     RK_UVNR_Fix_V1_t* stFix;
267 
268 } Auvnr_ProcResult_V1_t;
269 
270 
271 typedef struct Auvnr_Config_V1_s {
272     Auvnr_State_t eState;
273     Auvnr_OPMode_t eMode;
274 	int rawHeight;
275 	int rawWidth;
276 } Auvnr_Config_V1_t;
277 
278 
279 typedef struct rk_aiq_uvnr_attrib_v1_s {
280     Auvnr_OPMode_t eMode;
281     Auvnr_Auto_Attr_V1_t stAuto;
282     Auvnr_Manual_Attr_V1_t stManual;
283 } rk_aiq_uvnr_attrib_v1_t;
284 
285 
286 typedef struct rk_aiq_uvnr_IQPara_v1_s {
287 	CalibDb_UVNR_t stUvnrPara;
288 } rk_aiq_uvnr_IQPara_v1_t;
289 
290 typedef struct rk_aiq_uvnr_JsonPara_v1_s {
291 	CalibDbV2_UVNR_t uvnr_v1;
292 } rk_aiq_uvnr_JsonPara_v1_t;
293 
294 
295 //calibdb
296 
297 
298 //RKAIQ_END_DECLARE
299 
300 #endif
301 
302