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_V2_H_
21 #define _RK_AIQ_TYPE_ABAYERNR_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 "arawnr2/rk_aiq_types_abayernr_algo_v2.h"
29 #include "bayernr_head_v2.h"
30 
31 //RKAIQ_BEGIN_DECLARE
32 
33 #define ABAYERNRV2_DELTA_ISO (10)
34 
35 typedef enum Abayernr_result_e {
36     ABAYERNR_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
37     ABAYERNR_RET_FAILURE             = 1,   // process failure
38     ABAYERNR_RET_INVALID_PARM        = 2,   // invalid parameter
39     ABAYERNR_RET_WRONG_CONFIG        = 3,   // feature not supported
40     ABAYERNR_RET_BUSY                = 4,   // there's already something going on...
41     ABAYERNR_RET_CANCELED            = 5,   // operation canceled
42     ABAYERNR_RET_OUTOFMEM            = 6,   // out of memory
43     ABAYERNR_RET_OUTOFRANGE          = 7,   // parameter/value out of range
44     ABAYERNR_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
45     ABAYERNR_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
46     ABAYERNR_RET_NO_INPUTIMAGE       = 10   // no input image
47 } Abayernr_result_t;
48 
49 typedef enum Abayernr_State_e {
50     ABAYERNR_STATE_INVALID           = 0,                   /**< initialization value */
51     ABAYERNR_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
52     ABAYERNR_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
53     ABAYERNR_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
54     ABAYERNR_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
55     ABAYERNR_STATE_MAX                                      /**< max */
56 } Abayernr_State_t;
57 
58 typedef enum Abayernr_OPMode_e {
59     ABAYERNR_OP_MODE_INVALID           = 0,                   /**< initialization value */
60     ABAYERNR_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
61     ABAYERNR_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
62     ABAYERNR_OP_MODE_MAX                                      /**< max */
63 } Abayernr_OPMode_t;
64 
65 typedef enum Abayernr_ParamMode_e {
66     ABAYERNR_PARAM_MODE_INVALID           = 0,
67     ABAYERNR_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
68     ABAYERNR_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
69     ABAYERNR_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
70     ABAYERNR_PARAM_MODE_MAX                                      /**< max */
71 } Abayernr_ParamMode_t;
72 
73 typedef struct Abayernr_ExpInfo_s {
74     int hdr_mode;
75     float arTime[3];
76     float arAGain[3];
77     float arDGain[3];
78     int   arIso[3];
79     int   snr_mode;
80 } Abayernr_ExpInfo_t;
81 
82 
83 
84 typedef struct RK_Bayernr_2D_Params_V2_s
85 {
86     // bayernr version
87     int bayernrv2_2dnr_enable;
88 
89     // v2 parse
90     float iso[RK_BAYERNR_V2_MAX_ISO_NUM];
91     float bayernrv2_edge_filter_lumapoint_r[8];
92     float bayernrv2_edge_filter_wgt_r[RK_BAYERNR_V2_MAX_ISO_NUM][8];
93     float bayernrv2_filter_strength_r[RK_BAYERNR_V2_MAX_ISO_NUM];
94     int   bayernrv2_filter_lumapoint_r[16];
95     int   bayernrv2_filter_sigma_r[RK_BAYERNR_V2_MAX_ISO_NUM][16];
96     float bayernrv2_filter_edgesofts_r[RK_BAYERNR_V2_MAX_ISO_NUM];
97     float bayernrv2_filter_soft_threshold_ratio_r[RK_BAYERNR_V2_MAX_ISO_NUM];
98     float bayernrv2_filter_out_wgt_r[RK_BAYERNR_V2_MAX_ISO_NUM];
99     int   bayernrv2_gauss_guide_r[RK_BAYERNR_V2_MAX_ISO_NUM];
100 
101 } RK_Bayernr_2D_Params_V2_t;
102 
103 typedef struct RK_Bayernr_2D_Params_V2_Select_s
104 {
105     // v2 version register // edge filter params
106     int bayernrv2_2dnr_enable;
107 
108     float bayernrv2_filter_strength;
109     float bayernrv2_filter_soft_threshold_ratio;
110     float bayernrv2_filter_out_wgt;
111     float bayernrv2_filter_edgesofts;
112 
113     int bayernrv2_edge_filter_en;
114     int bayernrv2_edge_filter_lumapoint[8];
115     int bayernrv2_edge_filter_wgt[8];
116     int bayernrv2_gauss_guide;
117     int bayernrv2_filter_lumapoint[16];
118     int bayernrv2_filter_sigma[16];
119     int bayernrv2_bil_gauss_weight[16];
120     int bayernrv2_gray_mode;
121     int bayernrv2_dgains[3];
122     int bayernrv2_thld_diff;
123     int bayernrv2_pix_diff;
124 
125 } RK_Bayernr_2D_Params_V2_Select_t;
126 
127 
128 typedef struct RK_Bayernr_3D_Params_V2_s
129 {
130     int bayernrv2_tnr_enable;
131 
132     float iso[RK_BAYERNR_V2_MAX_ISO_NUM];
133     float bayernrv2_tnr_filter_strength_r[RK_BAYERNR_V2_MAX_ISO_NUM];
134     float bayernrv2_tnr_lo_clipwgt_r[RK_BAYERNR_V2_MAX_ISO_NUM];
135     float bayernrv2_tnr_hi_clipwgt_r[RK_BAYERNR_V2_MAX_ISO_NUM];
136     float bayernrv2_tnr_softwgt_r[RK_BAYERNR_V2_MAX_ISO_NUM];
137 
138     int   bayernrv2_lumapoint_r[16];
139     int   bayernrv2_sigma_r[RK_BAYERNR_V2_MAX_ISO_NUM][16];
140 
141 } RK_Bayernr_3D_Params_V2_t;
142 
143 
144 typedef struct RK_Bayernr_3D_Params_V2_Select_s
145 {
146     int bayernrv2_tnr_enable;
147 
148     float bayernrv2_tnr_filter_strength;
149     float bayernrv2_tnr_lo_clipwgt;
150     float bayernrv2_tnr_hi_clipwgt;
151     float bayernrv2_tnr_softwgt;
152 
153     //below not use yet
154     int bayernrv2_tnr_sigratio;
155     int bayernrv2_tnr_strength;
156     int bayernrv2_tnr_global_pk_en;     // 1 use local pk, 0 use global pk
157     int bayernrv2_tnr_global_pksq;
158 
159     int bayernrv2_tnr_lumapoint[16];
160     int bayernrv2_tnr_sigma[16];
161 } RK_Bayernr_3D_Params_V2_Select_t;
162 
163 
164 typedef struct Abayernr_Manual_Attr_V2_s
165 {
166     int bayernr2DEn;
167     int bayernr3DEn;
168     RK_Bayernr_2D_Params_V2_Select_t st2DSelect;
169     RK_Bayernr_3D_Params_V2_Select_t st3DSelect;
170 
171 } Abayernr_Manual_Attr_V2_t;
172 
173 typedef struct Abayernr_Auto_Attr_V2_s
174 {
175     //all ISO params and select param
176     int bayernr2DEn;
177     int bayernr3DEn;
178 
179     RK_Bayernr_2D_Params_V2_t st2DParams;
180     RK_Bayernr_3D_Params_V2_t st3DParams;
181     RK_Bayernr_2D_Params_V2_Select_t st2DSelect;
182     RK_Bayernr_3D_Params_V2_Select_t st3DSelect;
183 
184 } Abayernr_Auto_Attr_V2_t;
185 
186 typedef struct Abayernr_ProcResult_V2_s {
187     int bayernr2DEn;
188     int bayernr3DEn;
189 
190     //for sw simultaion
191     //RK_Bayernr_2D_Params_V2_Select_t st2DSelect;
192     //RK_Bayernr_3D_Params_V2_Select_t st3DSelect;
193 
194     //for hw register
195     RK_Bayernr_2D_Fix_V2_t* st2DFix;
196     RK_Bayernr_3D_Fix_V2_t* st3DFix;
197 } Abayernr_ProcResult_V2_t;
198 
199 
200 typedef struct Abayernr_Config_V2_s {
201     Abayernr_State_t eState;
202     Abayernr_OPMode_t eMode;
203 } Abayernr_Config_V2_t;
204 
205 
206 typedef struct rk_aiq_bayernr_attrib_v2_s {
207     Abayernr_OPMode_t eMode;
208     Abayernr_Auto_Attr_V2_t stAuto;
209     Abayernr_Manual_Attr_V2_t stManual;
210 } rk_aiq_bayernr_attrib_v2_t;
211 
212 
213 
214 
215 
216 typedef struct rk_aiq_bayernr_IQPara_V2_s {
217     struct list_head listHead_mode;
218 } rk_aiq_bayernr_IQPara_V2_t;
219 
220 
221 typedef struct rk_aiq_bayernr_JsonPara_V2_s {
222     CalibDbV2_BayerNrV2_t bayernr_v2;
223 } rk_aiq_bayernr_JsonPara_V2_t;
224 
225 
226 //RKAIQ_END_DECLARE
227 
228 #endif
229 
230