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