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_ACNR_ALGO_INT_V2_H_
21 #define _RK_AIQ_TYPE_ACNR_ALGO_INT_V2_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 "acnr2/rk_aiq_types_acnr_algo_v2.h"
29 #include "cnr_head_v2.h"
30 #include "cnr_uapi_head_v2.h"
31 
32 
33 //RKAIQ_BEGIN_DECLARE
34 #define RK_CNR_V2_MAX_ISO_NUM (CALIBDB_MAX_ISO_LEVEL)
35 
36 #define ACNRV2_RECALCULATE_DELTA_ISO       (10)
37 // fix bit
38 #define     RK_CNR_V2_sgmGain               4
39 #define     RK_CNR_V2_sgmRatio              4
40 #define     RK_CNR_V2_log2e                 6
41 #define     RK_CNR_V2_gainRatio             7
42 
43 #define     RK_CNR_V2_ratio                 0
44 #define     RK_CNR_V2_offset                4
45 
46 #define     RK_CNR_V2_uvgain_local          4
47 #define     RK_CNR_V2_kernels               7
48 
49 #define     RK_CNR_V2_medRatio              4
50 #define     RK_CNR_V2_sigmaR                0
51 #define     RK_CNR_V2_sigmaD                0
52 #define     RK_CNR_V2_uvgain                4
53 
54 //exp(-x)
55 #define     RK_CNR_V2_exp2_lut_num          15
56 #define     RK_CNR_V2_exp2_lut_x            7
57 #define     RK_CNR_V2_exp2_lut_y            7
58 
59 #define     RK_CNR_V2_bfRatio               RK_CNR_V2_exp2_lut_y
60 
61 #define     RK_CNR_V2_SIGMA_FIX_BIT         8
62 
63 //#define     RKCNR_V2_SGM_ADJ_TABLE_LEN      13
64 
65 #define     RKCNR_V2_SIGMA_FIX_BIT          8
66 #define     RKCNR_V2_LOCAL_GAIN_FIX_BITS    4
67 #define     RKCNR_V2_G_GAIN_FIX_BITS        4
68 #define     RKCNR_V2_G_GAIN_ALPHA_FIX_BITS  3
69 #define     RKCNR_V2_GAIN_ISO_FIX_BITS      7
70 
71 typedef enum AcnrV2_result_e {
72     ACNRV2_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
73     ACNRV2_RET_FAILURE             = 1,   // process failure
74     ACNRV2_RET_INVALID_PARM        = 2,   // invalid parameter
75     ACNRV2_RET_WRONG_CONFIG        = 3,   // feature not supported
76     ACNRV2_RET_BUSY                = 4,   // there's already something going on...
77     ACNRV2_RET_CANCELED            = 5,   // operation canceled
78     ACNRV2_RET_OUTOFMEM            = 6,   // out of memory
79     ACNRV2_RET_OUTOFRANGE          = 7,   // parameter/value out of range
80     ACNRV2_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
81     ACNRV2_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
82     ACNRV2_RET_NO_INPUTIMAGE       = 10   // no input image
83 } AcnrV2_result_t;
84 
85 typedef enum AcnrV2_State_e {
86     ACNRV2_STATE_INVALID           = 0,                   /**< initialization value */
87     ACNRV2_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
88     ACNRV2_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
89     ACNRV2_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
90     ACNRV2_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
91     ACNRV2_STATE_MAX                                      /**< max */
92 } AcnrV2_State_t;
93 
94 typedef enum AcnrV2_OPMode_e {
95     ACNRV2_OP_MODE_INVALID           = 0,                   /**< initialization value */
96     ACNRV2_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
97     ACNRV2_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
98     ACNRV2_OP_MODE_REG_MANUAL        = 3,
99     ACNRV2_OP_MODE_MAX                                      /**< max */
100 } AcnrV2_OPMode_t;
101 
102 typedef enum AcnrV2_ParamMode_e {
103     ACNRV2_PARAM_MODE_INVALID           = 0,
104     ACNRV2_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
105     ACNRV2_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
106     ACNRV2_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
107     ACNRV2_PARAM_MODE_MAX                                      /**< max */
108 } AcnrV2_ParamMode_t;
109 
110 
111 
112 typedef struct RK_CNR_Params_V2_s
113 {
114     int enable;
115     float iso[RK_CNR_V2_MAX_ISO_NUM];
116     int hf_bypass[RK_CNR_V2_MAX_ISO_NUM];
117     int lf_bypass[RK_CNR_V2_MAX_ISO_NUM];
118 
119     // gain
120     float global_gain[RK_CNR_V2_MAX_ISO_NUM];
121     float global_gain_alpha[RK_CNR_V2_MAX_ISO_NUM];
122     float local_gain_scale[RK_CNR_V2_MAX_ISO_NUM];
123 
124     // strength adj by gain
125     int gain_adj_strength_ratio[RK_CNR_V2_MAX_ISO_NUM][RKCNR_V2_SGM_ADJ_TABLE_LEN];
126 
127     //
128     float color_sat_adj[RK_CNR_V2_MAX_ISO_NUM];
129     float color_sat_adj_alpha[RK_CNR_V2_MAX_ISO_NUM];
130 
131     // step1
132     // median filter
133     float hf_spikes_reducion_strength[RK_CNR_V2_MAX_ISO_NUM];
134 
135     // bilateral filter
136     float hf_denoise_strength[RK_CNR_V2_MAX_ISO_NUM];
137     float hf_color_sat[RK_CNR_V2_MAX_ISO_NUM];
138     float hf_denoise_alpha[RK_CNR_V2_MAX_ISO_NUM];
139     int  hf_bf_wgt_clip[RK_CNR_V2_MAX_ISO_NUM];
140 
141 
142     // step2
143     // median filter
144     float thumb_spikes_reducion_strength[RK_CNR_V2_MAX_ISO_NUM];
145 
146     // bilateral filter
147     float thumb_denoise_strength[RK_CNR_V2_MAX_ISO_NUM];
148     float thumb_color_sat[RK_CNR_V2_MAX_ISO_NUM];
149 
150     // step3
151     // bilateral filter
152     float lf_denoise_strength[RK_CNR_V2_MAX_ISO_NUM];
153     float lf_color_sat[RK_CNR_V2_MAX_ISO_NUM];
154     float lf_denoise_alpha[RK_CNR_V2_MAX_ISO_NUM];
155 
156     // bilateral filter kernels
157     float kernel_5x5[5];
158 } RK_CNR_Params_V2_t;
159 
160 #if 0
161 typedef struct RK_CNR_Params_V2_Select_s
162 {
163     int enable;
164 
165     // bypass
166     int hf_bypass;
167     int lf_bypass;
168 
169     // gain
170 
171     // gain
172     float global_gain;
173     float global_gain_alpha;
174     float local_gain_scale;
175 
176     // strength adj by gain
177     int gain_adj_strength_ratio[RKCNR_V2_SGM_ADJ_TABLE_LEN];
178 
179     //
180     float color_sat_adj;
181     float color_sat_adj_alpha;
182 
183     // step1
184     // median filter
185     float hf_spikes_reducion_strength;
186 
187     // bilateral filter
188     float hf_denoise_strength;
189     float hf_color_sat;
190     float hf_denoise_alpha;
191     int hf_bf_wgt_clip;
192 
193     // step2
194 
195     // median filter
196     float thumb_spikes_reducion_strength;
197 
198     // bilateral filter
199     float thumb_denoise_strength;
200     float thumb_color_sat;
201 
202     // step3
203     // bilateral filter
204     float lf_denoise_strength;
205     float lf_color_sat;
206     float lf_denoise_alpha;
207 
208     // bilateral filter kernels
209     float kernel_5x5[5];
210 
211 } RK_CNR_Params_V2_Select_t;
212 #endif
213 
214 typedef struct Acnr_Manual_Attr_V2_s
215 {
216     RK_CNR_Params_V2_Select_t stSelect;
217 
218     RK_CNR_Fix_V2_t stFix;
219 
220 } Acnr_Manual_Attr_V2_t;
221 
222 typedef struct Acnr_Auto_Attr_V2_s
223 {
224     //all ISO params and select param
225 
226     RK_CNR_Params_V2_t stParams;
227     RK_CNR_Params_V2_Select_t stSelect;
228 
229 } Acnr_Auto_Attr_V2_t;
230 
231 typedef struct Acnr_ProcResult_V2_s {
232 
233     //for sw simultaion
234     //RK_CNR_Params_V2_Select_t stSelect;
235 
236     //for hw register
237     RK_CNR_Fix_V2_t* stFix;
238 
239 } Acnr_ProcResult_V2_t;
240 
241 
242 typedef struct Acnr_Config_V2_s {
243     AcnrV2_State_t eState;
244     AcnrV2_OPMode_t eMode;
245     int rawHeight;
246     int rawWidth;
247 } Acnr_Config_V2_t;
248 
249 
250 typedef struct rk_aiq_cnr_attrib_v2_s {
251     rk_aiq_uapi_sync_t sync;
252     AcnrV2_OPMode_t eMode;
253     Acnr_Auto_Attr_V2_t stAuto;
254     Acnr_Manual_Attr_V2_t stManual;
255 } rk_aiq_cnr_attrib_v2_t;
256 
257 
258 typedef struct rk_aiq_cnr_strength_v2_s {
259     rk_aiq_uapi_sync_t sync;
260     float percent;
261     bool strength_enable;
262 } rk_aiq_cnr_strength_v2_t;
263 
264 
265 //calibdb
266 
267 
268 //RKAIQ_END_DECLARE
269 
270 #endif
271 
272