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_ABAYERTNRV23_ALGO_INT_H_
21 #define _RK_AIQ_TYPE_ABAYERTNRV23_ALGO_INT_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 "abayertnrV23/rk_aiq_types_abayertnr_algo_v23.h"
29 #include "bayertnr_head_v23.h"
30 #include "bayertnr_uapi_head_v23.h"
31 
32 
33 //RKAIQ_BEGIN_DECLARE
34 
35 #define ABAYERTNRV23_RECALCULATE_DELTA_ISO (10)
36 #define RK_BAYERNR_V23_MAX_ISO_NUM (CALIBDB_MAX_ISO_LEVEL)
37 
38 typedef enum Abayertnr_result_V23_e {
39     ABAYERTNRV23_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
40     ABAYERTNRV23_RET_FAILURE             = 1,   // process failure
41     ABAYERTNRV23_RET_INVALID_PARM        = 2,   // invalid parameter
42     ABAYERTNRV23_RET_WRONG_CONFIG        = 3,   // feature not supported
43     ABAYERTNRV23_RET_BUSY                = 4,   // there's already something going on...
44     ABAYERTNRV23_RET_CANCELED            = 5,   // operation canceled
45     ABAYERTNRV23_RET_OUTOFMEM            = 6,   // out of memory
46     ABAYERTNRV23_RET_OUTOFRANGE          = 7,   // parameter/value out of range
47     ABAYERTNRV23_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
48     ABAYERTNRV23_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
49     ABAYERTNRV23_RET_NO_INPUTIMAGE       = 10   // no input image
50 } Abayertnr_result_V23_t;
51 
52 typedef enum Abayertnr_State_V23_e {
53     ABAYERTNRV23_STATE_INVALID           = 0,                   /**< initialization value */
54     ABAYERTNRV23_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
55     ABAYERTNRV23_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
56     ABAYERTNRV23_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
57     ABAYERTNRV23_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
58     ABAYERTNRV23_STATE_MAX                                      /**< max */
59 } Abayertnr_State_V23_t;
60 
61 typedef enum Abayertnr_OPMode_V23_e {
62     ABAYERTNRV23_OP_MODE_INVALID           = 0,                   /**< initialization value */
63     ABAYERTNRV23_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
64     ABAYERTNRV23_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
65     ABAYERTNRV23_OP_MODE_REG_MANUAL        = 3,
66     ABAYERTNRV23_OP_MODE_MAX                                      /**< max */
67 } Abayertnr_OPMode_V23_t;
68 
69 typedef enum Abayertnr_ParamMode_V23_e {
70     ABAYERTNRV23_PARAM_MODE_INVALID           = 0,
71     ABAYERTNRV23_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
72     ABAYERTNRV23_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
73     ABAYERTNRV23_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
74     ABAYERTNRV23_PARAM_MODE_MAX                                      /**< max */
75 } Abayertnr_ParamMode_V23_t;
76 
77 
78 
79 #if 0
80 typedef struct RK_Bayertnr_Params_V23_Select_s
81 {
82     bool enable;
83 
84     //calib
85     int lumapoint[16];
86     int sigma[16];
87     int lumapoint2[16];
88     int lo_sigma[16];
89     int hi_sigma[16];
90 
91     //tuning
92     uint8_t thumbds_w;
93     uint8_t thumbds_h;
94 
95     bool lo_enable;
96     bool hi_enable;
97     bool lo_med_en;
98     bool lo_gsbay_en;
99     bool lo_gslum_en;
100     bool hi_med_en;
101     bool hi_gslum_en;
102 
103     bool trans_en;
104 
105     bool wgt_use_mode;
106     bool wgt_mge_mode;
107     bool hi_guass;
108     bool kl_guass;
109 
110     bool global_pk_en;
111     int global_pksq;
112 
113     float lo_filter_strength;
114     float hi_filter_strength;
115     float soft_threshold_ratio;
116 
117     float lo_clipwgt;
118     float hi_wgt_comp;
119     int   hidif_th;
120 
121     float lo_filter_rat0;
122     int   lo_filter_thed0;
123 
124     int hi_filter_abs_ctrl;
125     int hi_filter_filt_bay;
126     int hi_filter_filt_avg;
127     int hi_filter_filt_mode;
128 
129     float hi_filter_rat0;
130     int   hi_filter_thed0;
131     float hi_filter_rat1;
132     int   hi_filter_thed1;
133 
134 
135     int   guass_guide_coeff0;
136     int   guass_guide_coeff1;
137     int   guass_guide_coeff2;
138     int   guass_guide_coeff3;
139 
140 } RK_Bayertnr_Params_V23_Select_t;
141 #endif
142 
143 typedef struct RK_Bayertnr_Params_V23_s
144 {
145     bool enable;
146     float iso[RK_BAYERNR_V23_MAX_ISO_NUM];
147     RK_Bayertnr_Params_V23_Select_t bayertnrParamISO[RK_BAYERNR_V23_MAX_ISO_NUM];
148 } RK_Bayertnr_Params_V23_t;
149 
150 typedef struct RK_Bayertnr_Params_V23L_s {
151     bool enable;
152     float iso[RK_BAYERNR_V23_MAX_ISO_NUM];
153     RK_Bayertnr_Param_V23L_Select_t bayertnrParamISO[RK_BAYERNR_V23_MAX_ISO_NUM];
154 } RK_Bayertnr_Params_V23L_t;
155 
156 typedef struct Abayertnr_Manual_Attr_V23_s
157 {
158     RK_Bayertnr_Params_V23_Select_t st3DSelect;
159 
160     RK_Bayertnr_Fix_V23_t st3DFix;
161 } Abayertnr_Manual_Attr_V23_t;
162 
163 typedef struct Abayertnr_Manual_Attr_V23L_s {
164     RK_Bayertnr_Param_V23L_Select_t st3DSelect;
165 
166     RK_Bayertnr_Fix_V23_t st3DFix;
167 } Abayertnr_Manual_Attr_V23L_t;
168 
169 typedef struct Abayertnr_Auto_Attr_V23_s
170 {
171     RK_Bayertnr_Params_V23_t st3DParams;
172     RK_Bayertnr_Params_V23_Select_t st3DSelect;
173 
174 } Abayertnr_Auto_Attr_V23_t;
175 
176 typedef struct Abayertnr_Auto_Attr_V23L_s {
177     RK_Bayertnr_Params_V23L_t st3DParams;
178     RK_Bayertnr_Param_V23L_Select_t st3DSelect;
179 } Abayertnr_Auto_Attr_V23L_t;
180 
181 typedef struct Abayertnr_ProcResult_V23_s {
182     int bayernr3DEn;
183 
184     //for sw simultaion
185 #if (RKAIQ_HAVE_BAYERTNR_V23)
186     //RK_Bayertnr_Params_V23_Select_t st3DSelect;
187 #else
188     //RK_Bayertnr_Param_V23L_Select_t st3DSelect;
189 #endif
190 
191     //for hw register
192     RK_Bayertnr_Fix_V23_t* st3DFix;
193 
194 } Abayertnr_ProcResult_V23_t;
195 
196 
197 typedef struct Abayertnr_Config_V23_s {
198     Abayertnr_State_V23_t eState;
199     Abayertnr_OPMode_V23_t eMode;
200 } Abayertnr_Config_V23_t;
201 
202 
203 typedef struct rk_aiq_bayertnr_attrib_v23_s {
204     rk_aiq_uapi_sync_t sync;
205     Abayertnr_OPMode_V23_t eMode;
206     Abayertnr_Auto_Attr_V23_t stAuto;
207     Abayertnr_Manual_Attr_V23_t stManual;
208 } rk_aiq_bayertnr_attrib_v23_t;
209 
210 typedef struct rk_aiq_bayertnr_attrib_v23L_s {
211     rk_aiq_uapi_sync_t sync;
212     Abayertnr_OPMode_V23_t eMode;
213     Abayertnr_Auto_Attr_V23L_t stAuto;
214     Abayertnr_Manual_Attr_V23L_t stManual;
215 } rk_aiq_bayertnr_attrib_v23L_t;
216 
217 typedef struct rk_aiq_bayertnr_strength_v23_s {
218     rk_aiq_uapi_sync_t sync;
219     float percent;
220     bool strength_enable;
221 } rk_aiq_bayertnr_strength_v23_t;
222 
223 
224 
225 //RKAIQ_END_DECLARE
226 
227 #endif
228 
229