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_ASHARP_ALGO_INT_V3_H_
21 #define _RK_AIQ_TYPE_ASHARP_ALGO_INT_V3_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 "asharp3/rk_aiq_types_asharp_algo_v3.h"
29 #include "sharp_head_v3.h"
30 
31 
32 RKAIQ_BEGIN_DECLARE
33 #define ASHARPV3_RECALCULATE_DELTA_ISO        (10)
34 #define RK_SHARP_V3_PBF_DIAM                    3
35 #define RK_SHARP_V3_RF_DIAM                     3
36 #define RK_SHARP_V3_BF_DIAM                     3
37 #define RK_SHARP_V3_AVG_DIAM                    3
38 
39 #define RK_SHARP_V3_HF_DIAM                     3
40 #define RK_SHARP_V3_MF_DIAM                     5
41 #define RK_SHARP_V3_LF_DIAM                     9
42 #define RK_SHARP_V3_WGT_FILTER_DIAM             5
43 
44 #define rk_sharp_V3_sharp_ratio_fix_bits        2
45 #define rk_sharp_V3_gaus_ratio_fix_bits         7
46 #define rk_sharp_V3_bf_ratio_fix_bits           7
47 #define rk_sharp_V3_pbfCoeff_fix_bits           7
48 #define rk_sharp_V3_rfCoeff_fix_bits            7
49 #define rk_sharp_V3_hbfCoeff_fix_bits           7
50 
51 #define INTERP_V3(x0, x1, ratio)            ((ratio) * ((x1) - (x0)) + x0)
52 #define CLIP(a, min_v, max_v)               (((a) < (min_v)) ? (min_v) : (((a) > (max_v)) ? (max_v) : (a)))
53 
54 
55 #if 1
56 typedef enum Asharp3_result_e {
57     ASHARP3_RET_SUCCESS             = 0,   // this has to be 0, if clauses rely on it
58     ASHARP3_RET_FAILURE             = 1,   // process failure
59     ASHARP3_RET_INVALID_PARM        = 2,   // invalid parameter
60     ASHARP3_RET_WRONG_CONFIG        = 3,   // feature not supported
61     ASHARP3_RET_BUSY                = 4,   // there's already something going on...
62     ASHARP3_RET_CANCELED            = 5,   // operation canceled
63     ASHARP3_RET_OUTOFMEM            = 6,   // out of memory
64     ASHARP3_RET_OUTOFRANGE          = 7,   // parameter/value out of range
65     ASHARP3_RET_NULL_POINTER        = 8,   // the/one/all parameter(s) is a(are) NULL pointer(s)
66     ASHARP3_RET_DIVISION_BY_ZERO    = 9,   // a divisor equals ZERO
67     ASHARP3_RET_NO_INPUTIMAGE       = 10   // no input image
68 } Asharp3_result_t;
69 
70 typedef enum Asharp3_State_e {
71     ASHARP3_STATE_INVALID           = 0,                   /**< initialization value */
72     ASHARP3_STATE_INITIALIZED       = 1,                   /**< instance is created, but not initialized */
73     ASHARP3_STATE_STOPPED           = 2,                   /**< instance is confiured (ready to start) or stopped */
74     ASHARP3_STATE_RUNNING           = 3,                   /**< instance is running (processes frames) */
75     ASHARP3_STATE_LOCKED            = 4,                   /**< instance is locked (for taking snapshots) */
76     ASHARP3_STATE_MAX                                      /**< max */
77 } Asharp3_State_t;
78 
79 typedef enum Asharp3_OPMode_e {
80     ASHARP3_OP_MODE_INVALID           = 0,                   /**< initialization value */
81     ASHARP3_OP_MODE_AUTO              = 1,                   /**< instance is created, but not initialized */
82     ASHARP3_OP_MODE_MANUAL            = 2,                   /**< instance is confiured (ready to start) or stopped */
83     ASHARP3_OP_MODE_MAX                                      /**< max */
84 } Asharp3_OPMode_t;
85 
86 typedef enum Asharp3_ParamMode_e {
87     ASHARP3_PARAM_MODE_INVALID           = 0,
88     ASHARP3_PARAM_MODE_NORMAL          = 1,                   /**< initialization value */
89     ASHARP3_PARAM_MODE_HDR              = 2,                   /**< instance is created, but not initialized */
90     ASHARP3_PARAM_MODE_GRAY            = 3,                   /**< instance is confiured (ready to start) or stopped */
91     ASHARP3_PARAM_MODE_MAX                                      /**< max */
92 } Asharp3_ParamMode_t;
93 
94 #endif
95 
96 typedef struct Asharp3_ExpInfo_s {
97     int hdr_mode;
98     float arTime[3];
99     float arAGain[3];
100     float arDGain[3];
101     int   arIso[3];
102     int   snr_mode;
103     int rawWidth;
104     int rawHeight;
105 } Asharp3_ExpInfo_t;
106 
107 
108 typedef struct RK_SHARP_Params_V3_s
109 {
110     int enable;
111 
112     int iso[RK_SHARP_V3_MAX_ISO_NUM];
113     short luma_point        [RK_SHARP_V3_LUMA_POINT_NUM];
114     short luma_sigma        [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
115     float pbf_gain          [RK_SHARP_V3_MAX_ISO_NUM];
116     float pbf_add           [RK_SHARP_V3_MAX_ISO_NUM];
117     float pbf_ratio         [RK_SHARP_V3_MAX_ISO_NUM];
118     float gaus_ratio        [RK_SHARP_V3_MAX_ISO_NUM];
119     float sharp_ratio       [RK_SHARP_V3_MAX_ISO_NUM];
120     short lum_clip_h        [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
121     float bf_gain           [RK_SHARP_V3_MAX_ISO_NUM];
122     float bf_add            [RK_SHARP_V3_MAX_ISO_NUM];
123     float bf_ratio          [RK_SHARP_V3_MAX_ISO_NUM];
124     short ehf_th            [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
125 
126     float kernel_pre_bila_filter[RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_PBF_DIAM * RK_SHARP_V3_PBF_DIAM];
127     float kernel_range_filter   [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_RF_DIAM * RK_SHARP_V3_RF_DIAM];
128     float kernel_bila_filter    [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_BF_DIAM * RK_SHARP_V3_BF_DIAM];
129 
130 #if 1
131     //////////////////////////////////////////////////////////////////////////
132     // test params
133     float sharp_ratio_h     [RK_SHARP_V3_MAX_ISO_NUM];
134     float sharp_ratio_m     [RK_SHARP_V3_MAX_ISO_NUM];
135     float sharp_ratio_l     [RK_SHARP_V3_MAX_ISO_NUM];
136     short clip_hf           [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
137     short clip_mf           [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
138     short clip_lf           [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
139     short local_wgt         [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM];
140 
141     short kernel_hf_filter  [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_HF_DIAM * RK_SHARP_V3_HF_DIAM];
142     short kernel_mf_filter  [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_MF_DIAM * RK_SHARP_V3_MF_DIAM];
143     short kernel_lf_filter  [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LF_DIAM * RK_SHARP_V3_LF_DIAM];
144 #endif
145 
146 } RK_SHARP_Params_V3_t;
147 
148 typedef struct RK_SHARP_Params_V3_Select_s
149 {
150     int enable;
151 
152     short luma_point    [RK_SHARP_V3_LUMA_POINT_NUM];
153     short luma_sigma    [RK_SHARP_V3_LUMA_POINT_NUM];
154     float pbf_gain      ;
155     float pbf_add       ;
156     float pbf_ratio     ;
157     float gaus_ratio    ;
158     float sharp_ratio   ;
159     short lum_clip_h    [RK_SHARP_V3_LUMA_POINT_NUM];
160     float bf_gain       ;
161     float bf_add        ;
162     float bf_ratio      ;
163     short ehf_th        [RK_SHARP_V3_LUMA_POINT_NUM];
164 
165     float kernel_pre_bila_filter[RK_SHARP_V3_PBF_DIAM * RK_SHARP_V3_PBF_DIAM];
166     float kernel_range_filter   [RK_SHARP_V3_RF_DIAM * RK_SHARP_V3_RF_DIAM];
167     float kernel_bila_filter    [RK_SHARP_V3_BF_DIAM * RK_SHARP_V3_BF_DIAM];
168 
169 #if 1
170     //////////////////////////////////////////////////////////////////////////
171     // test params
172     float sharp_ratio_h     ;
173     float sharp_ratio_m     ;
174     float sharp_ratio_l     ;
175     short clip_hf           [RK_SHARP_V3_LUMA_POINT_NUM];
176     short clip_mf           [RK_SHARP_V3_LUMA_POINT_NUM];
177     short clip_lf           [RK_SHARP_V3_LUMA_POINT_NUM];
178     short local_wgt         [RK_SHARP_V3_LUMA_POINT_NUM];
179 
180     short kernel_hf_filter  [RK_SHARP_V3_HF_DIAM * RK_SHARP_V3_HF_DIAM];
181     short kernel_mf_filter  [RK_SHARP_V3_MF_DIAM * RK_SHARP_V3_MF_DIAM];
182     short kernel_lf_filter  [RK_SHARP_V3_LF_DIAM * RK_SHARP_V3_LF_DIAM];
183 #endif
184 
185 } RK_SHARP_Params_V3_Select_t;
186 
187 
188 typedef struct Asharp_Manual_Attr_V3_s
189 {
190     RK_SHARP_Params_V3_Select_t stSelect;
191 
192 } Asharp_Manual_Attr_V3_t;
193 
194 typedef struct Asharp_Auto_Attr_V3_s
195 {
196     //all ISO params and select param
197 
198     RK_SHARP_Params_V3_t stParams;
199     RK_SHARP_Params_V3_Select_t stSelect;
200 
201 } Asharp_Auto_Attr_V3_t;
202 
203 typedef struct Asharp_ProcResult_V3_s {
204     int sharpEn;
205 
206     //for sw simultaion
207     //RK_SHARP_Params_V3_Select_t stSelect;
208 
209     //for hw register
210     RK_SHARP_Fix_V3_t* stFix;
211 } Asharp_ProcResult_V3_t;
212 
213 
214 typedef struct Asharp_Config_V3_s {
215     Asharp3_State_t eState;
216     Asharp3_OPMode_t eMode;
217     int rawHeight;
218     int rawWidth;
219 } Asharp_Config_V3_t;
220 
221 
222 typedef struct rk_aiq_sharp_attrib_v3_s {
223     Asharp3_OPMode_t eMode;
224     Asharp_Auto_Attr_V3_t stAuto;
225     Asharp_Manual_Attr_V3_t stManual;
226 } rk_aiq_sharp_attrib_v3_t;
227 
228 
229 typedef struct rk_aiq_sharp_IQPara_V3_s {
230     struct list_head* listHead;
231 } rk_aiq_sharp_IQPara_V3_t;
232 
233 
234 //calibdb
235 
236 
237 RKAIQ_END_DECLARE
238 
239 #endif
240 
241