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