1
2
3 #include "rk_aiq_abayer2dnr_algo_bayernr_v23.h"
4
5 RKAIQ_BEGIN_DECLARE
6
7
bayer2dnr_select_params_by_ISO_V23(RK_Bayer2dnr_Params_V23_t * pParams,RK_Bayer2dnrV23_Params_Select_t * pSelect,Abayer2dnr_ExpInfo_V23_t * pExpInfo)8 Abayer2dnr_result_V23_t bayer2dnr_select_params_by_ISO_V23(RK_Bayer2dnr_Params_V23_t *pParams, RK_Bayer2dnrV23_Params_Select_t *pSelect, Abayer2dnr_ExpInfo_V23_t *pExpInfo)
9 {
10 Abayer2dnr_result_V23_t res = ABAYER2DNR_V23_RET_SUCCESS;
11 int iso = 50;
12
13 if(pParams == NULL) {
14 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
15 return ABAYER2DNR_V23_RET_NULL_POINTER;
16 }
17
18 if(pSelect == NULL) {
19 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
20 return ABAYER2DNR_V23_RET_NULL_POINTER;
21 }
22
23 if(pExpInfo == NULL) {
24 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
25 return ABAYER2DNR_V23_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_BAYER2DNR_V23_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_BAYER2DNR_V23_MAX_ISO_NUM; i++) {
45 isoGainStd[i] = pParams->iso[i] / 50;
46 }
47 #else
48 for(int i = 0; i < RK_BAYER2DNR_V23_MAX_ISO_NUM; i++) {
49 isoGainStd[i] = 1 * (1 << i);
50 }
51 #endif
52
53 for (i = 0; i < RK_BAYER2DNR_V23_MAX_ISO_NUM - 1; i++)
54 {
55 if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1])
56 {
57 isoGainLow = isoGainStd[i];
58 isoGainHig = isoGainStd[i + 1];
59 isoLevelLow = i;
60 isoLevelHig = i + 1;
61 isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
62 isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
63 }
64 }
65
66 pExpInfo->isoLevelLow = isoLevelLow;
67 pExpInfo->isoLevelHig = isoLevelHig;
68
69 RK_Bayer2dnrV23_Params_Select_t *pLowISO = &pParams->Bayer2dnrParamsISO[isoLevelLow];
70 RK_Bayer2dnrV23_Params_Select_t *pHighISO = &pParams->Bayer2dnrParamsISO[isoLevelHig];
71
72 LOGD_ANR("%s:%d isoGain:%d isoGainHig:%d isoGainLow:%d\n", __FUNCTION__, __LINE__, isoGain,
73 isoGainHig, isoGainLow);
74
75 pSelect->enable = pParams->enable;
76 pSelect->hdrdgain_ctrl_en = pParams->hdrdgain_ctrl_en;
77
78 float ratio = 0;
79 ratio = float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow);
80
81 pSelect->filter_strength = ratio * (pHighISO->filter_strength - pLowISO->filter_strength) + pLowISO->filter_strength;
82
83 for (i = 0; i < 16; i++) {
84 pSelect->sigma[i] = ratio * (pHighISO->sigma[i] - pLowISO->sigma[i]) + pLowISO->sigma[i];
85 pSelect->gain_adj[i] = ratio * (pHighISO->gain_adj[i] - pLowISO->gain_adj[i]) + pLowISO->gain_adj[i];
86 }
87
88 pSelect->edgesofts = ratio * (pHighISO->edgesofts - pLowISO->edgesofts) + pLowISO->edgesofts;
89 pSelect->ratio = ratio * (pHighISO->ratio - pLowISO->ratio) + pLowISO->ratio;
90 pSelect->weight = ratio * (pHighISO->weight - pLowISO->weight) + pLowISO->weight;
91 pSelect->pix_diff = ratio * (pHighISO->pix_diff - pLowISO->pix_diff) + pLowISO->pix_diff;
92 pSelect->diff_thld = ratio * (pHighISO->diff_thld - pLowISO->diff_thld) + pLowISO->diff_thld;
93
94 pSelect->gain_scale = ratio * (pHighISO->gain_scale - pLowISO->gain_scale) + pLowISO->gain_scale;
95 pSelect->hdr_dgain_scale_s = ratio * (pHighISO->hdr_dgain_scale_s - pLowISO->hdr_dgain_scale_s) + pLowISO->hdr_dgain_scale_s;
96 pSelect->hdr_dgain_scale_m = ratio * (pHighISO->hdr_dgain_scale_m - pLowISO->hdr_dgain_scale_m) + pLowISO->hdr_dgain_scale_m;
97
98 if((isoGain - isoGainLow) <= (isoGainHig - isoGain) ) {
99 pSelect->gauss_guide = pLowISO->gauss_guide;
100 pSelect->gain_bypass = pLowISO->gain_bypass;
101 pSelect->trans_mode = pLowISO->trans_mode;
102 pSelect->trans_offset = pLowISO->trans_offset;
103 pSelect->itrans_offset = pLowISO->itrans_offset;
104 pSelect->trans_datmax = pLowISO->trans_datmax;
105 for (i = 0; i < 16; i++) {
106 pSelect->gain_lumapoint[i] = pLowISO->gain_lumapoint[i];
107 pSelect->lumapoint[i] = pLowISO->lumapoint[i];
108 }
109 } else {
110 pSelect->gauss_guide = pHighISO->gauss_guide;
111 pSelect->gain_bypass = pHighISO->gain_bypass;
112 pSelect->trans_mode = pHighISO->trans_mode;
113 pSelect->trans_offset = pHighISO->trans_offset;
114 pSelect->itrans_offset = pHighISO->itrans_offset;
115 pSelect->trans_datmax = pHighISO->trans_datmax;
116 for (i = 0; i < 16; i++) {
117 pSelect->gain_lumapoint[i] = pHighISO->gain_lumapoint[i];
118 pSelect->lumapoint[i] = pHighISO->lumapoint[i];
119 }
120 }
121
122 return res;
123 }
124
125
bayer2dnr_get_trans_V23(int tmpfix)126 unsigned short bayer2dnr_get_trans_V23(int tmpfix)
127 {
128 int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440,
129 13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710,
130 26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346,
131 38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704,
132 48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040,
133 57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536
134 };
135 int logprecision = 6;
136 int logfixbit = 16;
137 int logtblbit = 16;
138 int logscalebit = 12;
139 int logfixmul = (1 << logfixbit);
140 long long x8, one = 1;
141 long long gx, n = 0, ix1, ix2, dp;
142 long long lt1, lt2, dx, fx;
143 int i, j = 1;
144
145 x8 = tmpfix + (1 << 8);
146 // find highest bit
147 for (i = 0; i < 32; i++)
148 {
149 if (x8 & j)
150 {
151 n = i;
152 }
153 j = j << 1;
154 }
155
156 gx = x8 - (one << n);
157 gx = gx * (one << logprecision) * logfixmul;
158 gx = gx / (one << n);
159
160 ix1 = gx >> logfixbit;
161 dp = gx - ix1 * logfixmul;
162
163 ix2 = ix1 + 1;
164
165 lt1 = logtablef[ix1];
166 lt2 = logtablef[ix2];
167
168 dx = lt1 * (logfixmul - dp) + lt2 * dp;
169
170 fx = dx + (n - 8) * (one << (logfixbit + logtblbit));
171 fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1));
172 fx = fx >> (logfixbit + logtblbit - logscalebit);
173
174 return fx;
175 }
176
bayer2dnr_wgt_sig_tab_V23(int index,int len,int * exp_x,float * exp_y)177 float bayer2dnr_wgt_sig_tab_V23(int index, int len, int* exp_x, float*exp_y)
178 {
179 int i;
180 float res;
181 float ratio;
182 int *luma_point = exp_x;
183 float *interpval = exp_y;
184
185 for(i = 0; i < len; i++) {
186 if(index < luma_point[i])
187 break;
188 }
189
190 if(i <= 0)
191 res = interpval[0];
192 else if(i > len - 1)
193 res = interpval[len - 1];
194 else {
195 ratio = (index - luma_point[i - 1]) * (interpval[i] - interpval[i - 1]);
196 ratio = ratio / (luma_point[i] - luma_point[i - 1]);
197 res = interpval[i - 1] + ratio;
198 }
199
200 return res;
201 }
202
203
bayer2dnr_fix_transfer_V23(RK_Bayer2dnrV23_Params_Select_t * pSelect,RK_Bayer2dnr_Fix_V23_t * pFix,rk_aiq_bayer2dnr_strength_v23_t * pStrength,Abayer2dnr_ExpInfo_V23_t * pExpInfo)204 Abayer2dnr_result_V23_t bayer2dnr_fix_transfer_V23(RK_Bayer2dnrV23_Params_Select_t* pSelect, RK_Bayer2dnr_Fix_V23_t *pFix, rk_aiq_bayer2dnr_strength_v23_t* pStrength, Abayer2dnr_ExpInfo_V23_t *pExpInfo)
205 {
206 //--------------------------- v23 params ----------------------------//
207 float frameiso[3];
208 float frameEt[3];
209 float fdGain[3];
210 int dGain[3] = {0};
211 int i = 0;
212 int ypos[8] = {4, 4, 4, 3, 3, 2, 2, 1};
213 int xpos[8] = {4, 2, 0, 3, 1, 2, 0, 1};
214 float tmp1, tmp2, edgesofts;
215 int bayernr_sw_bil_gauss_weight[16];
216 int tmp;
217
218 if(pSelect == NULL) {
219 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
220 return ABAYER2DNR_V23_RET_NULL_POINTER;
221 }
222
223 if(pFix == NULL) {
224 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
225 return ABAYER2DNR_V23_RET_NULL_POINTER;
226 }
227
228 if(pExpInfo == NULL) {
229 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
230 return ABAYER2DNR_V23_RET_NULL_POINTER;
231 }
232
233 if(pStrength == NULL) {
234 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
235 return ABAYER2DNR_V23_RET_NULL_POINTER;
236 }
237
238 float fStrength = 1.0;
239
240 if (pStrength->strength_enable)
241 fStrength = pStrength->percent;
242
243 if(fStrength <= 0.0f) {
244 fStrength = 0.000001;
245 }
246
247 LOGD_ANR("strength_enable:%d fStrength: %f \n", pStrength->strength_enable, fStrength);
248
249 // hdr gain
250 int framenum = pExpInfo->hdr_mode + 1;
251
252 frameiso[0] = pExpInfo->arIso[0];
253 frameiso[1] = pExpInfo->arIso[1];
254 frameiso[2] = pExpInfo->arIso[2];
255
256 frameEt[0] = pExpInfo->arTime[0];
257 frameEt[1] = pExpInfo->arTime[1];
258 frameEt[2] = pExpInfo->arTime[2];
259
260
261 for (i = 0; i < framenum; i++) {
262 fdGain[i] = frameiso[i] * frameEt[i];
263 LOGD_ANR("bayernrv23 idx[%d] iso:%f time:%f dgain:%f\n",
264 i, frameiso[i], frameEt[i], fdGain[i]);
265 }
266
267 for (i = 0; i < framenum; i++) {
268 fdGain[i] = fdGain[framenum - 1] / fdGain[i];
269 dGain[i] = int(fdGain[i] * (1 << FIXNLMCALC));
270 LOGD_ANR("bayernrv23 idx[%d] fdgain:%f dgain:%d \n",
271 i, fdGain[i], dGain[i]);
272 }
273
274 //ISP_BAYNR_3A00_CTRL
275 if(pExpInfo->bayertnr_en && !pSelect->gain_bypass) {
276 pFix->bay3d_gain_en = 1;
277 } else {
278 pFix->bay3d_gain_en = 0;
279 }
280 pFix->lg2_mode = pSelect->trans_mode;
281 pFix->gauss_en = pSelect->gauss_guide;
282 pFix->log_bypass = 0;
283 pFix->bayer_en = pSelect->enable;
284 if(pExpInfo->bayertnr_en) {
285 pFix->bayer_en = 1;
286 }
287
288
289
290 // ISP_BAYNR_3A00_DGAIN0-2
291 for(i = 0; i < framenum; i++) {
292 tmp = dGain[i] / ( 1 << (FIXNLMCALC - FIXGAINBIT));
293 pFix->dgain[i] = CLIP(tmp, 0, 0xffff);
294 }
295
296 #if 1 //predgain not use yet
297 if(framenum == 1) {
298 //in leaner mode ,predgain open, dgain should usr merge mode ,dgain[0],dgain[1],dgain[2]should confige 1x.
299 if(pExpInfo->blc_ob_predgain > 0.0f) {
300 pFix->dgain[0] = 0;
301 pFix->dgain[1] = 0;
302 pFix->dgain[2] = 0;
303 }
304 }
305 #endif
306
307 if(pSelect->hdrdgain_ctrl_en) {
308 //lc
309 if(framenum == 2) {
310 LOGD_ANR("lc before bayernr dgain:%d\n", pFix->dgain[0]);
311 tmp = pFix->dgain[0] * pSelect->hdr_dgain_scale_s;
312 pFix->dgain[0] = CLIP(tmp, 0, 0xffff);
313 LOGD_ANR("lc after bayernr dgain:%d sacale_s:%f\n ",
314 pFix->dgain[0], pSelect->hdr_dgain_scale_s);
315 }
316
317 if(framenum == 3) {
318 LOGD_ANR("lc before bayernr dgain:%d %d\n",
319 pFix->dgain[0],
320 pFix->dgain[1]);
321 tmp = pFix->dgain[0] * pSelect->hdr_dgain_scale_s;
322 pFix->dgain[0] = CLIP(tmp, 0, 0xffff);
323
324 tmp = pFix->dgain[1] * pSelect->hdr_dgain_scale_m;
325 pFix->dgain[1] = CLIP(tmp, 0, 0xffff);
326
327 LOGD_ANR("lc after bayernr dgain:%d %d scale:%f %f\n ",
328 pFix->dgain[0], pFix->dgain[1],
329 pSelect->hdr_dgain_scale_s, pSelect->hdr_dgain_scale_m);
330 }
331 }
332
333 // ISP_BAYNR_3A00_PIXDIFF
334 tmp = pSelect->pix_diff;
335 pFix->pix_diff = CLIP(tmp, 0, 0x3fff);
336
337 // ISP_BAYNR_3A00_THLD
338 tmp = pSelect->diff_thld;
339 pFix->diff_thld = CLIP(tmp, 0, 0x3ff);
340 tmp = (int)(pSelect->ratio / pSelect->filter_strength / fStrength * (1 << 10));
341 pFix->softthld = CLIP(tmp, 0, 0x3ff);
342
343 // ISP_BAYNR_3A00_W1_STRENG
344 tmp = 0; //(int)(pSelect->filter_strength * fStrength * (1 << FIXBILSTRG));
345 pFix->bltflt_streng = CLIP(tmp, 0, 0xfff);
346 tmp = (int)(pSelect->weight * fStrength * (1 << 10));
347 pFix->reg_w1 = CLIP(tmp, 0, 0x3ff);
348
349 // ISP_BAYNR_3A00_SIGMAX0-15 ISP_BAYNR_3A00_SIGMAY0-15
350 for(i = 0; i < 16; i++) {
351 //pFix->sigma_x[i] = bayernr_get_trans_V23(pSelect->bayernrv23_filter_lumapoint[i]);
352 tmp = pSelect->lumapoint[i];
353 pFix->sigma_x[i] = CLIP(tmp, 0, 0xffff);
354 tmp = pSelect->sigma[i] * pSelect->filter_strength;
355 LOGD_ANR("filter_strength:%f\n sigma[%d]:%d", pSelect->filter_strength, i,
356 pSelect->sigma[i]);
357 pFix->sigma_y[i] = CLIP(tmp, 0, 0xffff);
358 }
359
360 // ISP_BAYNR_3A00_WRIT_D
361 edgesofts = pSelect->edgesofts * fStrength;
362 if (edgesofts > 16.0) {
363 edgesofts = 16.0;
364 }
365 for(i = 0; i < 8; i++)
366 {
367 tmp1 = (float)(ypos[i] * ypos[i] + xpos[i] * xpos[i]);
368 tmp1 = tmp1 / (2 * edgesofts * edgesofts);
369 tmp2 = expf(-tmp1);
370 bayernr_sw_bil_gauss_weight[i] = (int)(tmp1 * (EXP2RECISION_FIX / (1 << 7)));
371 bayernr_sw_bil_gauss_weight[i + 8] = (int)(tmp2 * (1 << FIXVSTINV));
372 }
373
374 if(pExpInfo->gray_mode) {
375 //gray mode
376 tmp = bayernr_sw_bil_gauss_weight[12];
377 pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
378 tmp = bayernr_sw_bil_gauss_weight[10];
379 pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
380 tmp = bayernr_sw_bil_gauss_weight[11];
381 pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
382
383 } else {
384 tmp = bayernr_sw_bil_gauss_weight[13];
385 pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
386 tmp = bayernr_sw_bil_gauss_weight[14];
387 pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
388 tmp = bayernr_sw_bil_gauss_weight[15];
389 pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
390 }
391
392
393
394 tmp = pSelect->trans_offset;
395 pFix->lg2_off = CLIP(tmp, 0, 0x1fff);
396 tmp = pSelect->itrans_offset;
397 pFix->lg2_lgoff = CLIP(tmp, 0, 0xffff);
398 tmp = pSelect->trans_datmax;
399 pFix->dat_max = CLIP(tmp, 0, 0xfffff);
400
401
402
403 pFix->rgain_off = 0;
404 pFix->bgain_off = 0;
405
406 for (i = 0; i < 16; i++) {
407 tmp = pSelect->gain_lumapoint[i];
408 pFix->gain_x[i] = CLIP(tmp, 0, 0xff);
409 tmp = pSelect->gain_adj[i] * pSelect->gain_scale * fStrength ;
410 pFix->gain_y[i] = CLIP(tmp, 0, 0xfff);
411 }
412 bayer2dnr_fix_printf_V23(pFix);
413
414 return ABAYER2DNR_V23_RET_SUCCESS;
415
416 }
417
bayer2dnr_fix_printf_V23(RK_Bayer2dnr_Fix_V23_t * pFix)418 Abayer2dnr_result_V23_t bayer2dnr_fix_printf_V23(RK_Bayer2dnr_Fix_V23_t * pFix)
419 {
420 //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
421 Abayer2dnr_result_V23_t res = ABAYER2DNR_V23_RET_SUCCESS;
422
423 if(pFix == NULL) {
424 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
425 return ABAYER2DNR_V23_RET_NULL_POINTER;
426 }
427
428 LOGD_ANR("%s:(%d) ############# bayernr2D enter######################## \n", __FUNCTION__, __LINE__);
429 //ISP_BAYNR_3A00_CTRL(0x0000)
430 LOGD_ANR(
431 "(0x0000) sw_bay3d_gain_en:0x%x lg2_mode:0x%x gauss_en:0x%x log_bypass:0x%x en:0x%x \n",
432 pFix->bay3d_gain_en, pFix->lg2_mode, pFix->gauss_en, pFix->log_bypass, pFix->bayer_en);
433
434 // ISP_BAYNR_3A00_DGAIN0-2 (0x0004 - 0x0008)
435 for(int i = 0; i < 3; i++) {
436 LOGD_ANR("(0x0004 - 0x0008) dgain[%d]:0x%x \n",
437 i, pFix->dgain[i]);
438 }
439
440 // ISP_BAYNR_3A00_PIXDIFF(0x000c)
441 LOGD_ANR("(0x000c) pix_diff:0x%x \n",
442 pFix->pix_diff);
443
444 // ISP_BAYNR_3A00_THLD(0x0010)
445 LOGD_ANR("(0x000d) diff_thld:0x%x softthld:0x%x \n",
446 pFix->diff_thld,
447 pFix->softthld);
448
449 // ISP_BAYNR_3A00_W1_STRENG(0x0014)
450 LOGD_ANR("(0x0014) bltflt_streng:0x%x reg_w1:0x%x \n",
451 pFix->bltflt_streng,
452 pFix->reg_w1);
453
454 // ISP_BAYNR_3A00_SIGMAX0-15(0x0018 - 0x0034)
455 for(int i = 0; i < 16; i++) {
456 LOGD_ANR("(0x0018 - 0x0034) sig_x[%d]:0x%x \n",
457 i, pFix->sigma_x[i]);
458 }
459
460 // ISP_BAYNR_3A00_SIGMAY0-15(0x0038 - 0x0054)
461 for(int i = 0; i < 16; i++) {
462 LOGD_ANR("(0x0038 - 0x0054) sig_y[%d]:0x%x \n",
463 i, pFix->sigma_y[i]);
464 }
465
466 // ISP_BAYNR_3A00_WRIT_D(0x0058)
467 LOGD_ANR("(0x0058) weit_d[0]:0x%x weit_d[1]:0x%x weit_d[2]:0x%x\n",
468 pFix->weit_d[0],
469 pFix->weit_d[1],
470 pFix->weit_d[2]);
471
472 // ISP_BAYNR_3A00_LG_OFF(0x005c)
473 LOGD_ANR("(0x005c) lg2_lgoff:0x%x lg2_off:0x%x \n",
474 pFix->lg2_lgoff,
475 pFix->lg2_off);
476
477 // ISP_BAYNR_3A00_DATMAX(0x0060)
478 LOGD_ANR("(0x0060) dat_max:0x%x \n",
479 pFix->dat_max);
480
481 // ISP_BAYNR_3A00_LG_OFF(0x0064)
482 LOGD_ANR("(0x0064) bgain_off:0x%x rgain_off:0x%x \n",
483 pFix->bgain_off,
484 pFix->rgain_off);
485
486 // ISP_BAYNR_3A00_GAINX0-15(0x0068 - 0x0074)
487 for(int i = 0; i < 16; i++) {
488 LOGD_ANR("(0x0068 - 0x0074) gain_x[%d]:0x%x \n", i, pFix->gain_x[i]);
489 }
490
491 // ISP_BAYNR_3A00_GAINY0-15(0x0078 - 0x0094)
492 for(int i = 0; i < 16; i++) {
493 LOGD_ANR("(0x0078 - 0x0094) gain_y[%d]:0x%x \n", i, pFix->gain_y[i]);
494 }
495
496 LOGD_ANR("%s:(%d) ############# bayernr2D exit ######################## \n", __FUNCTION__, __LINE__);
497 return res;
498 }
499
500
bayer2dnr_get_setting_by_name_json_V23(CalibDbV2_Bayer2dnrV23_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)501 Abayer2dnr_result_V23_t bayer2dnr_get_setting_by_name_json_V23(CalibDbV2_Bayer2dnrV23_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx)
502 {
503
504 int i = 0;
505 Abayer2dnr_result_V23_t res = ABAYER2DNR_V23_RET_SUCCESS;
506
507 if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) {
508 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
509 return ABAYER2DNR_V23_RET_NULL_POINTER;
510 }
511
512 for(i = 0; i < pCalibdb->TuningPara.Setting_len; i++) {
513 if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
514 break;
515 }
516 }
517
518 if(i < pCalibdb->TuningPara.Setting_len) {
519 *tuning_idx = i;
520 } else {
521 *tuning_idx = 0;
522 }
523
524 for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
525 if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
526 break;
527 }
528 }
529
530 if(i < pCalibdb->CalibPara.Setting_len) {
531 *calib_idx = i;
532 } else {
533 *calib_idx = 0;
534 }
535
536 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
537 return res;
538
539
540 }
541
542
543
544
bayer2dnr_init_params_json_V23(RK_Bayer2dnr_Params_V23_t * pParams,CalibDbV2_Bayer2dnrV23_t * pCalibdb,int calib_idx,int tuning_idx)545 Abayer2dnr_result_V23_t bayer2dnr_init_params_json_V23(RK_Bayer2dnr_Params_V23_t *pParams, CalibDbV2_Bayer2dnrV23_t* pCalibdb, int calib_idx, int tuning_idx)
546 {
547 Abayer2dnr_result_V23_t res = ABAYER2DNR_V23_RET_SUCCESS;
548 CalibDbV2_Bayer2dnrV23_C_ISO_t *pCalibIso = NULL;
549 CalibDbV2_Bayer2dnrV23_T_ISO_t *pTuningISO = NULL;
550 //CalibDbV2_BayerTnr_V23_TuningPara_Setting_ISO_t *pTnrIso = NULL;
551 int i = 0;
552 int j = 0;
553
554 LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
555 if(pParams == NULL || pCalibdb == NULL || calib_idx < 0 || tuning_idx < 0) {
556 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
557 return ABAYER2DNR_V23_RET_NULL_POINTER;
558 }
559 pParams->enable = pCalibdb->TuningPara.enable;
560 pParams->hdrdgain_ctrl_en = pCalibdb->TuningPara.hdrdgain_ctrl_en;
561
562 if(calib_idx < pCalibdb->CalibPara.Setting_len) {
563 for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYER2DNR_V23_MAX_ISO_NUM; i++) {
564 pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i];
565 pParams->iso[i] = pCalibIso->iso;
566 for(int k = 0; k < 16; k++) {
567 pParams->Bayer2dnrParamsISO[i].lumapoint[k] = pCalibIso->lumapoint[k];
568 pParams->Bayer2dnrParamsISO[i].sigma[k] = pCalibIso->sigma[k];
569 }
570 }
571 }
572
573 if(tuning_idx < pCalibdb->TuningPara.Setting_len) {
574 for(int i = 0; i < pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYER2DNR_V23_MAX_ISO_NUM; i++) {
575 pTuningISO = &pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO[i];
576 pParams->iso[i] = pTuningISO->iso;
577 pParams->Bayer2dnrParamsISO[i].filter_strength = pTuningISO->filter_strength;
578 pParams->Bayer2dnrParamsISO[i].edgesofts = pTuningISO->edgesofts;
579 pParams->Bayer2dnrParamsISO[i].weight = pTuningISO->weight;
580 pParams->Bayer2dnrParamsISO[i].ratio = pTuningISO->ratio;
581 pParams->Bayer2dnrParamsISO[i].gauss_guide = pTuningISO->gauss_guide;
582
583 pParams->Bayer2dnrParamsISO[i].gain_bypass = pTuningISO->gain_bypass;
584 pParams->Bayer2dnrParamsISO[i].gain_scale = pTuningISO->gain_scale;
585 for(int k = 0; k < 16; k++) {
586 pParams->Bayer2dnrParamsISO[i].gain_lumapoint[k] = pTuningISO->gain_adj.gain_lumapoint[k];
587 pParams->Bayer2dnrParamsISO[i].gain_adj[k] = pTuningISO->gain_adj.gain_adj[k];
588 }
589
590 pParams->Bayer2dnrParamsISO[i].pix_diff = pTuningISO->pix_diff;
591 pParams->Bayer2dnrParamsISO[i].diff_thld = pTuningISO->diff_thld;
592
593 pParams->Bayer2dnrParamsISO[i].trans_mode = pTuningISO->trans_mode;
594 pParams->Bayer2dnrParamsISO[i].trans_offset = pTuningISO->trans_offset;
595 pParams->Bayer2dnrParamsISO[i].itrans_offset = pTuningISO->itrans_offset;
596 pParams->Bayer2dnrParamsISO[i].trans_datmax = pTuningISO->trans_datmax;
597 pParams->Bayer2dnrParamsISO[i].hdr_dgain_scale_s = pTuningISO->hdr_dgain_scale_s;
598 pParams->Bayer2dnrParamsISO[i].hdr_dgain_scale_m = pTuningISO->hdr_dgain_scale_m;
599 }
600 }
601
602 LOGI_ANR("%s:(%d) oyyf bayerner xml config end! \n", __FUNCTION__, __LINE__);
603
604 return res;
605 }
606
bayer2dnr_config_setting_param_json_V23(RK_Bayer2dnr_Params_V23_t * pParams,CalibDbV2_Bayer2dnrV23_t * pCalibdbV23,char * param_mode,char * snr_name)607 Abayer2dnr_result_V23_t bayer2dnr_config_setting_param_json_V23(RK_Bayer2dnr_Params_V23_t *pParams, CalibDbV2_Bayer2dnrV23_t* pCalibdbV23, char* param_mode, char * snr_name)
608 {
609 Abayer2dnr_result_V23_t res = ABAYER2DNR_V23_RET_SUCCESS;
610 int calib_idx = 0;
611 int tuning_idx = 0;
612
613
614 if(pParams == NULL || pCalibdbV23 == NULL
615 || param_mode == NULL || snr_name == NULL) {
616 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
617 return ABAYER2DNR_V23_RET_NULL_POINTER;
618 }
619
620 res = bayer2dnr_get_setting_by_name_json_V23(pCalibdbV23, snr_name, &calib_idx, &tuning_idx);
621 if(res != ABAYER2DNR_V23_RET_SUCCESS) {
622 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
623 }
624
625 res = bayer2dnr_init_params_json_V23(pParams, pCalibdbV23, calib_idx, tuning_idx);
626
627 return res;
628
629 }
630
631 RKAIQ_END_DECLARE
632
633