xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/iq_parser_v2/debayer_head.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * debayer_head.h
3  *
4  *  Copyright (c) 2021 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 __CALIBDBV2_DEBAYER_HEAD_H__
21 #define __CALIBDBV2_DEBAYER_HEAD_H__
22 
23 #include <rk_aiq_comm.h>
24 
25 #define DEBAYER_ISO_STEP_MAX 13
26 
27 RKAIQ_BEGIN_DECLARE
28 
29 typedef struct __debayer_array {
30     // M4_ARRAY_DESC("debayer_filter1", "u32", M4_SIZE(1,9),  M4_RANGE(08, 65536), "[50,100,200,400,800,1600,3200,6400,12800]", M4_DIGIT(0), M4_DYNAMIC(0), 0)
31     int ISO[9];
32     // M4_ARRAY_DESC("sharp_strength", "u8", M4_SIZE(1,9),  M4_RANGE(0, 255), "[4,4,4,4,4,4,4,4,4]", M4_DIGIT(0), M4_DYNAMIC(0), 0)
33     unsigned char sharp_strength[9];
34     // M4_ARRAY_DESC("debayer_hf_offset", "u16", M4_SIZE(1,9),  M4_RANGE(0, 255), "[1,1,1,1,1,1,1,1,1]", M4_DIGIT(0), M4_DYNAMIC(0), 0)
35     unsigned short debayer_hf_offset[9];
36 } Debayer_Array_t;
37 
38 typedef struct __Debayer_Param {
39     // M4_BOOL_DESC("debayer_en", "1", 0, M4_HIDE(1))
40     bool debayer_en;
41     // M4_ARRAY_DESC("debayer_filter1", "s8", M4_SIZE(1,5),  M4_RANGE(-128, 128), "[2,-6,0,6,-2]", M4_DIGIT(0), M4_DYNAMIC(0), 0)
42     int debayer_filter1[5];
43     // M4_ARRAY_DESC("debayer_filter2", "s8", M4_SIZE(1,5),  M4_RANGE(-128, 128), "[2,-4,4,-4,2]", M4_DIGIT(0), M4_DYNAMIC(0), 0)
44     int debayer_filter2[5];
45     // M4_NUMBER_DESC("debayer_gain_offset", "u8", M4_RANGE(0,128), "4", M4_DIGIT(0), 0)
46     unsigned char debayer_gain_offset;
47     // M4_NUMBER_DESC("debayer_offset", "u8", M4_RANGE(0,128), "1", M4_DIGIT(0), 0)
48     unsigned char debayer_offset;
49     // M4_BOOL_DESC("debayer_clip_en", "1", 0)
50     bool debayer_clip_en;
51     // M4_BOOL_DESC("debayer_filter_g_en", "1", 0)
52     bool debayer_filter_g_en;
53     // M4_BOOL_DESC("debayer_filter_c_en", "1", 0)
54     bool debayer_filter_c_en;
55     // M4_NUMBER_DESC("debayer_thed0", "u8", M4_RANGE(0,128), "3", M4_DIGIT(0), 0)
56     unsigned char debayer_thed0;
57     // M4_NUMBER_DESC("debayer_thed1", "u8", M4_RANGE(0,128), "6", M4_DIGIT(0), 0)
58     unsigned char debayer_thed1;
59     // M4_NUMBER_DESC("debayer_dist_scale", "u8", M4_RANGE(0,128), "8", M4_DIGIT(0), 0)
60     unsigned char debayer_dist_scale;
61     // M4_NUMBER_DESC("debayer_cnr_strength", "u8", M4_RANGE(0,128), "5", M4_DIGIT(0), 0)
62     unsigned char debayer_cnr_strength;
63     // M4_NUMBER_DESC("debayer_shift_num", "u8", M4_RANGE(0,128), "2", M4_DIGIT(0), 0)
64     unsigned char debayer_shift_num;
65     // M4_ARRAY_TABLE_DESC("ISO_Params", "array_table_ui", "default")
66     Debayer_Array_t array;
67 } Debayer_Param_t;
68 
69 typedef struct __debayer {
70     // M4_STRUCT_DESC("DebayerTuningPara", "normal_ui_style")
71     Debayer_Param_t param;
72 } CalibDbV2_Debayer_t;
73 
74 // TODO: add debayer v2 params
75 
76 typedef struct CalibDbV2_Debayer_GInterp_s {
77 
78     // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0))
79     float iso[DEBAYER_ISO_STEP_MAX];
80 
81     // M4_ARRAY_DESC("debayer_clip_en", "u8", M4_SIZE(1,13),M4_RANGE(0, 1),"0", M4_DIGIT(0), M4_DYNAMIC(0))
82     unsigned char debayer_clip_en[DEBAYER_ISO_STEP_MAX];
83 
84     // M4_ARRAY_DESC("debayer_gain_offset", "u16", M4_SIZE(1,13),M4_RANGE(0,4095), "[1024, 1024,1024, 2047, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095]", M4_DIGIT(0), M4_DYNAMIC(0))
85     unsigned short debayer_gain_offset[DEBAYER_ISO_STEP_MAX];
86 
87     // M4_ARRAY_DESC("debayer_max_ratio", "u8", M4_SIZE(1,13),M4_RANGE(0,63), "[4, 4, 4, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1]", M4_DIGIT(0), M4_DYNAMIC(0))
88     unsigned char debayer_max_ratio[DEBAYER_ISO_STEP_MAX];
89 
90 } CalibDbV2_Debayer_GInterp_t;
91 
92 typedef struct CalibDbV2_Debayer_GDirectWgt_s {
93 
94     // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0))
95     float iso[DEBAYER_ISO_STEP_MAX];
96 
97     // M4_ARRAY_DESC("debayer_hf_offset", "u16",M4_SIZE(1,13), M4_RANGE(0, 65535), "[4096, 4096, 8192, 16384, 32768, 32768, 65535, 65535, 65535, 65535, 65535, 65535, 65535]", M4_DIGIT(0), M4_DYNAMIC(0))
98     unsigned short debayer_hf_offset[DEBAYER_ISO_STEP_MAX];
99 
100     // M4_ARRAY_DESC("debayer_thed0", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "3", M4_DIGIT(0), M4_DYNAMIC(0))
101     unsigned char debayer_thed0[DEBAYER_ISO_STEP_MAX];
102 
103     // M4_ARRAY_DESC("debayer_thed1", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "6", M4_DIGIT(0), M4_DYNAMIC(0))
104     unsigned char debayer_thed1[DEBAYER_ISO_STEP_MAX];
105 
106     // M4_ARRAY_DESC("debayer_dist_scale", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "8", M4_DIGIT(0), M4_DYNAMIC(0))
107     unsigned char debayer_dist_scale[DEBAYER_ISO_STEP_MAX];
108 
109     // M4_ARRAY_DESC("debayer_select_thed", "u8",M4_SIZE(1,13), M4_RANGE(0,255), "13", M4_DIGIT(0), M4_DYNAMIC(0))
110     unsigned char debayer_select_thed[DEBAYER_ISO_STEP_MAX];
111 
112 } CalibDbV2_Debayer_GDirectWgt_t;
113 
114 typedef struct CalibDbV2_Debayer_GFilter_s {
115     // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0))
116     float iso[DEBAYER_ISO_STEP_MAX];
117 
118     // M4_ARRAY_DESC("debayer_gfilter_en", "u8",M4_SIZE(1,13), M4_RANGE(0, 1), "0", M4_DIGIT(0), M4_DYNAMIC(0))
119     unsigned char debayer_gfilter_en[DEBAYER_ISO_STEP_MAX];
120 
121     // M4_ARRAY_DESC("debayer_gfilter_offset", "u16",M4_SIZE(1,13),  M4_RANGE(0,2047), "1", M4_DIGIT(0), M4_DYNAMIC(0))
122     unsigned short debayer_gfilter_offset[DEBAYER_ISO_STEP_MAX];
123 
124 } CalibDbV2_Debayer_GFilter_t;
125 
126 typedef struct CalibDbV2_Debayer_CFilter_s {
127 
128     // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0))
129     float iso[DEBAYER_ISO_STEP_MAX];
130 
131     // M4_ARRAY_DESC("debayer_cfilter_en", "u8",M4_SIZE(1,13),M4_RANGE(0, 1), "1", M4_DIGIT(0), M4_DYNAMIC(0))
132     unsigned char debayer_cfilter_en[DEBAYER_ISO_STEP_MAX];
133 
134     // M4_ARRAY_DESC("debayer_loggd_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "1", M4_DIGIT(0), M4_DYNAMIC(0))
135     unsigned short debayer_loggd_offset[DEBAYER_ISO_STEP_MAX];
136 
137     /* C_FILTER_IIR */
138 
139     // M4_ARRAY_DESC("debayer_cfilter_str", "f32",M4_SIZE(1,13), M4_RANGE(0,1), "0.0313", M4_DIGIT(4), M4_DYNAMIC(0))
140     float  debayer_cfilter_str[DEBAYER_ISO_STEP_MAX];
141 
142     // M4_ARRAY_DESC("debayer_wet_clip", "f32",M4_SIZE(1,13), M4_RANGE(0,15.875), "7.25", M4_DIGIT(2), M4_DYNAMIC(0))
143     float debayer_wet_clip[DEBAYER_ISO_STEP_MAX];
144 
145     // M4_ARRAY_DESC("debayer_wet_ghost", "f32",M4_SIZE(1,13), M4_RANGE(0,0.98), "0.03", M4_DIGIT(2), M4_DYNAMIC(0))
146     float debayer_wet_ghost[DEBAYER_ISO_STEP_MAX];
147 
148     // M4_ARRAY_DESC("debayer_wgtslope", "f32",M4_SIZE(1,13), M4_RANGE(0,31.992), "0.7", M4_DIGIT(3), M4_DYNAMIC(0))
149     float debayer_wgtslope[DEBAYER_ISO_STEP_MAX];
150 
151     /* C_FILTER_BF */
152 
153     // M4_ARRAY_DESC("debayer_bf_sgm", "f32",M4_SIZE(1,13), M4_RANGE(0,1), "0.0266", M4_DIGIT(4), M4_DYNAMIC(0))
154     float debayer_bf_sgm[DEBAYER_ISO_STEP_MAX];
155 
156     // M4_ARRAY_DESC("debayer_bf_clip", "u8",M4_SIZE(1,13), M4_RANGE(0,127), "1", M4_DIGIT(0), M4_DYNAMIC(0))
157     unsigned char  debayer_bf_clip[DEBAYER_ISO_STEP_MAX];
158 
159     // M4_ARRAY_DESC("debayer_bf_curwgt", "u8",M4_SIZE(1,13), M4_RANGE(0,127), "0", M4_DIGIT(0), M4_DYNAMIC(0))
160     unsigned char  debayer_bf_curwgt[DEBAYER_ISO_STEP_MAX];
161 
162     // M4_ARRAY_DESC("debayer_loghf_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,8191), "128", M4_DIGIT(0), M4_DYNAMIC(0))
163     unsigned short debayer_loghf_offset[DEBAYER_ISO_STEP_MAX];
164 
165     /* C_FILTER_ALPHA */
166 
167     // M4_ARRAY_DESC("debayer_alpha_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0))
168     unsigned short debayer_alpha_offset[DEBAYER_ISO_STEP_MAX];
169 
170     // M4_ARRAY_DESC("debayer_alpha_scale", "f32",M4_SIZE(1,13), M4_RANGE(0,1023.999), "1.0", M4_DIGIT(3), M4_DYNAMIC(0))
171     float debayer_alpha_scale[DEBAYER_ISO_STEP_MAX];
172 
173     /* C_FILTER_EDGE */
174     // M4_ARRAY_DESC("debayer_edge_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0))
175     unsigned short debayer_edge_offset[DEBAYER_ISO_STEP_MAX];
176 
177     // M4_ARRAY_DESC("debayer_edge_scale", "f32",M4_SIZE(1,13), M4_RANGE(0,1023.999), "1.0", M4_DIGIT(3), M4_DYNAMIC(0))
178     float debayer_edge_scale[DEBAYER_ISO_STEP_MAX];
179 } CalibDbV2_Debayer_CFilter_t;
180 
181 
182 typedef struct CalibDbV2_Debayer_Tuning_s {
183     // M4_BOOL_DESC("debayer_en", "1")
184     bool debayer_en;
185 
186     // M4_ARRAY_DESC("g_lowfreq_filter1", "s8", M4_SIZE(1,4),  M4_RANGE(-16, 15), "[-2,2,-4,4]", M4_DIGIT(0), M4_DYNAMIC(0))
187     int lowfreq_filter1[4];
188 
189     // M4_ARRAY_DESC("g_highfreq_filter2", "s8", M4_SIZE(1,4),  M4_RANGE(-16, 15), "[-1,2,-2,4]", M4_DIGIT(0), M4_DYNAMIC(0))
190     int  highfreq_filter2[4];
191 
192     // M4_ARRAY_DESC("c_alpha_gaus_coe", "s8", M4_SIZE(1,3),  M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0))
193     int  c_alpha_gaus_coe[3];
194 
195     // M4_ARRAY_DESC("c_guid_gaus_coe", "s8", M4_SIZE(1,3),  M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0))
196     int  c_guid_gaus_coe[3];
197 
198     // M4_ARRAY_DESC("c_ce_gaus_coe", "s8", M4_SIZE(1,3),  M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0))
199     int  c_ce_gaus_coe[3];
200 
201     // M4_ARRAY_TABLE_DESC("g_interp", "array_table_ui", M4_INDEX_DEFAULT)
202     CalibDbV2_Debayer_GInterp_t g_interp;
203 
204     // M4_ARRAY_TABLE_DESC("g_drctwgt", "array_table_ui", M4_INDEX_DEFAULT)
205     CalibDbV2_Debayer_GDirectWgt_t g_drctwgt;
206 
207     // M4_ARRAY_TABLE_DESC("g_fliter", "array_table_ui", M4_INDEX_DEFAULT)
208     CalibDbV2_Debayer_GFilter_t g_filter;
209 
210     // M4_ARRAY_TABLE_DESC("c_fliter", "array_table_ui", M4_INDEX_DEFAULT)
211     CalibDbV2_Debayer_CFilter_t c_filter;
212 
213 } CalibDbV2_Debayer_Tuning_t;
214 
215 typedef struct CalibDbV2_Debayer_v2_s {
216     // M4_STRUCT_DESC("TuningPara", "normal_ui_style")
217     CalibDbV2_Debayer_Tuning_t param;
218 } CalibDbV2_Debayer_v2_t;
219 
220 // TODO: add debayer v2-lite params
221 
222 typedef struct CalibDbV2_Debayer_Tuning_Lite_s {
223     // M4_BOOL_DESC("debayer_en", "1")
224     bool debayer_en;
225 
226     // M4_ARRAY_DESC("g_lowfreq_filter1", "s8", M4_SIZE(1,4),  M4_RANGE(-16, 15), "[-2,2,-4,4]", M4_DIGIT(0), M4_DYNAMIC(0))
227     int lowfreq_filter1[4];
228 
229     // M4_ARRAY_DESC("g_highfreq_filter2", "s8", M4_SIZE(1,4),  M4_RANGE(-16, 15), "[-1,2,-2,4]", M4_DIGIT(0), M4_DYNAMIC(0))
230     int  highfreq_filter2[4];
231 
232     // M4_ARRAY_TABLE_DESC("g_interp", "array_table_ui", M4_INDEX_DEFAULT)
233     CalibDbV2_Debayer_GInterp_t g_interp;
234 
235     // M4_ARRAY_TABLE_DESC("g_drctwgt", "array_table_ui", M4_INDEX_DEFAULT)
236     CalibDbV2_Debayer_GDirectWgt_t g_drctwgt;
237 
238     // M4_ARRAY_TABLE_DESC("g_fliter", "array_table_ui", M4_INDEX_DEFAULT)
239     CalibDbV2_Debayer_GFilter_t g_filter;
240 
241 } CalibDbV2_Debayer_Tuning_Lite_t;
242 
243 typedef struct CalibDbV2_Debayer_v2_lite_s {
244     // M4_STRUCT_DESC("TuningPara", "normal_ui_style")
245     CalibDbV2_Debayer_Tuning_Lite_t param;
246 } CalibDbV2_Debayer_v2_lite_t;
247 
248 
249 RKAIQ_END_DECLARE
250 
251 #endif
252