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_ABAYERNR_ALGO_INT_V1_H_
21 #define _RK_AIQ_TYPE_ABAYERNR_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 "arawnr/rk_aiq_types_abayernr_algo_v1.h"
29 #include "bayernr_head_v1.h"
30 
31 //RKAIQ_BEGIN_DECLARE
32 
33 #define MAX_ISO_STEP CALIBDB_NR_SHARP_MAX_ISO_LEVEL
34 
35 
36 
37 typedef enum Abayernr_result_v1_e {
38     ABAYERNR_RET_V1_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
39     ABAYERNR_RET_V1_FAILURE             = 1,   // process failure
40     ABAYERNR_RET_V1_INVALID_PARM        = 2,   // invalid parameter
41     ABAYERNR_RET_V1_WRONG_CONFIG        = 3,   // feature not supported
42     ABAYERNR_RET_V1_BUSY                = 4,   // there's already something going on...
43     ABAYERNR_RET_V1_CANCELED            = 5,   // operation canceled
44     ABAYERNR_RET_V1_OUTOFMEM            = 6,   // out of memory
45     ABAYERNR_RET_V1_OUTOFRANGE          = 7,   // parameter/value out of range
46     ABAYERNR_RET_V1_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
47     ABAYERNR_RET_V1_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
48     ABAYERNR_RET_V1_NO_INPUTIMAGE       = 10   // no input image
49 } Abayernr_result_v1_t;
50 
51 typedef enum Abayernr_State_V1_e {
52     ABAYERNR_STATE_V1_INVALID           = 0,                   /**< initialization value */
53     ABAYERNR_STATE_V1_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
54     ABAYERNR_STATE_V1_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
55     ABAYERNR_STATE_V1_RUNNING           = 3,                   /**< instance is running (processes frames) */
56     ABAYERNR_STATE_V1_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
57     ABAYERNR_STATE_V1_MAX                                      /**< max */
58 } Abayernr_State_V1_t;
59 
60 typedef enum Abayernr_OPMode_V1_e {
61     ABAYERNR_OP_MODE_V1_INVALID           = 0,                   /**< initialization value */
62     ABAYERNR_OP_MODE_V1_AUTO              = 1,                   /**< instance is created, but not initialized */
63     ABAYERNR_OP_MODE_V1_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
64     ABAYERNR_OP_MODE_V1_MAX                                      /**< max */
65 } Abayernr_OPMode_V1_t;
66 
67 typedef enum Abayernr_ParamMode_V1_e {
68 	ABAYERNR_PARAM_MODE_V1_INVALID           = 0,
69     ABAYERNR_PARAM_MODE_V1_NORMAL          = 1,                   /**< initialization value */
70     ABAYERNR_PARAM_MODE_V1_HDR              = 2,                   /**< instance is created, but not initialized */
71     ABAYERNR_PARAM_MODE_V1_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
72     ABAYERNR_PARAM_MODE_V1_MAX                                      /**< max */
73 } Abayernr_ParamMode_V1_t;
74 
75 typedef struct Abayernr_ExpInfo_V1_s {
76     int hdr_mode;
77     float arTime[3];
78     float arAGain[3];
79     float arDGain[3];
80     int   arIso[3];
81     int   arDcgMode[3];
82     int   cur_snr_mode;
83 	int   snr_mode;
84 
85 	float preTime[3];
86 	float preAGain[3];
87 	float preDGain[3];
88 	int preIso[3];
89 	int   preDcgMode[3];
90     int pre_snr_mode;
91 
92 	int mfnr_mode_3to1;
93 } Abayernr_ExpInfo_V1_t;
94 
95 
96 typedef struct RK_Bayernr_Params_V1_s
97 {
98 #ifndef RK_SIMULATOR_HW
99     float iso[MAX_ISO_STEP];
100 #endif
101 
102     float a[MAX_ISO_STEP];
103     float b[MAX_ISO_STEP];
104 
105     int halfpatch;
106     int halfblock;
107     float filtpar[MAX_ISO_STEP];
108     float ctrPit[7];
109 
110     float luLevel[8];
111     float luRatio[MAX_ISO_STEP][8];
112 
113     float w[MAX_ISO_STEP][4];
114 
115     int peaknoisesigma;
116     int sw_rawnr_gauss_en;
117 
118     int rgain_offs;
119     int rgain_filp;
120     int bgain_offs;
121     int bgain_filp;
122 
123     char bayernr_ver_char[64];
124 
125     float bayernr_edgesoftness;
126     float bayernr_gauss_weight0;
127     float bayernr_gauss_weight1;
128 
129     int sw_bayernr_edge_filter_en;
130     float sw_bayernr_edge_filter_lumapoint[8];
131     float sw_bayernr_edge_filter_wgt[MAX_ISO_STEP][8];
132     float sw_bayernr_filter_strength[MAX_ISO_STEP];
133     int   sw_bayernr_filter_lumapoint[16];
134     int   sw_bayernr_filter_sigma[MAX_ISO_STEP][16];
135     float sw_bayernr_filter_edgesofts[MAX_ISO_STEP];
136     float sw_bayernr_filter_soft_threshold_ratio[MAX_ISO_STEP];
137     float sw_bayernr_filter_out_wgt[MAX_ISO_STEP];
138 } RK_Bayernr_Params_V1_t;
139 
140 
141 
142 typedef struct RK_Bayernr_Params_Select_V1_s
143 {
144     float a[3];
145     float b[3];
146     float t0[3];
147     int halfPatch;
148     int halfBlock;
149     float filtPar[3];
150     float ctrPit[7];
151 
152     float luLevel[8];
153     float luRatio[8];
154 
155     float w[4];
156     int peaknoisesigma;
157     int sw_rawnr_gauss_en;
158 
159     int rgain_offs;
160     int rgain_filp;
161     int bgain_offs;
162     int bgain_filp;
163 
164     char bayernr_ver_char[64];
165 
166     float bayernr_edgesoftness;
167     float bayernr_gauss_weight0;
168     float bayernr_gauss_weight1;
169 
170     int sw_bayernr_edge_filter_en;
171     float sw_bayernr_edge_filter_lumapoint[8];
172     float sw_bayernr_edge_filter_wgt[8];
173     float sw_bayernr_filter_strength;
174     int   sw_bayernr_filter_lumapoint[16];
175     int   sw_bayernr_filter_sigma[16];
176     float sw_bayernr_filter_edgesofts;
177     float sw_bayernr_filter_soft_threshold_ratio;
178     float sw_bayernr_filter_out_wgt;
179 
180     float sw_dgain[3];
181 
182     int gausskparsq;
183     int sigmaPar;
184     int thld_diff;
185     int thld_chanelw;
186     int pix_diff;
187     int log_bypass;
188 } RK_Bayernr_Params_Select_V1_t;
189 
190 
191 
192 
193 typedef struct Abayernr_Manual_Attr_V1_s
194 {
195     int bayernrEn;
196 	RK_Bayernr_Params_Select_V1_t stSelect;
197 
198 } Abayernr_Manual_Attr_V1_t;
199 
200 typedef struct Abayernr_Auto_Attr_V1_s
201 {
202     //all ISO params and select param
203     int bayernrEn;
204 
205 	RK_Bayernr_Params_V1_t stParams;
206     RK_Bayernr_Params_Select_V1_t stSelect;
207 
208 } Abayernr_Auto_Attr_V1_t;
209 
210 typedef struct Abayernr_ProcResult_V1_s {
211     int bayernrEn;
212 
213     //for sw simultaion
214     RK_Bayernr_Params_Select_V1_t stSelect;
215     //for hw register
216     RK_Bayernr_Fix_V1_t stFix;
217 
218 } Abayernr_ProcResult_V1_t;
219 
220 
221 typedef struct Abayernr_Config_V1_s {
222     Abayernr_State_V1_t eState;
223     Abayernr_OPMode_V1_t eMode;
224 } Abayernr_Config_V1_t;
225 
226 
227 typedef struct rk_aiq_bayernr_attrib_v1_s {
228     Abayernr_OPMode_V1_t eMode;
229     Abayernr_Auto_Attr_V1_t stAuto;
230     Abayernr_Manual_Attr_V1_t stManual;
231 } rk_aiq_bayernr_attrib_v1_t;
232 
233 
234 typedef struct rk_aiq_bayernr_IQPara_V1_s {
235 	CalibDb_BayerNr_t stBayernrPara;
236 } rk_aiq_bayernr_IQPara_V1_t;
237 
238 typedef struct rk_aiq_bayernr_JsonPara_V1_s {
239 	CalibDbV2_BayerNrV1_t bayernr_v1;
240 
241 } rk_aiq_bayernr_JsonPara_V1_t;
242 
243 //RKAIQ_END_DECLARE
244 
245 #endif
246 
247