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