1
2
3 #include "rk_aiq_abayer2dnr_algo_bayernr_v2.h"
4
5 RKAIQ_BEGIN_DECLARE
6
7
bayer2dnr_select_params_by_ISO_V2(RK_Bayer2dnr_Params_V2_t * pParams,RK_Bayer2dnr_Params_V2_Select_t * pSelect,Abayer2dnr_ExpInfo_V2_t * pExpInfo)8 Abayer2dnr_result_V2_t bayer2dnr_select_params_by_ISO_V2(RK_Bayer2dnr_Params_V2_t *pParams, RK_Bayer2dnr_Params_V2_Select_t *pSelect, Abayer2dnr_ExpInfo_V2_t *pExpInfo)
9 {
10 Abayer2dnr_result_V2_t res = ABAYER2DNR_RET_SUCCESS;
11 int iso = 50;
12
13 if(pParams == NULL) {
14 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
15 return ABAYER2DNR_RET_NULL_POINTER;
16 }
17
18 if(pSelect == NULL) {
19 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
20 return ABAYER2DNR_RET_NULL_POINTER;
21 }
22
23 if(pExpInfo == NULL) {
24 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
25 return ABAYER2DNR_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_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_BAYER2DNR_V2_MAX_ISO_NUM; i++) {
45 isoGainStd[i] = pParams->iso[i] / 50;
46 }
47 #else
48 for(int i = 0; i < RK_BAYER2DNR_V2_MAX_ISO_NUM; i++) {
49 isoGainStd[i] = 1 * (1 << i);
50 }
51 #endif
52
53 for (i = 0; i < RK_BAYER2DNR_V2_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->isoHigh = pParams->iso[isoLevelHig];
67 pExpInfo->isoLow = pParams->iso[isoLevelLow];
68
69 LOGD_ANR("%s:%d iso:%d high:%d low:%d\n",
70 __FUNCTION__, __LINE__,
71 isoGain, isoGainHig, isoGainLow);
72
73 pSelect->enable = pParams->enable;
74 pSelect->hdrdgain_ctrl_en = pParams->hdrdgain_ctrl_en;
75
76 pSelect->filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->filter_strength[isoLevelLow]
77 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->filter_strength[isoLevelHig];
78
79 tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->gauss_guide[isoLevelLow]
80 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->gauss_guide[isoLevelHig];
81 pSelect->gauss_guide = tmpf != 0;
82
83 for (i = 0; i < 16; i++)
84 {
85 pSelect->lumapoint[i] = pParams->lumapoint[i];
86 pSelect->sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->sigma[isoLevelLow][i]
87 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->sigma[isoLevelHig][i];
88 }
89
90 pSelect->edgesofts = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->edgesofts[isoLevelLow]
91 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->edgesofts[isoLevelHig];
92 pSelect->ratio = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->ratio[isoLevelLow]
93 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->ratio[isoLevelHig];
94 pSelect->weight = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->weight[isoLevelLow]
95 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->weight[isoLevelHig];
96 pSelect->pix_diff = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->pix_diff[isoLevelLow]
97 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->pix_diff[isoLevelHig];
98 pSelect->diff_thld = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->diff_thld[isoLevelLow]
99 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->diff_thld[isoLevelHig];
100 pSelect->hdr_dgain_scale_s = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hdr_dgain_scale_s[isoLevelLow]
101 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hdr_dgain_scale_s[isoLevelHig];
102 pSelect->hdr_dgain_scale_m = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->hdr_dgain_scale_m[isoLevelLow]
103 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->hdr_dgain_scale_m[isoLevelHig];
104 return res;
105 }
106
107
bayer2dnr_get_trans_V2(int tmpfix)108 unsigned short bayer2dnr_get_trans_V2(int tmpfix)
109 {
110 int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440,
111 13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710,
112 26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346,
113 38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704,
114 48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040,
115 57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536
116 };
117 int logprecision = 6;
118 int logfixbit = 16;
119 int logtblbit = 16;
120 int logscalebit = 12;
121 int logfixmul = (1 << logfixbit);
122 long long x8, one = 1;
123 long long gx, n = 0, ix1, ix2, dp;
124 long long lt1, lt2, dx, fx;
125 int i, j = 1;
126
127 x8 = tmpfix + (1 << 8);
128 // find highest bit
129 for (i = 0; i < 32; i++)
130 {
131 if (x8 & j)
132 {
133 n = i;
134 }
135 j = j << 1;
136 }
137
138 gx = x8 - (one << n);
139 gx = gx * (one << logprecision) * logfixmul;
140 gx = gx / (one << n);
141
142 ix1 = gx >> logfixbit;
143 dp = gx - ix1 * logfixmul;
144
145 ix2 = ix1 + 1;
146
147 lt1 = logtablef[ix1];
148 lt2 = logtablef[ix2];
149
150 dx = lt1 * (logfixmul - dp) + lt2 * dp;
151
152 fx = dx + (n - 8) * (one << (logfixbit + logtblbit));
153 fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1));
154 fx = fx >> (logfixbit + logtblbit - logscalebit);
155
156 return fx;
157 }
158
bayer2dnr_fix_transfer_V2(RK_Bayer2dnr_Params_V2_Select_t * pSelect,RK_Bayer2dnr_Fix_V2_t * pFix,rk_aiq_bayer2dnr_strength_v2_t * pStrength,Abayer2dnr_ExpInfo_V2_t * pExpInfo)159 Abayer2dnr_result_V2_t bayer2dnr_fix_transfer_V2(RK_Bayer2dnr_Params_V2_Select_t* pSelect, RK_Bayer2dnr_Fix_V2_t *pFix, rk_aiq_bayer2dnr_strength_v2_t *pStrength, Abayer2dnr_ExpInfo_V2_t *pExpInfo)
160 {
161 //--------------------------- v2 params ----------------------------//
162 float frameiso[3];
163 float frameEt[3];
164 float fdGain[3];
165 int dGain[3] = {0};
166 int i = 0;
167 int ypos[8] = {4, 4, 4, 3, 3, 2, 2, 1};
168 int xpos[8] = {4, 2, 0, 3, 1, 2, 0, 1};
169 float tmp1, tmp2, edgesofts;
170 int bayernr_sw_bil_gauss_weight[16];
171 int tmp;
172 float fStrength = 1.0;
173
174 if(pSelect == NULL) {
175 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
176 return ABAYER2DNR_RET_NULL_POINTER;
177 }
178
179 if(pFix == NULL) {
180 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
181 return ABAYER2DNR_RET_NULL_POINTER;
182 }
183
184 if(pExpInfo == NULL) {
185 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
186 return ABAYER2DNR_RET_NULL_POINTER;
187 }
188
189 if(pStrength == NULL) {
190 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
191 return ABAYER2DNR_RET_NULL_POINTER;
192 }
193
194 if(pStrength->strength_enable) {
195 fStrength = pStrength->percent;
196 }
197
198 if(fStrength <= 0.0f) {
199 fStrength = 0.000001;
200 }
201
202 LOGD_ANR("api enalbe:%d api:strength:%f fStrength:%f\n",
203 pStrength->strength_enable,
204 pStrength->percent,
205 fStrength);
206
207 // hdr gain
208 int framenum = pExpInfo->hdr_mode + 1;
209
210 frameiso[0] = pExpInfo->arIso[0];
211 frameiso[1] = pExpInfo->arIso[1];
212 frameiso[2] = pExpInfo->arIso[2];
213
214 frameEt[0] = pExpInfo->arTime[0];
215 frameEt[1] = pExpInfo->arTime[1];
216 frameEt[2] = pExpInfo->arTime[2];
217
218
219 for (i = 0; i < framenum; i++) {
220 fdGain[i] = frameiso[i] * frameEt[i];
221 LOGD_ANR("bayernrv2 idx[%d] iso:%f time:%f dgain:%f\n",
222 i, frameiso[i], frameEt[i], fdGain[i]);
223 }
224
225 for (i = 0; i < framenum; i++) {
226 fdGain[i] = fdGain[framenum - 1] / fdGain[i];
227 dGain[i] = int(fdGain[i] * (1 << FIXNLMCALC));
228 LOGD_ANR("bayernrv2 idx[%d] fdgain:%f dgain:%d \n",
229 i, fdGain[i], dGain[i]);
230 }
231
232 //ISP_BAYNR_3A00_CTRL
233 pFix->baynr_lg2_mode = 0x00;
234 pFix->baynr_gauss_en = pSelect->gauss_guide;
235 pFix->baynr_log_bypass = 0;
236 pFix->baynr_en = pSelect->enable;
237
238 //pFix->bayernr_gray_mode = 0;
239
240
241 // ISP_BAYNR_3A00_DGAIN0-2
242 for(i = 0; i < framenum; i++) {
243 tmp = dGain[i] / ( 1 << (FIXNLMCALC - FIXGAINBIT));
244 pFix->baynr_dgain[i] = CLIP(tmp, 0, 0xffff);
245 }
246
247 if(pSelect->hdrdgain_ctrl_en) {
248 //lc
249 if(framenum == 2) {
250 LOGD_ANR("lc before bayernr dgain:%d\n", pFix->baynr_dgain[0]);
251 tmp = pFix->baynr_dgain[0] * pSelect->hdr_dgain_scale_s;
252 pFix->baynr_dgain[0] = CLIP(tmp, 0, 0xffff);
253 LOGD_ANR("lc after bayernr dgain:%d sacale_s:%f\n ",
254 pFix->baynr_dgain[0], pSelect->hdr_dgain_scale_s);
255 }
256
257 if(framenum == 3) {
258 LOGD_ANR("lc before bayernr dgain:%d %d\n",
259 pFix->baynr_dgain[0],
260 pFix->baynr_dgain[1]);
261 tmp = pFix->baynr_dgain[0] * pSelect->hdr_dgain_scale_s;
262 pFix->baynr_dgain[0] = CLIP(tmp, 0, 0xffff);
263
264 tmp = pFix->baynr_dgain[1] * pSelect->hdr_dgain_scale_m;
265 pFix->baynr_dgain[1] = CLIP(tmp, 0, 0xffff);
266
267 LOGD_ANR("lc after bayernr dgain:%d %d scale:%f %f\n ",
268 pFix->baynr_dgain[0], pFix->baynr_dgain[1],
269 pSelect->hdr_dgain_scale_s, pSelect->hdr_dgain_scale_m);
270 }
271 }
272
273 //wjm get gain
274 if(framenum > 1) {
275 LOGD_ANR("wjm before dgain[0]:%d \n ", pFix->baynr_dgain[0]);
276
277 //wjm clip
278 double maxsigma = (1 << 14) - 1;
279 double maxgain = pSelect->sigma[0];
280 for(i = 0; i < 16; i++) {
281 if(maxgain < pSelect->sigma[i]) {
282 maxgain = pSelect->sigma[i];
283 }
284 }
285 LOGD_ANR("wjm maxgain:%f\n", maxgain);
286 maxgain = maxsigma / maxgain;
287 tmp = maxgain * (1 << 8);
288 LOGD_ANR("wjm tmp:%d\n", tmp);
289 tmp = MIN(pFix->baynr_dgain[0], tmp);
290 pFix->baynr_dgain[0] = CLIP(tmp, 0, 0xffff);
291 LOGD_ANR("wjm after hdr mode maxsigma:%f maxgain:%f tmp:%d dgain[0]:%d \n ",
292 maxsigma, maxgain, tmp, pFix->baynr_dgain[0]);
293
294 if(framenum > 2) {
295 tmp = MIN(pFix->baynr_dgain[1], tmp);
296 pFix->baynr_dgain[1] = CLIP(tmp, 0, 0xffff);
297 }
298
299 }
300
301 // ISP_BAYNR_3A00_PIXDIFF
302 tmp = pSelect->pix_diff;
303 pFix->baynr_pix_diff = CLIP(tmp, 0, 0x3fff);
304
305 // ISP_BAYNR_3A00_THLD
306 tmp = pSelect->diff_thld;
307 pFix->baynr_diff_thld = CLIP(tmp, 0, 0x3ff);
308 tmp = (int)(pSelect->ratio / pSelect->filter_strength / fStrength * (1 << 10));
309 pFix->baynr_softthld = CLIP(tmp, 0, 0x3ff);
310
311 // ISP_BAYNR_3A00_W1_STRENG
312 tmp = (int)(pSelect->filter_strength * fStrength * (1 << FIXBILSTRG));
313 pFix->bltflt_streng = CLIP(tmp, 0, 0xfff);
314 tmp = (int)(pSelect->weight * fStrength * (1 << 10));
315 pFix->baynr_reg_w1 = CLIP(tmp, 0, 0x3ff);
316
317 // ISP_BAYNR_3A00_SIGMAX0-15 ISP_BAYNR_3A00_SIGMAY0-15
318 for(i = 0; i < 16; i++) {
319 //pFix->sigma_x[i] = bayernr_get_trans_V2(pSelect->bayernrv2_filter_lumapoint[i]);
320 tmp = pSelect->lumapoint[i];
321 pFix->sigma_x[i] = CLIP(tmp, 0, 0xffff);
322 tmp = pSelect->sigma[i];
323 pFix->sigma_y[i] = CLIP(tmp, 0, 0xffff);
324 }
325
326 // ISP_BAYNR_3A00_WRIT_D
327 #if 0
328 pFix->weit_d[0] = 0x178;
329 pFix->weit_d[1] = 0x249;
330 pFix->weit_d[2] = 0x31d;
331 #else
332 edgesofts = pSelect->edgesofts * fStrength;
333 if (edgesofts > 16.0) {
334 edgesofts = 16.0;
335 }
336 for(i = 0; i < 8; i++)
337 {
338 tmp1 = (float)(ypos[i] * ypos[i] + xpos[i] * xpos[i]);
339 tmp1 = tmp1 / (2 * edgesofts * edgesofts);
340 tmp2 = expf(-tmp1);
341 bayernr_sw_bil_gauss_weight[i] = (int)(tmp1 * (EXP2RECISION_FIX / (1 << 7)));
342 bayernr_sw_bil_gauss_weight[i + 8] = (int)(tmp2 * (1 << FIXVSTINV));
343 }
344
345 if(pExpInfo->gray_mode) {
346 //gray mode
347 tmp = bayernr_sw_bil_gauss_weight[12];
348 pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
349 tmp = bayernr_sw_bil_gauss_weight[10];
350 pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
351 tmp = bayernr_sw_bil_gauss_weight[11];
352 pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
353
354 } else {
355 tmp = bayernr_sw_bil_gauss_weight[13];
356 pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
357 tmp = bayernr_sw_bil_gauss_weight[14];
358 pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
359 tmp = bayernr_sw_bil_gauss_weight[15];
360 pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
361 }
362
363 #endif
364
365 pFix->lg2_off = 0x100;
366 pFix->lg2_lgoff = 0x8000;
367
368 pFix->dat_max = 0xfffff;
369
370 bayer2dnr_fix_printf_V2(pFix);
371
372 return ABAYER2DNR_RET_SUCCESS;
373
374 }
375
bayer2dnr_fix_printf_V2(RK_Bayer2dnr_Fix_V2_t * pFix)376 Abayer2dnr_result_V2_t bayer2dnr_fix_printf_V2(RK_Bayer2dnr_Fix_V2_t * pFix)
377 {
378 //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
379 Abayer2dnr_result_V2_t res = ABAYER2DNR_RET_SUCCESS;
380
381 if(pFix == NULL) {
382 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
383 return ABAYER2DNR_RET_NULL_POINTER;
384 }
385
386 LOGD_ANR("%s:(%d) ############# bayernr2D enter######################## \n", __FUNCTION__, __LINE__);
387 //ISP_BAYNR_3A00_CTRL(0x0000)
388 LOGD_ANR("(0x0000) gauss_en:0x%x log_bypass:0x%x en:0x%x \n",
389 pFix->baynr_gauss_en,
390 pFix->baynr_log_bypass,
391 pFix->baynr_en);
392
393 // ISP_BAYNR_3A00_DGAIN0-2 (0x0004 - 0x0008)
394 for(int i = 0; i < 3; i++) {
395 LOGD_ANR("(0x0004 - 0x0008) dgain[%d]:0x%x \n",
396 i, pFix->baynr_dgain[i]);
397 }
398
399 // ISP_BAYNR_3A00_PIXDIFF(0x000c)
400 LOGD_ANR("(0x000c) pix_diff:0x%x \n",
401 pFix->baynr_pix_diff);
402
403 // ISP_BAYNR_3A00_THLD(0x0010)
404 LOGD_ANR("(0x000d) diff_thld:0x%x softthld:0x%x \n",
405 pFix->baynr_diff_thld,
406 pFix->baynr_softthld);
407
408 // ISP_BAYNR_3A00_W1_STRENG(0x0014)
409 LOGD_ANR("(0x0014) bltflt_streng:0x%x reg_w1:0x%x \n",
410 pFix->bltflt_streng,
411 pFix->baynr_reg_w1);
412
413 // ISP_BAYNR_3A00_SIGMAX0-15(0x0018 - 0x0034)
414 for(int i = 0; i < 16; i++) {
415 LOGD_ANR("(0x0018 - 0x0034) sig_x[%d]:0x%x \n",
416 i, pFix->sigma_x[i]);
417 }
418
419 // ISP_BAYNR_3A00_SIGMAY0-15(0x0038 - 0x0054)
420 for(int i = 0; i < 16; i++) {
421 LOGD_ANR("(0x0038 - 0x0054) sig_y[%d]:0x%x \n",
422 i, pFix->sigma_y[i]);
423 }
424
425 // ISP_BAYNR_3A00_WRIT_D(0x0058)
426 LOGD_ANR("(0x0058) weit_d[0]:0x%x weit_d[1]:0x%x weit_d[2]:0x%x\n",
427 pFix->weit_d[0],
428 pFix->weit_d[1],
429 pFix->weit_d[2]);
430
431 LOGD_ANR("%s:(%d) ############# bayernr2D exit ######################## \n", __FUNCTION__, __LINE__);
432 return res;
433 }
434
435
bayer2dnr_get_setting_by_name_json_V2(CalibDbV2_Bayer2dnrV2_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)436 Abayer2dnr_result_V2_t bayer2dnr_get_setting_by_name_json_V2(CalibDbV2_Bayer2dnrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx)
437 {
438
439 int i = 0;
440 Abayer2dnr_result_V2_t res = ABAYER2DNR_RET_SUCCESS;
441
442 if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) {
443 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
444 return ABAYER2DNR_RET_NULL_POINTER;
445 }
446
447 for(i = 0; i < pCalibdb->TuningPara.Setting_len; i++) {
448 if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
449 break;
450 }
451 }
452
453 if(i < pCalibdb->TuningPara.Setting_len) {
454 *tuning_idx = i;
455 } else {
456 *tuning_idx = 0;
457 }
458
459 for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
460 if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
461 break;
462 }
463 }
464
465 if(i < pCalibdb->CalibPara.Setting_len) {
466 *calib_idx = i;
467 } else {
468 *calib_idx = 0;
469 }
470
471 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
472 return res;
473
474
475 }
476
477
478
479
bayer2dnr_init_params_json_V2(RK_Bayer2dnr_Params_V2_t * pParams,CalibDbV2_Bayer2dnrV2_t * pCalibdb,int calib_idx,int tuning_idx)480 Abayer2dnr_result_V2_t bayer2dnr_init_params_json_V2(RK_Bayer2dnr_Params_V2_t *pParams, CalibDbV2_Bayer2dnrV2_t* pCalibdb, int calib_idx, int tuning_idx)
481 {
482 Abayer2dnr_result_V2_t res = ABAYER2DNR_RET_SUCCESS;
483 CalibDbV2_Bayer2dnrV2_C_ISO_t *pCalibIso = NULL;
484 CalibDbV2_Bayer2dnrV2_T_ISO_t *pTuningISO = NULL;
485 int i = 0;
486 int j = 0;
487
488 LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
489 if(pParams == NULL || pCalibdb == NULL || calib_idx < 0 || tuning_idx < 0) {
490 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
491 return ABAYER2DNR_RET_NULL_POINTER;
492 }
493 pParams->enable = pCalibdb->TuningPara.enable;
494 pParams->hdrdgain_ctrl_en = pCalibdb->TuningPara.hdrdgain_ctrl_en;
495
496 for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYER2DNR_V2_MAX_ISO_NUM; i++) {
497 pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i];
498 pParams->iso[i] = pCalibIso->iso;
499 for(int k = 0; k < 16; k++) {
500 pParams->lumapoint[k] = pCalibIso->lumapoint[k];
501 pParams->sigma[i][k] = pCalibIso->sigma[k];
502 }
503 }
504
505 for(int i = 0; i < pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYER2DNR_V2_MAX_ISO_NUM; i++) {
506 pTuningISO = &pCalibdb->TuningPara.Setting[tuning_idx].Tuning_ISO[i];
507 pParams->iso[i] = pTuningISO->iso;
508 pParams->filter_strength[i] = pTuningISO->filter_strength;
509 pParams->edgesofts[i] = pTuningISO->edgesofts;
510 pParams->weight[i] = pTuningISO->weight;
511 pParams->ratio[i] = pTuningISO->ratio;
512 pParams->gauss_guide[i] = pTuningISO->gauss_guide;
513
514 if(pTuningISO->pix_diff == 0)
515 pParams->pix_diff[i] = FIXDIFMAX - 1;
516 else
517 pParams->pix_diff[i] = pTuningISO->pix_diff;
518
519 if(pTuningISO->diff_thld == 0)
520 pParams->diff_thld[i] = LUTPRECISION_FIX;
521 else
522 pParams->diff_thld[i] = pTuningISO->diff_thld;
523
524 pParams->hdr_dgain_scale_s[i] = pTuningISO->hdr_dgain_scale_s;
525 pParams->hdr_dgain_scale_m[i] = pTuningISO->hdr_dgain_scale_m;
526 LOGD_ANR("i:%d dgain_scale:%f %f \n",
527 i,
528 pTuningISO->hdr_dgain_scale_s, pTuningISO->hdr_dgain_scale_m);
529 }
530
531 LOGI_ANR("%s:(%d) oyyf bayerner xml config end! \n", __FUNCTION__, __LINE__);
532
533 return res;
534 }
535
bayer2dnr_config_setting_param_json_V2(RK_Bayer2dnr_Params_V2_t * pParams,CalibDbV2_Bayer2dnrV2_t * pCalibdbV2,char * param_mode,char * snr_name)536 Abayer2dnr_result_V2_t bayer2dnr_config_setting_param_json_V2(RK_Bayer2dnr_Params_V2_t *pParams, CalibDbV2_Bayer2dnrV2_t* pCalibdbV2, char* param_mode, char * snr_name)
537 {
538 Abayer2dnr_result_V2_t res = ABAYER2DNR_RET_SUCCESS;
539 int calib_idx = 0;
540 int tuning_idx = 0;
541
542
543 if(pParams == NULL || pCalibdbV2 == NULL
544 || param_mode == NULL || snr_name == NULL) {
545 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
546 return ABAYER2DNR_RET_NULL_POINTER;
547 }
548
549 res = bayer2dnr_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx);
550 if(res != ABAYER2DNR_RET_SUCCESS) {
551 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
552 }
553
554 res = bayer2dnr_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx);
555
556 return res;
557
558 }
559
560 RKAIQ_END_DECLARE
561
562