1
2
3 #include "rk_aiq_abayertnr_algo_bayertnr_v2.h"
4
5
6 RKAIQ_BEGIN_DECLARE
7
bayertnr_select_params_by_ISO_V2(RK_Bayertnr_Params_V2_t * pParams,RK_Bayertnr_Params_V2_Select_t * pSelect,Abayertnr_ExpInfo_V2_t * pExpInfo)8 Abayertnr_result_V2_t bayertnr_select_params_by_ISO_V2(RK_Bayertnr_Params_V2_t *pParams, RK_Bayertnr_Params_V2_Select_t *pSelect, Abayertnr_ExpInfo_V2_t *pExpInfo)
9 {
10 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
11 int iso = 50;
12
13 if(pParams == NULL) {
14 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
15 return ABAYERTNRV2_RET_NULL_POINTER;
16 }
17
18 if(pSelect == NULL) {
19 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
20 return ABAYERTNRV2_RET_NULL_POINTER;
21 }
22
23 if(pExpInfo == NULL) {
24 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
25 return ABAYERTNRV2_RET_NULL_POINTER;
26 }
27
28 iso = pExpInfo->arIso[pExpInfo->hdr_mode];
29
30 LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso);
31
32 int isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM];
33 int isoGain = MAX(int(iso / 50), 1);
34 int isoGainLow = 0;
35 int isoGainHig = 0;
36 int isoGainCorrect = 1;
37 int isoLevelLow = 0;
38 int isoLevelHig = 0;
39 int isoLevelCorrect = 0;
40 int i, j;
41 float tmpf;
42
43 #ifndef RK_SIMULATOR_HW
44 for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
45 isoGainStd[i] = pParams->iso[i] / 50;
46 }
47 #else
48 for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
49 isoGainStd[i] = 1 * (1 << i);
50 }
51 #endif
52
53 for (i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM - 1; i++) {
54 if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1]) {
55 isoGainLow = isoGainStd[i];
56 isoGainHig = isoGainStd[i + 1];
57 isoLevelLow = i;
58 isoLevelHig = i + 1;
59 isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
60 isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
61 break;
62 }
63 }
64
65 if(iso > pParams->iso[RK_BAYERNR_V2_MAX_ISO_NUM - 1]) {
66 isoGainLow = isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM - 2];
67 isoGainHig = isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM - 1];
68 isoLevelLow = RK_BAYERNR_V2_MAX_ISO_NUM - 2;
69 isoLevelHig = RK_BAYERNR_V2_MAX_ISO_NUM - 1;
70 isoGainCorrect = isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM - 1];
71 isoLevelCorrect = RK_BAYERNR_V2_MAX_ISO_NUM - 1;
72 }
73
74 if(iso < pParams->iso[0]) {
75 isoGainLow = isoGainStd[0];
76 isoGainHig = isoGainStd[1];
77 isoLevelLow = 0;
78 isoLevelHig = 1;
79 isoGainCorrect = isoGainStd[0];
80 isoLevelCorrect = 0;
81 }
82
83 pExpInfo->isoHigh = pParams->iso[isoLevelHig];
84 pExpInfo->isoLow = pParams->iso[isoLevelLow];
85
86
87 LOGD_ANR("%s:%d iso:%d high:%d low:%d\n",
88 __FUNCTION__, __LINE__,
89 isoGain, isoGainHig, isoGainLow);
90
91 pSelect->enable = pParams->enable;
92
93 pSelect->lo_filter_strength =
94 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_filter_strength[isoLevelLow]
95 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_filter_strength[isoLevelHig];
96
97 pSelect->hi_filter_strength =
98 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_filter_strength[isoLevelLow]
99 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_filter_strength[isoLevelHig];
100
101 pSelect->soft_threshold_ratio =
102 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->soft_threshold_ratio[isoLevelLow]
103 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->soft_threshold_ratio[isoLevelHig];
104
105
106 tmpf =
107 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->thumbds[isoLevelLow]
108 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->thumbds[isoLevelHig];
109 pSelect->thumbds = ((int)tmpf) & (~0x7);
110
111 tmpf =
112 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_enable[isoLevelLow]
113 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_enable[isoLevelHig];
114 pSelect->lo_enable = (tmpf) > 0.5;
115
116 tmpf =
117 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_enable[isoLevelLow]
118 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_enable[isoLevelHig];
119 pSelect->hi_enable = (tmpf) > 0.5;
120
121
122 for (i = 0; i < 16; i++)
123 {
124 pSelect->lumapoint[i] = pParams->lumapoint[i];
125 pSelect->sigma[i] =
126 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->sigma[isoLevelLow][i]
127 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->sigma[isoLevelHig][i];
128 }
129
130 for (i = 0; i < 16; i++)
131 {
132 pSelect->lumapoint2[i] = pParams->lumapoint2[i];
133 pSelect->lo_sigma[i] =
134 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_sigma[isoLevelLow][i]
135 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_sigma[isoLevelHig][i];
136 pSelect->hi_sigma[i] =
137 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_sigma[isoLevelLow][i]
138 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_sigma[isoLevelHig][i];
139 }
140
141
142 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_enable[isoLevelLow]
143 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_enable[isoLevelHig];
144 pSelect->lo_enable = (tmpf) > 0.5;
145
146 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_enable[isoLevelLow]
147 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_enable[isoLevelHig];
148 pSelect->hi_enable = (tmpf) > 0.5;
149
150 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_med_en[isoLevelLow]
151 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_med_en[isoLevelHig];
152 pSelect->lo_med_en = (tmpf) > 0.5;
153
154 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_gsbay_en[isoLevelLow]
155 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_gsbay_en[isoLevelHig];
156 pSelect->lo_gsbay_en = (tmpf) > 0.5;
157
158 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->lo_gslum_en[isoLevelLow]
159 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->lo_gslum_en[isoLevelHig];
160 pSelect->lo_gslum_en = (tmpf) > 0.5;
161
162 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_med_en[isoLevelLow]
163 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_med_en[isoLevelHig];
164 pSelect->hi_med_en = (tmpf) > 0.5;
165
166 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hi_gslum_en[isoLevelLow]
167 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hi_gslum_en[isoLevelHig];
168 pSelect->hi_gslum_en = (tmpf) > 0.5;
169
170 pSelect->hi_wgt_comp = (isoGain - isoGainLow) <= (isoGainHig - isoGain) ? pParams->hi_wgt_comp[isoLevelLow] : pParams->hi_wgt_comp[isoLevelHig];
171 pSelect->clipwgt = (isoGain - isoGainLow) <= (isoGainHig - isoGain) ? pParams->clipwgt[isoLevelLow] : pParams->clipwgt[isoLevelHig];
172
173 pSelect->global_pk_en = (isoGain - isoGainLow) <= (isoGainHig - isoGain) ? pParams->global_pk_en[isoLevelLow] : pParams->global_pk_en[isoLevelHig];
174 pSelect->global_pksq = (isoGain - isoGainLow) <= (isoGainHig - isoGain) ? pParams->global_pksq[isoLevelLow] : pParams->global_pksq[isoLevelHig];
175
176
177 pSelect->hidif_th =
178 float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hidif_th[isoLevelLow]
179 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hidif_th[isoLevelHig];
180
181
182 return res;
183 }
184
185
bayertnr_get_trans_V2(int tmpfix)186 unsigned short bayertnr_get_trans_V2(int tmpfix)
187 {
188 int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440,
189 13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710,
190 26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346,
191 38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704,
192 48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040,
193 57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536
194 };
195 int logprecision = 6;
196 int logfixbit = 16;
197 int logtblbit = 16;
198 int logscalebit = 12;
199 int logfixmul = (1 << logfixbit);
200 long long x8, one = 1;
201 long long gx, n = 0, ix1, ix2, dp;
202 long long lt1, lt2, dx, fx;
203 int i, j = 1;
204
205 x8 = tmpfix + (1 << 8);
206 // find highest bit
207 for (i = 0; i < 32; i++)
208 {
209 if (x8 & j)
210 {
211 n = i;
212 }
213 j = j << 1;
214 }
215
216 gx = x8 - (one << n);
217 gx = gx * (one << logprecision) * logfixmul;
218 gx = gx / (one << n);
219
220 ix1 = gx >> logfixbit;
221 dp = gx - ix1 * logfixmul;
222
223 ix2 = ix1 + 1;
224
225 lt1 = logtablef[ix1];
226 lt2 = logtablef[ix2];
227
228 dx = lt1 * (logfixmul - dp) + lt2 * dp;
229
230 fx = dx + (n - 8) * (one << (logfixbit + logtblbit));
231 fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1));
232 fx = fx >> (logfixbit + logtblbit - logscalebit);
233
234 return fx;
235 }
236
bayertnr_fix_transfer_V2(RK_Bayertnr_Params_V2_Select_t * pSelect,RK_Bayertnr_Fix_V2_t * pFix,rk_aiq_bayertnr_strength_v2_t * pStrength,Abayertnr_ExpInfo_V2_t * pExpInfo)237 Abayertnr_result_V2_t bayertnr_fix_transfer_V2(RK_Bayertnr_Params_V2_Select_t* pSelect, RK_Bayertnr_Fix_V2_t *pFix, rk_aiq_bayertnr_strength_v2_t *pStrength, Abayertnr_ExpInfo_V2_t *pExpInfo)
238 {
239 int i = 0;
240 int tmp;
241
242 if(pSelect == NULL) {
243 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
244 return ABAYERTNRV2_RET_NULL_POINTER;
245 }
246
247 if(pFix == NULL) {
248 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
249 return ABAYERTNRV2_RET_NULL_POINTER;
250 }
251
252 if(pStrength == NULL) {
253 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
254 return ABAYERTNRV2_RET_NULL_POINTER;
255 }
256
257 if(pExpInfo == NULL) {
258 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
259 return ABAYERTNRV2_RET_NULL_POINTER;
260 }
261
262 float fStrength = 1.0;
263
264 if(pStrength->strength_enable) {
265 fStrength = pStrength->percent;
266 }
267
268 if(fStrength <= 0.0f) {
269 fStrength = 0.000001;
270 }
271 LOGD_ANR("strength_enable:%d, percent:%f fStrength:%f\n",
272 pStrength->strength_enable, pStrength->percent, fStrength);
273
274 // BAY3D_BAY3D_CTRL 0x2c00
275 pFix->bay3d_soft_st = 0;
276 pFix->bay3d_soft_mode = 0;
277 pFix->bay3d_bwsaving_en = 0;
278 pFix->bay3d_loswitch_protect = 0;
279 pFix->bay3d_glbpk_en = 0;//pSelect->global_pk_en;
280 pFix->bay3d_logaus3_bypass_en = !pSelect->lo_gslum_en;
281 pFix->bay3d_logaus5_bypass_en = !pSelect->lo_gsbay_en;
282 pFix->bay3d_lomed_bypass_en = !pSelect->lo_med_en;
283 pFix->bay3d_hichnsplit_en = pSelect->lo_enable == 0;
284 pFix->bay3d_hiabs_pssel = pSelect->lo_enable == 0;
285 pFix->bay3d_higaus_bypass_en = !pSelect->hi_gslum_en;
286 pFix->bay3d_himed_bypass_en = !pSelect->hi_med_en;
287 pFix->bay3d_lobypass_en = !pSelect->lo_enable;
288 pFix->bay3d_hibypass_en = !pSelect->hi_enable;
289 pFix->bay3d_bypass_en = !pSelect->enable;
290 pFix->bay3d_en_i = pSelect->enable;
291
292 // BAY3D_BAY3D_KALRATIO 0x2c04
293
294 tmp = (int)(pSelect->soft_threshold_ratio * (1 << 10) );
295 pFix->bay3d_softwgt = CLIP(tmp, 0, 0x3ff);
296 tmp = (int)pSelect->hidif_th;
297 pFix->bay3d_hidif_th = CLIP(tmp, 0, 0xffff);
298
299 // BAY3D_BAY3D_GLBPK2 0x2c08
300 tmp = pSelect->global_pksq;
301 pFix->bay3d_glbpk2 = CLIP(tmp, 0, 0xfffffff);
302
303 // BAY3D_BAY3D_WGTLMT 0x2c10
304 tmp = (int)(((float)1 - pSelect->clipwgt) * (1 << FIXTNRWGT));
305 pFix->bay3d_wgtlmt = CLIP(tmp, 0, 0x3ff);
306 tmp = pSelect->hi_enable ? (int)(pSelect->hi_wgt_comp * (1 << 10)) : 0;
307 pFix->bay3d_wgtratio = CLIP(tmp, 0, 0x3ff);
308
309
310 for(int i = 0; i < 16; i++) {
311 // BAY3D_BAY3D_SIG_X0 0x2c14 - 0x2c30
312 //no need transfer to log domain
313 //tmp = bayertnr_get_trans_V2(pSelect->bayertnrv2_tnr_luma_point[i]);
314 tmp = pSelect->lumapoint[i];
315 pFix->bay3d_sig0_x[i] = CLIP(tmp, 0, 0xffff);
316
317 // BAY3D_BAY3D_SIG0_Y0 0x2c34 - 0x2c50
318 tmp = pSelect->sigma[i];
319 pFix->bay3d_sig0_y[i] = CLIP(tmp, 0, 0x3fff);
320
321 // BAY3D_BAY3D_SIG_X0 0x2c54 - 0x2c70
322 tmp = pSelect->lumapoint2[i];
323 pFix->bay3d_sig1_x[i] = CLIP(tmp, 0, 0xffff);
324
325 // BAY3D_BAY3D_SIG1_Y0 0x2c74 - 0x2c90
326 tmp = pSelect->hi_sigma[i] * pSelect->hi_filter_strength * fStrength;
327 pFix->bay3d_sig1_y[i] = CLIP(tmp, 0, (1 << 14) - 1);
328
329 // BAY3D_BAY3D_SIG2_Y0 0x2c94 - 0x2cb0
330 tmp = pSelect->lo_sigma[i] * pSelect->lo_filter_strength * fStrength;
331 pFix->bay3d_sig2_y[i] = CLIP(tmp, 0, (1 << 10) - 1);
332 }
333
334 //BAY3D_BAY3D_LODIF_STAT0 0x2cb4 -0x2cb8
335 //pFix->ro_sum_lodif = ;
336
337 //BAY3D_BAY3D_LODIF_STAT0 0x2cbc -0x2cc0
338 //pFix->ro_sum_hidif0;
339
340 //BAY3D_BAY3D_MI_ST 0x2CC8
341 //pFix->sw_bay3dmi_st_linemode;
342 //pFix->sw_bay3d_mi2cur_linecnt;
343
344 bayertnr_fix_printf_V2(pFix);
345
346 return ABAYERTNRV2_RET_SUCCESS;
347 }
348
349
bayertnr_fix_printf_V2(RK_Bayertnr_Fix_V2_t * pFix)350 Abayertnr_result_V2_t bayertnr_fix_printf_V2(RK_Bayertnr_Fix_V2_t * pFix)
351 {
352 //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
353 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
354
355 if(pFix == NULL) {
356 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
357 return ABAYERTNRV2_RET_NULL_POINTER;
358 }
359
360 LOGD_ANR("%s:(%d) ############# bayertnr enter######################## \n", __FUNCTION__, __LINE__);
361
362
363 // BAY3D_BAY3D_CTRL (0x002c00)
364 LOGD_ANR("(0x2c00) soft_st:0x%x soft_mode:0x%x bwsaving_en:0x%x loswitch_protect:0x%x glbpk_en:0x%x\n",
365 pFix->bay3d_soft_st,
366 pFix->bay3d_soft_mode,
367 pFix->bay3d_bwsaving_en,
368 pFix->bay3d_loswitch_protect,
369 pFix->bay3d_glbpk_en);
370
371 LOGD_ANR("(0x2c00) logaus3_bypass_en:0x%x logaus5_bypass_en:0x%x lomed_bypass_en:0x%x hichnsplit_en:0x%x glbpk_en:0x%x\n",
372 pFix->bay3d_logaus3_bypass_en,
373 pFix->bay3d_logaus5_bypass_en,
374 pFix->bay3d_lomed_bypass_en,
375 pFix->bay3d_hichnsplit_en,
376 pFix->bay3d_hiabs_pssel);
377
378 LOGD_ANR("(0x2c00) higaus_bypass_en:0x%x himed_bypass_en:0x%x lobypass_en,:0x%x hibypass_en:0x%x bypass_en:0x%x en:0x%x\n",
379 pFix->bay3d_higaus_bypass_en,
380 pFix->bay3d_himed_bypass_en,
381 pFix->bay3d_lobypass_en,
382 pFix->bay3d_hibypass_en,
383 pFix->bay3d_bypass_en,
384 pFix->bay3d_en_i);
385
386 // BAY3D_BAY3D_KALRATIO 0x2c04
387 LOGD_ANR("(0x2c04) bay3d_softwgt:0x%x bay3d_hidif_th:0x%x \n",
388 pFix->bay3d_softwgt,
389 pFix->bay3d_hidif_th);
390
391 // BAY3D_BAY3D_GLBPK2 0x2c08
392 LOGD_ANR("(0x2c08) bay3d_glbpk2:0x%x \n",
393 pFix->bay3d_glbpk2);
394
395 // BAY3D_BAY3D_WGTLMT 0x2c10
396 LOGD_ANR("(0x2c10) bay3d_wgtlmt:0x%x bay3d_wgtratio:0x%x \n",
397 pFix->bay3d_wgtlmt,
398 pFix->bay3d_wgtratio);
399
400 // BAY3D_BAY3D_SIG_X0 0x2c14 - 0x2c30
401 for(int i = 0; i < 16; i++) {
402 LOGD_ANR("(0x2c14 - 0x2c30) bay3d_sig0_x[%d]:0x%x \n",
403 i, pFix->bay3d_sig0_x[i]);
404 }
405
406 // BAY3D_BAY3D_SIG0_Y0 0x2c34 - 0x2c50
407 for(int i = 0; i < 16; i++) {
408 LOGD_ANR("(0x2c34 - 0x2c50) bay3d_sig0_y[%d]:0x%x \n",
409 i, pFix->bay3d_sig0_y[i]);
410 }
411
412 // BAY3D_BAY3D_SIG_X0 0x2c54 - 0x2c70
413 for(int i = 0; i < 16; i++) {
414 LOGD_ANR("(0x2c54 - 0x2c70) bay3d_sig1_x[%d]:0x%x \n",
415 i, pFix->bay3d_sig1_x[i]);
416 }
417
418 // // BAY3D_BAY3D_SIG1_Y0 0x2c74 - 0x2c90
419 for(int i = 0; i < 16; i++) {
420 LOGD_ANR("(0x2c74 - 0x2c90) bay3d_sig1_y[%d]:0x%x \n",
421 i, pFix->bay3d_sig1_y[i]);
422 }
423
424 // BAY3D_BAY3D_SIG2_Y0 0x2c94 - 0x2cb0
425 for(int i = 0; i < 16; i++) {
426 LOGD_ANR("(0x2c94 - 0x2cb0) bay3d_sig2_y[%d]:0x%x \n",
427 i, pFix->bay3d_sig2_y[i]);
428 }
429
430 LOGD_ANR("%s:(%d) ############# bayertnr exit ######################## \n", __FUNCTION__, __LINE__);
431 return res;
432 }
433
434
435
bayertnr_get_setting_by_name_json_V2(CalibDbV2_BayerTnrV2_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)436 Abayertnr_result_V2_t bayertnr_get_setting_by_name_json_V2(CalibDbV2_BayerTnrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx)
437 {
438 int i = 0;
439 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
440
441 if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) {
442 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
443 return ABAYERTNRV2_RET_NULL_POINTER;
444 }
445
446 for(i = 0; i < pCalibdb->TuningPara.Setting_len; i++) {
447 if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
448 break;
449 }
450 }
451
452 if(i < pCalibdb->TuningPara.Setting_len) {
453 *tuning_idx = i;
454 } else {
455 *tuning_idx = 0;
456 }
457
458 for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
459 if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
460 break;
461 }
462 }
463
464 if(i < pCalibdb->CalibPara.Setting_len) {
465 *calib_idx = i;
466 } else {
467 *calib_idx = 0;
468 }
469
470 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
471 return res;
472
473
474 }
475
476
bayertnr_init_params_json_V2(RK_Bayertnr_Params_V2_t * pParams,CalibDbV2_BayerTnrV2_t * pCalibdb,int calib_idx,int tuning_idx)477 Abayertnr_result_V2_t bayertnr_init_params_json_V2(RK_Bayertnr_Params_V2_t *pParams, CalibDbV2_BayerTnrV2_t* pCalibdb, int calib_idx, int tuning_idx)
478 {
479 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
480 CalibDbV2_BayerTnrV2_C_ISO_t *pCalibIso = NULL;
481 CalibDbV2_BayerTnrV2_T_ISO_t *pTuningIso = NULL;
482
483 LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
484 if(pParams == NULL || pCalibdb == NULL) {
485 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
486 return ABAYERTNRV2_RET_NULL_POINTER;
487 }
488
489 pParams->enable = pCalibdb->TuningPara.enable;
490 for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
491 pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i];
492 pParams->iso[i] = pCalibIso->iso;
493 for(int k = 0; k < 16; k++) {
494 pParams->lumapoint[k] = pCalibIso->lumapoint[k];
495 pParams->sigma[i][k] = pCalibIso->sigma[k];
496 pParams->lumapoint2[k] = pCalibIso->lumapoint2[k];
497 pParams->lo_sigma[i][k] = pCalibIso->lo_sigma[k];
498 pParams->hi_sigma[i][k] = pCalibIso->hi_sigma[k];
499 }
500 }
501
502 for(int i = 0; i < pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
503 pTuningIso = &pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO[i];
504 pParams->iso[i] = pTuningIso->iso;
505 pParams->thumbds[i] = pTuningIso->thumbds;
506 pParams->lo_enable[i] = pTuningIso->lo_enable;
507 pParams->hi_enable[i] = pTuningIso->hi_enable;
508 pParams->lo_filter_strength[i] = pTuningIso->lo_filter_strength;
509 pParams->hi_filter_strength[i] = pTuningIso->hi_filter_strength;
510 pParams->soft_threshold_ratio[i] = pTuningIso->soft_threshold_ratio;
511
512 pParams->hi_wgt_comp[i] = pTuningIso->hi_wgt_comp;
513 pParams->clipwgt[i] = pTuningIso->clipwgt;
514 pParams->lo_med_en[i] = pTuningIso->lo_med_en;
515 pParams->lo_gsbay_en[i] = pTuningIso->lo_gsbay_en;
516 pParams->lo_gslum_en[i] = pTuningIso->lo_gslum_en;
517 pParams->hi_med_en[i] = pTuningIso->hi_med_en;
518 pParams->hi_gslum_en[i] = pTuningIso->hi_gslum_en;
519 pParams->global_pk_en[i] = pTuningIso->global_pk_en;
520 pParams->global_pksq[i] = pTuningIso->global_pksq;
521
522 pParams->hidif_th[i] = pTuningIso->hidif_th;
523
524 }
525
526 LOGI_ANR("%s:(%d) oyyf bayerner xml config end! \n", __FUNCTION__, __LINE__);
527
528 return res;
529 }
530
531
bayertnr_config_setting_param_json_V2(RK_Bayertnr_Params_V2_t * pParams,CalibDbV2_BayerTnrV2_t * pCalibdbV2,char * param_mode,char * snr_name)532 Abayertnr_result_V2_t bayertnr_config_setting_param_json_V2(RK_Bayertnr_Params_V2_t *pParams, CalibDbV2_BayerTnrV2_t* pCalibdbV2, char* param_mode, char * snr_name)
533 {
534 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
535 int calib_idx = 0;
536 int tuning_idx = 0;
537
538 if(pParams == NULL || pCalibdbV2 == NULL
539 || param_mode == NULL || snr_name == NULL) {
540 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
541 return ABAYERTNRV2_RET_NULL_POINTER;
542 }
543
544 res = bayertnr_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx);
545 if(res != ABAYERTNRV2_RET_SUCCESS) {
546 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
547
548 }
549
550 res = bayertnr_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx);
551
552 return res;
553
554 }
555
556 RKAIQ_END_DECLARE
557
558