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_V1_H_
21 #define _RK_AIQ_TYPE_ACNR_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 "acnr/rk_aiq_types_acnr_algo_v1.h"
29 #include "cnr_head_v1.h"
30 
31 
32 //RKAIQ_BEGIN_DECLARE
33 
34 #define ACNRV1_RECALCULATE_DELTA_ISO       (10)
35 // fix bit
36 #define     RK_CNR_V1_sgmGain               4
37 #define     RK_CNR_V1_sgmRatio              4
38 #define     RK_CNR_V1_log2e                 6
39 #define     RK_CNR_V1_gainRatio             7
40 
41 #define     RK_CNR_V1_ratio                 0
42 #define     RK_CNR_V1_offset                4
43 
44 #define     RK_CNR_V1_uvgain_local          4
45 #define     RK_CNR_V1_kernels               7
46 
47 #define     RK_CNR_V1_medRatio              4
48 #define     RK_CNR_V1_sigmaR                0
49 #define     RK_CNR_V1_sigmaD                0
50 #define     RK_CNR_V1_uvgain                4
51 
52 //exp(-x)
53 #define     RK_CNR_V1_exp2_lut_num          15
54 #define     RK_CNR_V1_exp2_lut_x            7
55 #define     RK_CNR_V1_exp2_lut_y            7
56 
57 #define     RK_CNR_V1_bfRatio               RK_CNR_V1_exp2_lut_y
58 
59 #define     RK_CNR_V1_SIGMA_FIX_BIT         8
60 
61 
62 typedef enum Acnr_result_e {
63     ACNR_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
64     ACNR_RET_FAILURE             = 1,   // process failure
65     ACNR_RET_INVALID_PARM        = 2,   // invalid parameter
66     ACNR_RET_WRONG_CONFIG        = 3,   // feature not supported
67     ACNR_RET_BUSY                = 4,   // there's already something going on...
68     ACNR_RET_CANCELED            = 5,   // operation canceled
69     ACNR_RET_OUTOFMEM            = 6,   // out of memory
70     ACNR_RET_OUTOFRANGE          = 7,   // parameter/value out of range
71     ACNR_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
72     ACNR_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
73     ACNR_RET_NO_INPUTIMAGE       = 10   // no input image
74 } Acnr_result_t;
75 
76 typedef enum Acnr_State_e {
77     ACNR_STATE_INVALID           = 0,                   /**< initialization value */
78     ACNR_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
79     ACNR_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
80     ACNR_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
81     ACNR_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
82     ACNR_STATE_MAX                                      /**< max */
83 } Acnr_State_t;
84 
85 typedef enum Acnr_OPMode_e {
86     ACNR_OP_MODE_INVALID           = 0,                   /**< initialization value */
87     ACNR_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
88     ACNR_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
89     ACNR_OP_MODE_MAX                                      /**< max */
90 } Acnr_OPMode_t;
91 
92 typedef enum Acnr_ParamMode_e {
93     ACNR_PARAM_MODE_INVALID           = 0,
94     ACNR_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
95     ACNR_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
96     ACNR_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
97     ACNR_PARAM_MODE_MAX                                      /**< max */
98 } Acnr_ParamMode_t;
99 
100 typedef struct Acnr_ExpInfo_s {
101     int hdr_mode;
102     float arTime[3];
103     float arAGain[3];
104     float arDGain[3];
105     int   arIso[3];
106     int   snr_mode;
107     int rawWidth;
108     int rawHeight;
109 } Acnr_ExpInfo_t;
110 
111 typedef struct RK_CNR_Params_V1_s
112 {
113     int enable;
114     float iso[RK_CNR_V1_MAX_ISO_NUM];
115     int rkcnr_hq_bila_bypass[RK_CNR_V1_MAX_ISO_NUM];
116     int rkcnr_lq_bila_bypass[RK_CNR_V1_MAX_ISO_NUM];
117 
118     // gain
119     float rkcnr_exgain[RK_CNR_V1_MAX_ISO_NUM];
120     float rkcnr_g_gain[RK_CNR_V1_MAX_ISO_NUM];
121 
122     //
123     float ratio[RK_CNR_V1_MAX_ISO_NUM];
124     float offset[RK_CNR_V1_MAX_ISO_NUM];
125 
126     // step1
127     // median filter
128     float medRatio1[RK_CNR_V1_MAX_ISO_NUM];
129 
130     // bilateral filter
131     float sigmaR1[RK_CNR_V1_MAX_ISO_NUM];
132     float uvgain1[RK_CNR_V1_MAX_ISO_NUM];
133     float bfRatio1[RK_CNR_V1_MAX_ISO_NUM];
134     int  hbf_wgt_clip[RK_CNR_V1_MAX_ISO_NUM];
135 
136 
137     // step2
138     // median filter
139     float medRatio2[RK_CNR_V1_MAX_ISO_NUM];
140 
141     // bilateral filter
142     float sigmaR2[RK_CNR_V1_MAX_ISO_NUM];
143     float uvgain2[RK_CNR_V1_MAX_ISO_NUM];
144 
145     // step3
146     // bilateral filter
147     float sigmaR3[RK_CNR_V1_MAX_ISO_NUM];
148     float uvgain3[RK_CNR_V1_MAX_ISO_NUM];
149     float bfRatio3[RK_CNR_V1_MAX_ISO_NUM];
150 
151     // bilateral filter kernels
152     float kernel_5x5_table[5];
153 } RK_CNR_Params_V1_t;
154 
155 typedef struct RK_CNR_Params_V1_Select_s
156 {
157     int enable;
158 
159     // bypass
160     int rkcnr_hq_bila_bypass;
161     int rkcnr_lq_bila_bypass;
162 
163     // gain
164     float rkcnr_exgain;
165     float rkcnr_g_gain;
166 
167     //
168     float ratio;
169     float offset;
170 
171     // step1
172     // median filter
173     float medRatio1;
174 
175     // bilateral filter
176     float sigmaR1;
177     float uvgain1;
178     float bfRatio1;
179     int hbf_wgt_clip;
180 
181     // step2
182 
183     // median filter
184     float medRatio2;
185 
186     // bilateral filter
187     float sigmaR2;
188     float uvgain2;
189 
190     // step3
191     // bilateral filter
192     float sigmaR3;
193     float uvgain3;
194     float bfRatio3;
195 
196     // bilateral filter kernels
197     float kernel_5x5_table[5];
198 
199 } RK_CNR_Params_V1_Select_t;
200 
201 
202 typedef struct Acnr_Manual_Attr_V1_s
203 {
204     int cnrEn;
205     RK_CNR_Params_V1_Select_t stSelect;
206 
207 } Acnr_Manual_Attr_V1_t;
208 
209 typedef struct Acnr_Auto_Attr_V1_s
210 {
211     //all ISO params and select param
212     int cnrEn;
213 
214     RK_CNR_Params_V1_t stParams;
215     RK_CNR_Params_V1_Select_t stSelect;
216 
217 } Acnr_Auto_Attr_V1_t;
218 
219 typedef struct Acnr_ProcResult_V1_s {
220     int cnrEn;
221 
222     //for sw simultaion
223     //RK_CNR_Params_V1_Select_t stSelect;
224 
225     //for hw register
226     RK_CNR_Fix_V1_t* stFix;
227 } Acnr_ProcResult_V1_t;
228 
229 
230 typedef struct Acnr_Config_V1_s {
231     Acnr_State_t eState;
232     Acnr_OPMode_t eMode;
233     int rawHeight;
234     int rawWidth;
235 } Acnr_Config_V1_t;
236 
237 
238 typedef struct rk_aiq_cnr_attrib_v1_s {
239     Acnr_OPMode_t eMode;
240     Acnr_Auto_Attr_V1_t stAuto;
241     Acnr_Manual_Attr_V1_t stManual;
242 } rk_aiq_cnr_attrib_v1_t;
243 
244 
245 typedef struct rk_aiq_cnr_IQPara_V1_s {
246     struct list_head* listHead;
247 } rk_aiq_cnr_IQPara_V1_t;
248 
249 
250 //calibdb
251 
252 
253 //RKAIQ_END_DECLARE
254 
255 #endif
256 
257