1 
2 
3 #include "rk_aiq_abayernr_algo_bayernr_v2.h"
4 
5 RKAIQ_BEGIN_DECLARE
6 
bayernr_get_mode_by_name_V2(struct list_head * pCalibdbList,char * name,CalibDb_Bayernr_V2_t ** ppProfile)7 Abayernr_result_t bayernr_get_mode_by_name_V2(struct list_head *pCalibdbList, char *name, CalibDb_Bayernr_V2_t** ppProfile)
8 {
9     int i = 0;
10     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
11 
12     if(pCalibdbList == NULL) {
13         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
14         return ABAYERNR_RET_NULL_POINTER;
15     }
16 
17     if(name == NULL) {
18         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
19         return ABAYERNR_RET_NULL_POINTER;
20     }
21 
22     if(ppProfile == NULL) {
23         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
24         return ABAYERNR_RET_NULL_POINTER;
25     }
26 
27 #if 1
28     *ppProfile = NULL;
29     struct list_head* p;
30     p = pCalibdbList->next;
31     while (p != pCalibdbList)
32     {
33         CalibDb_Bayernr_V2_t* pProfile = container_of(p, CalibDb_Bayernr_V2_t, listItem);
34         LOGE_ANR("%s:%d %s  %p \n",
35                  __FUNCTION__, __LINE__, pProfile->modeName, p);
36         if (!strncmp(pProfile->modeName, name, sizeof(pProfile->modeName))) {
37             *ppProfile = pProfile;
38             return res;
39         }
40         p = p->next;
41     }
42 
43     CalibDb_Bayernr_V2_t* pProfile = container_of(pCalibdbList->next, CalibDb_Bayernr_V2_t, listItem);
44     *ppProfile = pProfile;
45 #else
46 
47 
48 #endif
49 
50     return res;
51 
52 }
53 
bayernr2D_get_setting_by_name_V2(struct list_head * pSettingList,char * name,Calibdb_Bayernr_2Dparams_V2_t ** ppSetting)54 Abayernr_result_t bayernr2D_get_setting_by_name_V2(struct list_head *pSettingList, char *name, Calibdb_Bayernr_2Dparams_V2_t** ppSetting)
55 {
56     int i = 0;
57     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
58 
59     if(pSettingList == NULL) {
60         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
61         return ABAYERNR_RET_NULL_POINTER;
62     }
63 
64     if(name == NULL) {
65         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
66         return ABAYERNR_RET_NULL_POINTER;
67     }
68 
69     if(ppSetting == NULL) {
70         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
71         return ABAYERNR_RET_NULL_POINTER;
72     }
73 
74     *ppSetting = NULL;
75 
76     struct list_head* p;
77     p = pSettingList->next;
78     while (p != pSettingList)
79     {
80         Calibdb_Bayernr_2Dparams_V2_t* pSetting = container_of(p, Calibdb_Bayernr_2Dparams_V2_t, listItem);
81         LOGD_ANR("%s:%d:  %s  %p ",
82                  __FUNCTION__, __LINE__, pSetting->snr_mode, p);
83         if (!strncmp(pSetting->snr_mode, name, sizeof(pSetting->snr_mode))) {
84             *ppSetting = pSetting;
85             return res;
86         }
87         p = p->next;
88     }
89 
90     Calibdb_Bayernr_2Dparams_V2_t* pSetting = container_of(pSettingList->next, Calibdb_Bayernr_2Dparams_V2_t, listItem);
91     *ppSetting = pSetting;
92     return res;
93 
94 }
95 
bayernr3D_get_setting_by_name_V2(struct list_head * pSettingList,char * name,CalibDb_Bayernr_3DParams_V2_t ** ppSetting)96 Abayernr_result_t bayernr3D_get_setting_by_name_V2(struct list_head *pSettingList, char *name, CalibDb_Bayernr_3DParams_V2_t** ppSetting)
97 {
98     int i = 0;
99     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
100 
101     if(pSettingList == NULL) {
102         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
103         return ABAYERNR_RET_NULL_POINTER;
104     }
105 
106     if(name == NULL) {
107         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
108         return ABAYERNR_RET_NULL_POINTER;
109     }
110 
111     if(ppSetting == NULL) {
112         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
113         return ABAYERNR_RET_NULL_POINTER;
114     }
115 
116     *ppSetting = NULL;
117 
118     struct list_head* p;
119     p = pSettingList->next;
120     while (p != pSettingList)
121     {
122         CalibDb_Bayernr_3DParams_V2_t* pSetting = container_of(p, CalibDb_Bayernr_3DParams_V2_t, listItem);
123         LOGD_ANR("%s:%d %s  %p ",
124                  __FUNCTION__, __LINE__, pSetting->snr_mode, p);
125         if (!strncmp(pSetting->snr_mode, name, sizeof(pSetting->snr_mode))) {
126             *ppSetting = pSetting;
127             return res;
128         }
129         p = p->next;
130     }
131 
132     CalibDb_Bayernr_3DParams_V2_t* pSetting = container_of(pSettingList->next, CalibDb_Bayernr_3DParams_V2_t, listItem);
133     *ppSetting = pSetting;
134 
135     return res;
136 
137 }
138 
139 
140 
bayernr2D_config_setting_param_V2(RK_Bayernr_2D_Params_V2_t * pParams,struct list_head * pCalibdbList,char * param_mode,char * snr_name)141 Abayernr_result_t bayernr2D_config_setting_param_V2(RK_Bayernr_2D_Params_V2_t *pParams, struct list_head *pCalibdbList, char* param_mode, char * snr_name)
142 {
143     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
144     CalibDb_Bayernr_V2_t *pProfile;
145     Calibdb_Bayernr_2Dparams_V2_t* p2DParams;
146 
147     LOGI_ANR("%s(%d): enter\n", __FUNCTION__, __LINE__);
148     if(pParams == NULL) {
149         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
150         return ABAYERNR_RET_NULL_POINTER;
151     }
152 
153     if(pCalibdbList == NULL) {
154         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
155         return ABAYERNR_RET_NULL_POINTER;
156     }
157 
158     if(param_mode == NULL) {
159         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
160         return ABAYERNR_RET_NULL_POINTER;
161     }
162 
163     if(snr_name == NULL) {
164         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
165         return ABAYERNR_RET_NULL_POINTER;
166     }
167 
168     res = bayernr_get_mode_by_name_V2(pCalibdbList, param_mode, &pProfile);
169     if(res != ABAYERNR_RET_SUCCESS) {
170         LOGW_ANR("%s(%d): error!!!  can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
171     }
172 
173     res = bayernr2D_get_setting_by_name_V2(&pProfile->st2DParams.listHead, snr_name, &p2DParams);
174     if(res != ABAYERNR_RET_SUCCESS) {
175         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
176     }
177 
178     res = bayernr2D_init_params_V2(pParams, p2DParams);
179     pParams->bayernrv2_2dnr_enable = pProfile->st2DParams.bayernrv2_2dnr_enable;
180 
181     LOGI_ANR("%s(%d): exit\n", __FUNCTION__, __LINE__);
182     return res;
183 
184 }
185 
bayernr3D_config_setting_param_V2(RK_Bayernr_3D_Params_V2_t * pParams,struct list_head * pCalibdbList,char * param_mode,char * snr_name)186 Abayernr_result_t bayernr3D_config_setting_param_V2(RK_Bayernr_3D_Params_V2_t *pParams, struct list_head *pCalibdbList, char* param_mode, char * snr_name)
187 {
188     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
189     CalibDb_Bayernr_V2_t *pProfile;
190     CalibDb_Bayernr_3DParams_V2_t* p3DParams;
191 
192     if(pParams == NULL) {
193         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
194         return ABAYERNR_RET_NULL_POINTER;
195     }
196 
197     if(pCalibdbList == NULL) {
198         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
199         return ABAYERNR_RET_NULL_POINTER;
200     }
201 
202     if(param_mode == NULL) {
203         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
204         return ABAYERNR_RET_NULL_POINTER;
205     }
206 
207     if(snr_name == NULL) {
208         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
209         return ABAYERNR_RET_NULL_POINTER;
210     }
211 
212     res = bayernr_get_mode_by_name_V2(pCalibdbList, param_mode, &pProfile);
213     if(res != ABAYERNR_RET_SUCCESS) {
214         LOGW_ANR("%s(%d): error!!!  can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
215     }
216 
217     res = bayernr3D_get_setting_by_name_V2(&pProfile->st3DParams.listHead, snr_name, &p3DParams);
218     if(res != ABAYERNR_RET_SUCCESS) {
219         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
220 
221     }
222 
223     res = bayernr3D_init_params_V2(pParams, p3DParams);
224     pParams->bayernrv2_tnr_enable = pProfile->st3DParams.bayernrv2_tnr_enable;
225     return res;
226 
227 }
228 
229 
bayernr2D_init_params_V2(RK_Bayernr_2D_Params_V2_t * pParams,Calibdb_Bayernr_2Dparams_V2_t * pCalibdbParams)230 Abayernr_result_t bayernr2D_init_params_V2(RK_Bayernr_2D_Params_V2_t *pParams, Calibdb_Bayernr_2Dparams_V2_t* pCalibdbParams)
231 {
232     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
233     int i = 0;
234     int j = 0;
235 
236     LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
237     if(pParams == NULL) {
238         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
239         return ABAYERNR_RET_NULL_POINTER;
240     }
241 
242     if(pCalibdbParams == NULL) {
243         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
244         return ABAYERNR_RET_NULL_POINTER;
245     }
246 
247     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
248         pParams->iso[i] = pCalibdbParams->iso[i];
249         pParams->bayernrv2_filter_strength_r[i] = pCalibdbParams->bayernrv2_filter_strength_r[i];
250         pParams->bayernrv2_filter_edgesofts_r[i] = pCalibdbParams->bayernrv2_filter_edgesofts_r[i];
251         pParams->bayernrv2_filter_out_wgt_r[i] = pCalibdbParams->bayernrv2_filter_out_wgt_r[i];
252         pParams->bayernrv2_filter_soft_threshold_ratio_r[i] = pCalibdbParams->bayernrv2_filter_soft_threshold_ratio_r[i];
253         pParams->bayernrv2_gauss_guide_r[i] = pCalibdbParams->bayernrv2_gauss_guide_r[i];
254 
255         for(int k = 0; k < 8; k++) {
256             pParams->bayernrv2_edge_filter_wgt_r[i][k] = pCalibdbParams->bayernrv2_edge_filter_wgt_r[i][k];
257         }
258         for(int k = 0; k < 16; k++) {
259             pParams->bayernrv2_filter_sigma_r[i][k] = pCalibdbParams->bayernrv2_filter_sigma_r[i][k];
260         }
261     }
262 
263     for(int i = 0; i < 8; i++) {
264         pParams->bayernrv2_edge_filter_lumapoint_r[i] = pCalibdbParams->bayernrv2_edge_filter_lumapoint_r[i];
265     }
266 
267     for(int i = 0; i < 16; i++) {
268         pParams->bayernrv2_filter_lumapoint_r[i] = pCalibdbParams->bayernrv2_filter_lumapoint_r[i];
269     }
270 
271     LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__);
272 
273     return res;
274 }
275 
bayernr3D_init_params_V2(RK_Bayernr_3D_Params_V2_t * pParams,CalibDb_Bayernr_3DParams_V2_t * pCalibdbParams)276 Abayernr_result_t bayernr3D_init_params_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDb_Bayernr_3DParams_V2_t* pCalibdbParams)
277 {
278     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
279     int i = 0;
280     int j = 0;
281 
282     LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
283     if(pParams == NULL) {
284         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
285         return ABAYERNR_RET_NULL_POINTER;
286     }
287 
288     if(pCalibdbParams == NULL) {
289         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
290         return ABAYERNR_RET_NULL_POINTER;
291     }
292 
293     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
294         pParams->iso[i] = pCalibdbParams->iso[i];
295         pParams->bayernrv2_tnr_filter_strength_r[i] = pCalibdbParams->bayernrv2_tnr_filter_strength_r[i];
296         pParams->bayernrv2_tnr_lo_clipwgt_r[i] = pCalibdbParams->bayernrv2_tnr_lo_clipwgt_r[i];
297         pParams->bayernrv2_tnr_hi_clipwgt_r[i] = pCalibdbParams->bayernrv2_tnr_hi_clipwgt_r[i];
298         pParams->bayernrv2_tnr_softwgt_r[i] = pCalibdbParams->bayernrv2_tnr_softwgt_r[i];
299 
300         for(int k = 0; k < 16; k++) {
301             pParams->bayernrv2_sigma_r[i][k] = pCalibdbParams->bayernrv2_sigma_r[i][k];
302         }
303 
304     }
305 
306     for(int i = 0; i < 16; i++) {
307         pParams->bayernrv2_lumapoint_r[i] = pCalibdbParams->bayernrv2_lumapoint_r[i];
308     }
309 
310     LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__);
311 
312     return res;
313 }
314 
315 
bayernr2D_select_params_by_ISO_V2(RK_Bayernr_2D_Params_V2_t * pParams,RK_Bayernr_2D_Params_V2_Select_t * pSelect,Abayernr_ExpInfo_t * pExpInfo)316 Abayernr_result_t bayernr2D_select_params_by_ISO_V2(RK_Bayernr_2D_Params_V2_t *pParams, RK_Bayernr_2D_Params_V2_Select_t *pSelect, Abayernr_ExpInfo_t *pExpInfo)
317 {
318     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
319     int iso = 50;
320 
321     if(pParams == NULL) {
322         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
323         return ABAYERNR_RET_NULL_POINTER;
324     }
325 
326     if(pSelect == NULL) {
327         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
328         return ABAYERNR_RET_NULL_POINTER;
329     }
330 
331     if(pExpInfo == NULL) {
332         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
333         return ABAYERNR_RET_NULL_POINTER;
334     }
335 
336     iso = pExpInfo->arIso[pExpInfo->hdr_mode];
337 
338     LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso);
339 
340     int isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM];
341     int isoGain = MAX(int(iso / 50), 1);
342     int isoGainLow = 0;
343     int isoGainHig = 0;
344     int isoGainCorrect = 1;
345     int isoLevelLow = 0;
346     int isoLevelHig = 0;
347     int isoLevelCorrect = 0;
348     int i, j;
349     float tmpf;
350 
351 #ifndef RK_SIMULATOR_HW
352     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
353         isoGainStd[i] = pParams->iso[i] / 50;
354     }
355 #else
356     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
357         isoGainStd[i] = 1 * (1 << i);
358     }
359 #endif
360 
361     for (i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM - 1; i++)
362     {
363         if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1])
364         {
365             isoGainLow = isoGainStd[i];
366             isoGainHig = isoGainStd[i + 1];
367             isoLevelLow = i;
368             isoLevelHig = i + 1;
369             isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
370             isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
371         }
372     }
373 
374     LOGD_ANR("%s:%d iso:%d high:%d low:%d\n",
375              __FUNCTION__, __LINE__,
376              isoGain, isoGainHig, isoGainLow);
377 
378     pSelect->bayernrv2_2dnr_enable = pParams->bayernrv2_2dnr_enable;
379 
380     for (i = 0; i < 8; i++)
381     {
382         pSelect->bayernrv2_edge_filter_lumapoint[i] = pParams->bayernrv2_edge_filter_lumapoint_r[i];
383         pSelect->bayernrv2_edge_filter_wgt[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_edge_filter_wgt_r[isoLevelLow][i]
384                                                 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_edge_filter_wgt_r[isoLevelHig][i];
385     }
386 
387     pSelect->bayernrv2_filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_strength_r[isoLevelLow]
388                                          + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_strength_r[isoLevelHig];
389 
390     tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_gauss_guide_r[isoLevelLow]
391            + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_gauss_guide_r[isoLevelHig];
392     pSelect->bayernrv2_gauss_guide = tmpf != 0;
393 
394     for (i = 0; i < 16; i++)
395     {
396         pSelect->bayernrv2_filter_lumapoint[i] = pParams->bayernrv2_filter_lumapoint_r[i];
397         pSelect->bayernrv2_filter_sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_sigma_r[isoLevelLow][i]
398                                              + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_sigma_r[isoLevelHig][i];
399     }
400 
401     pSelect->bayernrv2_filter_edgesofts = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_edgesofts_r[isoLevelLow]
402                                           + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_edgesofts_r[isoLevelHig];
403     pSelect->bayernrv2_filter_soft_threshold_ratio = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_soft_threshold_ratio_r[isoLevelLow]
404             + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_soft_threshold_ratio_r[isoLevelHig];
405     pSelect->bayernrv2_filter_out_wgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_out_wgt_r[isoLevelLow]
406                                         + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_out_wgt_r[isoLevelHig];
407 
408 
409     pSelect->bayernrv2_edge_filter_en = 0;
410 
411     return res;
412 }
413 
414 
415 
416 
bayernr3D_select_params_by_ISO_V2(RK_Bayernr_3D_Params_V2_t * pParams,RK_Bayernr_3D_Params_V2_Select_t * pSelect,Abayernr_ExpInfo_t * pExpInfo)417 Abayernr_result_t bayernr3D_select_params_by_ISO_V2(RK_Bayernr_3D_Params_V2_t *pParams, RK_Bayernr_3D_Params_V2_Select_t *pSelect, Abayernr_ExpInfo_t *pExpInfo)
418 {
419     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
420     int iso = 50;
421 
422     if(pParams == NULL) {
423         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
424         return ABAYERNR_RET_NULL_POINTER;
425     }
426 
427     if(pSelect == NULL) {
428         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
429         return ABAYERNR_RET_NULL_POINTER;
430     }
431 
432     if(pExpInfo == NULL) {
433         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
434         return ABAYERNR_RET_NULL_POINTER;
435     }
436 
437     iso = pExpInfo->arIso[pExpInfo->hdr_mode];
438 
439     LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso);
440 
441     int isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM];
442     int isoGain = MAX(int(iso / 50), 1);
443     int isoGainLow = 0;
444     int isoGainHig = 0;
445     int isoGainCorrect = 1;
446     int isoLevelLow = 0;
447     int isoLevelHig = 0;
448     int isoLevelCorrect = 0;
449     int i, j;
450     float tmpf;
451 
452 #ifndef RK_SIMULATOR_HW
453     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
454         isoGainStd[i] = pParams->iso[i] / 50;
455     }
456 #else
457     for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
458         isoGainStd[i] = 1 * (1 << i);
459     }
460 #endif
461 
462     for (i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM - 1; i++) {
463         if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1]) {
464             isoGainLow = isoGainStd[i];
465             isoGainHig = isoGainStd[i + 1];
466             isoLevelLow = i;
467             isoLevelHig = i + 1;
468             isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
469             isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
470         }
471     }
472 
473     LOGD_ANR("%s:%d iso:%d high:%d low:%d\n",
474              __FUNCTION__, __LINE__,
475              isoGain, isoGainHig, isoGainLow);
476 
477     pSelect->bayernrv2_tnr_enable = pParams->bayernrv2_tnr_enable;
478 
479     pSelect->bayernrv2_tnr_filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_filter_strength_r[isoLevelLow]
480             + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_filter_strength_r[isoLevelHig];
481     pSelect->bayernrv2_tnr_lo_clipwgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_lo_clipwgt_r[isoLevelLow]
482                                         + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_lo_clipwgt_r[isoLevelHig];
483     pSelect->bayernrv2_tnr_hi_clipwgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_hi_clipwgt_r[isoLevelLow]
484                                         + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_hi_clipwgt_r[isoLevelHig];
485     pSelect->bayernrv2_tnr_softwgt    = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_softwgt_r[isoLevelLow]
486                                         + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_softwgt_r[isoLevelHig];
487 
488     for (i = 0; i < 16; i++) {
489         pSelect->bayernrv2_tnr_lumapoint[i] = pParams->bayernrv2_lumapoint_r[i];
490         pSelect->bayernrv2_tnr_sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_sigma_r[isoLevelLow][i]
491                                           + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_sigma_r[isoLevelHig][i];
492     }
493 
494     return res;
495 }
496 
497 
bayernr_get_trans_V2(int tmpfix)498 unsigned short bayernr_get_trans_V2(int tmpfix)
499 {
500     int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440,
501                          13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710,
502                          26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346,
503                          38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704,
504                          48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040,
505                          57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536
506                         };
507     int logprecision = 6;
508     int logfixbit = 16;
509     int logtblbit = 16;
510     int logscalebit = 12;
511     int logfixmul = (1 << logfixbit);
512     long long x8, one = 1;
513     long long gx, n = 0, ix1, ix2, dp;
514     long long lt1, lt2, dx, fx;
515     int i, j = 1;
516 
517     x8 = tmpfix + (1 << 8);
518     // find highest bit
519     for (i = 0; i < 32; i++)
520     {
521         if (x8 & j)
522         {
523             n = i;
524         }
525         j = j << 1;
526     }
527 
528     gx = x8 - (one << n);
529     gx = gx * (one << logprecision) * logfixmul;
530     gx = gx / (one << n);
531 
532     ix1 = gx >> logfixbit;
533     dp = gx - ix1 * logfixmul;
534 
535     ix2 = ix1 + 1;
536 
537     lt1 = logtablef[ix1];
538     lt2 = logtablef[ix2];
539 
540     dx = lt1 * (logfixmul - dp) + lt2 * dp;
541 
542     fx = dx + (n - 8) * (one << (logfixbit + logtblbit));
543     fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1));
544     fx = fx >> (logfixbit + logtblbit - logscalebit);
545 
546     return fx;
547 }
548 
bayernr2D_fix_transfer_V2(RK_Bayernr_2D_Params_V2_Select_t * pSelect,RK_Bayernr_2D_Fix_V2_t * pFix,float fStrength,Abayernr_ExpInfo_t * pExpInfo)549 Abayernr_result_t bayernr2D_fix_transfer_V2(RK_Bayernr_2D_Params_V2_Select_t* pSelect, RK_Bayernr_2D_Fix_V2_t *pFix, float fStrength, Abayernr_ExpInfo_t *pExpInfo)
550 {
551     //--------------------------- v2 params ----------------------------//
552     float frameiso[3];
553     float frameEt[3];
554     float fdGain[3];
555     int dGain[3] = {0};
556     int i = 0;
557     int ypos[8] = {4, 4, 4, 3, 3, 2, 2, 1};
558     int xpos[8] = {4, 2, 0, 3, 1, 2, 0, 1};
559     float tmp1, tmp2, edgesofts;
560     int bayernr_sw_bil_gauss_weight[16];
561     int tmp;
562 
563     if(pSelect == NULL) {
564         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
565         return ABAYERNR_RET_NULL_POINTER;
566     }
567 
568     if(pFix == NULL) {
569         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
570         return ABAYERNR_RET_NULL_POINTER;
571     }
572 
573     if(pExpInfo == NULL) {
574         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
575         return ABAYERNR_RET_NULL_POINTER;
576     }
577 
578     if(fStrength <= 0.0f) {
579         fStrength = 0.000001;
580     }
581 
582     // hdr gain
583     int framenum = pExpInfo->hdr_mode + 1;
584 
585     frameiso[0] = pExpInfo->arIso[0];
586     frameiso[1] = pExpInfo->arIso[1];
587     frameiso[2] = pExpInfo->arIso[2];
588 
589     frameEt[0] = pExpInfo->arTime[0];
590     frameEt[1] = pExpInfo->arTime[1];
591     frameEt[2] = pExpInfo->arTime[2];
592 
593 
594     for (i = 0; i < framenum; i++) {
595         fdGain[i] = frameiso[i] * frameEt[i];
596         LOGD_ANR("bayernrv2 idx[%d] iso:%f time:%f dgain:%f\n",
597                  i, frameiso[i], frameEt[i], fdGain[i]);
598     }
599 
600     for (i = 0; i < framenum; i++) {
601         fdGain[i] = fdGain[framenum - 1] / fdGain[i];
602         dGain[i] = int(fdGain[i] * (1 << FIXNLMCALC));
603         LOGD_ANR("bayernrv2 idx[%d] fdgain:%f dgain:%d \n",
604                  i, fdGain[i], dGain[i]);
605     }
606 
607     //ISP_BAYNR_3A00_CTRL
608     pFix->baynr_gauss_en = pSelect->bayernrv2_gauss_guide;
609     pFix->baynr_log_bypass = 0;
610     pFix->baynr_en = pSelect->bayernrv2_2dnr_enable;
611 
612     //pFix->bayernr_gray_mode = 0;
613 
614 
615     // ISP_BAYNR_3A00_DGAIN0-2
616     for(i = 0; i < framenum; i++) {
617         tmp = dGain[i] / ( 1 << (FIXNLMCALC - FIXGAINBIT));
618         pFix->baynr_dgain[i] = CLIP(tmp, 0, 0xffff);
619     }
620 
621     // ISP_BAYNR_3A00_PIXDIFF
622     tmp = FIXDIFMAX - 1;
623     pFix->baynr_pix_diff = CLIP(tmp, 0, 0x3fff);
624 
625     // ISP_BAYNR_3A00_THLD
626     tmp = LUTPRECISION_FIX;
627     pFix->baynr_diff_thld = CLIP(tmp, 0, 0x3ff);
628     tmp = (int)(pSelect->bayernrv2_filter_soft_threshold_ratio / fStrength * (1 << 10));
629     pFix->baynr_softthld = CLIP(tmp, 0, 0x3ff);
630 
631     // ISP_BAYNR_3A00_W1_STRENG
632     tmp = (int)(pSelect->bayernrv2_filter_strength * fStrength * (1 << FIXBILSTRG));
633     pFix->bltflt_streng = CLIP(tmp, 0, 0xfff);
634     tmp = (int)(pSelect->bayernrv2_filter_out_wgt * fStrength * (1 << 10));
635     pFix->baynr_reg_w1 = CLIP(tmp, 0, 0x3ff);
636 
637     // ISP_BAYNR_3A00_SIGMAX0-15   ISP_BAYNR_3A00_SIGMAY0-15
638     for(i = 0; i < 16; i++) {
639         //pFix->sigma_x[i] = bayernr_get_trans_V2(pSelect->bayernrv2_filter_lumapoint[i]);
640         tmp = pSelect->bayernrv2_filter_lumapoint[i];
641         pFix->sigma_x[i] = CLIP(tmp, 0, 0xffff);
642         tmp = pSelect->bayernrv2_filter_sigma[i];
643         pFix->sigma_y[i] = CLIP(tmp, 0, 0xffff);
644     }
645 
646     // ISP_BAYNR_3A00_WRIT_D
647 #if 0
648     pFix->weit_d[0] = 0x178;
649     pFix->weit_d[1] = 0x249;
650     pFix->weit_d[2] = 0x31d;
651 #else
652     edgesofts = pSelect->bayernrv2_filter_edgesofts;
653     for(i = 0; i < 8; i++)
654     {
655         tmp1 = (float)(ypos[i] * ypos[i] + xpos[i] * xpos[i]);
656         tmp1 = tmp1 / (2 * edgesofts * edgesofts);
657         tmp2 = expf(-tmp1);
658         bayernr_sw_bil_gauss_weight[i] = (int)(tmp1 * (EXP2RECISION_FIX / (1 << 7)));
659         bayernr_sw_bil_gauss_weight[i + 8] = (int)(tmp2 * (1 << FIXVSTINV));
660     }
661 
662     if(0) {
663         //gray mode
664         tmp = bayernr_sw_bil_gauss_weight[12];
665         pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
666         tmp = bayernr_sw_bil_gauss_weight[10];
667         pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
668         tmp = bayernr_sw_bil_gauss_weight[11];
669         pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
670 
671     } else {
672         tmp = bayernr_sw_bil_gauss_weight[13];
673         pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff);
674         tmp = bayernr_sw_bil_gauss_weight[14];
675         pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff);
676         tmp = bayernr_sw_bil_gauss_weight[15];
677         pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff);
678     }
679 
680 #endif
681 
682 
683 
684     bayernr2D_fix_printf_V2(pFix);
685 
686     return ABAYERNR_RET_SUCCESS;
687 
688 }
689 
bayernr3D_fix_transfer_V2(RK_Bayernr_3D_Params_V2_Select_t * pSelect,RK_Bayernr_3D_Fix_V2_t * pFix,float fStrength,Abayernr_ExpInfo_t * pExpInfo)690 Abayernr_result_t bayernr3D_fix_transfer_V2(RK_Bayernr_3D_Params_V2_Select_t* pSelect, RK_Bayernr_3D_Fix_V2_t *pFix, float fStrength, Abayernr_ExpInfo_t *pExpInfo)
691 {
692     int i = 0;
693     int tmp;
694 
695     if(fStrength <= 0.0f) {
696         fStrength = 0.000001;
697     }
698 
699     // BAY3D_BAY3D_CTRL
700     pFix->bay3d_exp_sel = 1;
701     pFix->bay3d_bypass_en = 0;
702     pFix->bay3d_pk_en = 1;  // 1 use local pk, 0 use global pk
703     pFix->bay3d_en_i = pSelect->bayernrv2_tnr_enable;
704 
705     // BAY3D_BAY3D_KALRATIO
706     tmp = (int)(pSelect->bayernrv2_tnr_softwgt / fStrength * (1 << FIXTNRSFT));
707     pFix->bay3d_softwgt = CLIP(tmp, 0, 0x3ff);
708 
709     tmp = (int)(1.5 * (1 << 10));  //(pSelect->bayertnr_sigratio*(1<<FIXBILSTRG));
710     pFix->bay3d_sigratio = CLIP(tmp, 0, 0x3fff);
711 
712     // BAY3D_BAY3D_GLBPK2
713     tmp = 1024;
714     pFix->bay3d_glbpk2 = CLIP(tmp, 0, 0xfffffff);
715 
716     // BAY3D_BAY3D_KALSTR
717     tmp = (int)(pSelect->bayernrv2_tnr_filter_strength / fStrength * (1 << 10));//  (int)(0.06*(1<<10));    // less, filter strong  // classic is 0.1
718     pFix->bay3d_exp_str = CLIP(tmp, 0, 0x3ff);
719     tmp = (int)(1.0 * (1 << FIXTNRSTG));
720     pFix->bay3d_str = CLIP(tmp, 0, 0x100);
721 
722     // BAY3D_BAY3D_WGTLMT
723     tmp = (int)(((float)1 - pSelect->bayernrv2_tnr_hi_clipwgt) * fStrength * (1 << FIXTNRWGT));    // 0.0325
724     pFix->bay3d_wgtlmt_h = CLIP(tmp, 0, 0x3ff);
725     tmp = (int)(((float)1 - pSelect->bayernrv2_tnr_lo_clipwgt) * fStrength  * (1 << FIXTNRWGT));    // 0.0325
726     pFix->bay3d_wgtlmt_l = CLIP(tmp, 0, 0x3ff);
727 
728     // BAY3D_BAY3D_SIG_X0
729     for(i = 0; i < 16; i++)
730     {
731         //pFix->bay3d_sig_x[i] = bayernr_get_trans_V2(pSelect->bayernrv2_tnr_lumapoint[i]);
732         tmp = pSelect->bayernrv2_tnr_lumapoint[i];
733         pFix->bay3d_sig_x[i] = CLIP(tmp, 0, 0xffff);
734 
735         tmp = pSelect->bayernrv2_tnr_sigma[i];
736         pFix->bay3d_sig_y[i] = CLIP(tmp, 0, 0xffff);
737     }
738 
739     bayernr3D_fix_printf_V2(pFix);
740 
741     return ABAYERNR_RET_SUCCESS;
742 }
743 
bayernr2D_fix_printf_V2(RK_Bayernr_2D_Fix_V2_t * pFix)744 Abayernr_result_t bayernr2D_fix_printf_V2(RK_Bayernr_2D_Fix_V2_t * pFix)
745 {
746     //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
747     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
748 
749     if(pFix == NULL) {
750         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
751         return ABAYERNR_RET_NULL_POINTER;
752     }
753 
754     LOGD_ANR("%s:(%d) ############# bayernr2D enter######################## \n", __FUNCTION__, __LINE__);
755     //ISP_BAYNR_3A00_CTRL(0x0000)
756     LOGD_ANR("(0x0000) gauss_en:0x%x log_bypass:0x%x en:0x%x \n",
757              pFix->baynr_gauss_en,
758              pFix->baynr_log_bypass,
759              pFix->baynr_en);
760 
761     // ISP_BAYNR_3A00_DGAIN0-2 (0x0004 - 0x0008)
762     for(int i = 0; i < 3; i++) {
763         LOGD_ANR("(0x0004 - 0x0008) dgain[%d]:0x%x \n",
764                  i, pFix->baynr_dgain[i]);
765     }
766 
767     // ISP_BAYNR_3A00_PIXDIFF(0x000c)
768     LOGD_ANR("(0x000c) pix_diff:0x%x \n",
769              pFix->baynr_pix_diff);
770 
771     // ISP_BAYNR_3A00_THLD(0x0010)
772     LOGD_ANR("(0x000d) diff_thld:0x%x softthld:0x%x \n",
773              pFix->baynr_diff_thld,
774              pFix->baynr_softthld);
775 
776     // ISP_BAYNR_3A00_W1_STRENG(0x0014)
777     LOGD_ANR("(0x0014) bltflt_streng:0x%x reg_w1:0x%x \n",
778              pFix->bltflt_streng,
779              pFix->baynr_reg_w1);
780 
781     // ISP_BAYNR_3A00_SIGMAX0-15(0x0018 - 0x0034)
782     for(int i = 0; i < 16; i++) {
783         LOGD_ANR("(0x0018 - 0x0034) sig_x[%d]:0x%x \n",
784                  i, pFix->sigma_x[i]);
785     }
786 
787     // ISP_BAYNR_3A00_SIGMAY0-15(0x0038 - 0x0054)
788     for(int i = 0; i < 16; i++) {
789         LOGD_ANR("(0x0038 - 0x0054) sig_y[%d]:0x%x \n",
790                  i, pFix->sigma_y[i]);
791     }
792 
793     // ISP_BAYNR_3A00_WRIT_D(0x0058)
794     LOGD_ANR("(0x0058) weit_d[0]:0x%x weit_d[1]:0x%x weit_d[2]:0x%x\n",
795              pFix->weit_d[0],
796              pFix->weit_d[1],
797              pFix->weit_d[2]);
798 
799     LOGD_ANR("%s:(%d) ############# bayernr2D exit ######################## \n", __FUNCTION__, __LINE__);
800     return res;
801 }
802 
803 
bayernr3D_fix_printf_V2(RK_Bayernr_3D_Fix_V2_t * pFix)804 Abayernr_result_t bayernr3D_fix_printf_V2(RK_Bayernr_3D_Fix_V2_t * pFix)
805 {
806     //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
807     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
808 
809     if(pFix == NULL) {
810         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
811         return ABAYERNR_RET_NULL_POINTER;
812     }
813 
814     LOGD_ANR("%s:(%d) ############# bayernr3D enter######################## \n", __FUNCTION__, __LINE__);
815 
816     // BAY3D_BAY3D_CTRL (0x0080)
817     LOGD_ANR("(0x0080) exp_sel:0x%x bypass_en:0x%x pk_en:0x%x en_i:0x%x\n",
818              pFix->bay3d_exp_sel,
819              pFix->bay3d_bypass_en,
820              pFix->bay3d_pk_en,
821              pFix->bay3d_en_i);
822 
823     // BAY3D_BAY3D_KALRATIO (0x0084)
824     LOGD_ANR("(0x0084) softwgt:0x%x sigratio:0x%x \n",
825              pFix->bay3d_softwgt,
826              pFix->bay3d_sigratio);
827 
828     // BAY3D_BAY3D_GLBPK2 (0x0088)
829     LOGD_ANR("(0x0088) glbpk2:0x%x \n",
830              pFix->bay3d_glbpk2);
831 
832     // BAY3D_BAY3D_KALSTR (0x008c)
833     LOGD_ANR("(0x008c) exp_str:0x%x str:0x%x \n",
834              pFix->bay3d_exp_str,
835              pFix->bay3d_str);
836 
837     // BAY3D_BAY3D_WGTLMT (0x0090)
838     LOGD_ANR("(0x0090) wgtlmt_h:0x%x wgtlmt_l:0x%x \n",
839              pFix->bay3d_wgtlmt_h,
840              pFix->bay3d_wgtlmt_l);
841 
842     // BAY3D_BAY3D_SIG_X0-16  (0x0094 - 0x00b0)
843     for(int i = 0; i < 16; i++) {
844         LOGD_ANR("(0x0094 - 0x00b0) sig_x[%d]:0x%x \n",
845                  i, pFix->bay3d_sig_x[i]);
846     }
847 
848     // BAY3D_BAY3D_SIG_Y0-16 (0x00b4 - 0x00d0)
849     for(int i = 0; i < 16; i++) {
850         LOGD_ANR("(0x00b4 - 0x00d0) sig_y[%d]:0x%x \n",
851                  i, pFix->bay3d_sig_y[i]);
852     }
853 
854 
855     LOGD_ANR("%s:(%d) ############# bayernr3D exit ######################## \n", __FUNCTION__, __LINE__);
856     return res;
857 }
858 
859 
bayernr2D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)860 Abayernr_result_t bayernr2D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx)
861 {
862 
863     int i = 0;
864     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
865 
866     if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) {
867         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
868         return ABAYERNR_RET_NULL_POINTER;
869     }
870 
871     for(i = 0; i < pCalibdb->Bayernr2D.Setting_len; i++) {
872         if(strncmp(name, pCalibdb->Bayernr2D.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
873             break;
874         }
875     }
876 
877     if(i < pCalibdb->Bayernr2D.Setting_len) {
878         *tuning_idx = i;
879     } else {
880         *tuning_idx = 0;
881     }
882 
883     for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
884         if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
885             break;
886         }
887     }
888 
889     if(i < pCalibdb->CalibPara.Setting_len) {
890         *calib_idx = i;
891     } else {
892         *calib_idx = 0;
893     }
894 
895     LOGD_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
896     return res;
897 
898 
899 }
900 
901 
902 
903 
bayernr2D_init_params_json_V2(RK_Bayernr_2D_Params_V2_t * pParams,CalibDbV2_BayerNrV2_t * pCalibdb,int calib_idx,int tuning_idx)904 Abayernr_result_t bayernr2D_init_params_json_V2(RK_Bayernr_2D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdb, int calib_idx, int tuning_idx)
905 {
906     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
907     CalibDbV2_BayerNrV2_C_ISO_t *pCalibIso = NULL;
908     CalibDbV2_BayerNrV2_2d_ISO_t *pTuningISO = NULL;
909     int i = 0;
910     int j = 0;
911 
912     LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
913     if(pParams == NULL || pCalibdb == NULL || calib_idx < 0 || tuning_idx < 0) {
914         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
915         return ABAYERNR_RET_NULL_POINTER;
916     }
917 
918     for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
919         pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i];
920         pParams->iso[i] = pCalibIso->iso;
921         for(int k = 0; k < 16; k++) {
922             pParams->bayernrv2_filter_lumapoint_r[k] = pCalibIso->lumapoint[k];
923             pParams->bayernrv2_filter_sigma_r[i][k] = pCalibIso->sigma[k];
924         }
925     }
926 
927     for(int i = 0; i < pCalibdb->Bayernr2D.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
928         pTuningISO = &pCalibdb->Bayernr2D.Setting[tuning_idx].Tuning_ISO[i];
929         pParams->iso[i] = pTuningISO->iso;
930         pParams->bayernrv2_filter_strength_r[i] = pTuningISO->filter_strength;
931         pParams->bayernrv2_filter_edgesofts_r[i] = pTuningISO->edgesofts;
932         pParams->bayernrv2_filter_out_wgt_r[i] = pTuningISO->weight;
933         pParams->bayernrv2_filter_soft_threshold_ratio_r[i] = pTuningISO->ratio;
934         pParams->bayernrv2_gauss_guide_r[i] = pTuningISO->gauss_guide;
935     }
936 
937     LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__);
938 
939     return res;
940 }
941 
bayernr2D_config_setting_param_json_V2(RK_Bayernr_2D_Params_V2_t * pParams,CalibDbV2_BayerNrV2_t * pCalibdbV2,char * param_mode,char * snr_name)942 Abayernr_result_t bayernr2D_config_setting_param_json_V2(RK_Bayernr_2D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdbV2, char* param_mode, char * snr_name)
943 {
944     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
945     int calib_idx = 0;
946     int tuning_idx = 0;
947 
948 
949     if(pParams == NULL || pCalibdbV2 == NULL
950             || param_mode == NULL || snr_name == NULL) {
951         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
952         return ABAYERNR_RET_NULL_POINTER;
953     }
954 
955     res = bayernr2D_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx);
956     if(res != ABAYERNR_RET_SUCCESS) {
957         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
958     }
959 
960     res = bayernr2D_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx);
961     pParams->bayernrv2_2dnr_enable = pCalibdbV2->Bayernr2D.enable;
962 
963     return res;
964 
965 }
966 
967 
968 
bayernr3D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)969 Abayernr_result_t bayernr3D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx)
970 {
971     int i = 0;
972     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
973 
974     if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) {
975         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
976         return ABAYERNR_RET_NULL_POINTER;
977     }
978 
979     for(i = 0; i < pCalibdb->Bayernr3D.Setting_len; i++) {
980         if(strncmp(name, pCalibdb->Bayernr3D.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
981             break;
982         }
983     }
984 
985     if(i < pCalibdb->Bayernr3D.Setting_len) {
986         *tuning_idx = i;
987     } else {
988         *tuning_idx = 0;
989     }
990 
991     for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
992         if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
993             break;
994         }
995     }
996 
997     if(i < pCalibdb->CalibPara.Setting_len) {
998         *calib_idx = i;
999     } else {
1000         *calib_idx = 0;
1001     }
1002 
1003     LOGD_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
1004     return res;
1005 
1006 
1007 }
1008 
1009 
bayernr3D_init_params_json_V2(RK_Bayernr_3D_Params_V2_t * pParams,CalibDbV2_BayerNrV2_t * pCalibdb,int calib_idx,int tuning_idx)1010 Abayernr_result_t bayernr3D_init_params_json_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdb, int calib_idx, int tuning_idx)
1011 {
1012     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
1013     CalibDbV2_BayerNrV2_C_ISO_t *pCalibIso = NULL;
1014     CalibDbV2_BayerNrV2_3d_ISO_t *pTuningIso = NULL;
1015 
1016     LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
1017     if(pParams == NULL || pCalibdb == NULL) {
1018         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
1019         return ABAYERNR_RET_NULL_POINTER;
1020     }
1021 
1022     for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
1023         pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i];
1024         pParams->iso[i] = pCalibIso->iso;
1025         for(int k = 0; k < 16; k++) {
1026             pParams->bayernrv2_lumapoint_r[k] = pCalibIso->lumapoint[k];
1027             pParams->bayernrv2_sigma_r[i][k] = pCalibIso->sigma[k];
1028         }
1029     }
1030 
1031     for(int i = 0; i < pCalibdb->Bayernr3D.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) {
1032         pTuningIso = &pCalibdb->Bayernr3D.Setting[tuning_idx].Tuning_ISO[i];
1033 
1034         pParams->iso[i] = pTuningIso->iso;
1035         pParams->bayernrv2_tnr_filter_strength_r[i] = pTuningIso->filter_strength;
1036         pParams->bayernrv2_tnr_lo_clipwgt_r[i] = pTuningIso->lo_clipwgt;
1037         pParams->bayernrv2_tnr_hi_clipwgt_r[i] = pTuningIso->hi_clipwgt;
1038         pParams->bayernrv2_tnr_softwgt_r[i] = pTuningIso->softwgt;
1039 
1040     }
1041 
1042     LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__);
1043 
1044     return res;
1045 }
1046 
1047 
bayernr3D_config_setting_param_json_V2(RK_Bayernr_3D_Params_V2_t * pParams,CalibDbV2_BayerNrV2_t * pCalibdbV2,char * param_mode,char * snr_name)1048 Abayernr_result_t bayernr3D_config_setting_param_json_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdbV2, char* param_mode, char * snr_name)
1049 {
1050     Abayernr_result_t res = ABAYERNR_RET_SUCCESS;
1051     int calib_idx = 0;
1052     int tuning_idx = 0;
1053 
1054     if(pParams == NULL || pCalibdbV2 == NULL
1055             || param_mode == NULL || snr_name == NULL) {
1056         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
1057         return ABAYERNR_RET_NULL_POINTER;
1058     }
1059 
1060     res = bayernr3D_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx);
1061     if(res != ABAYERNR_RET_SUCCESS) {
1062         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
1063 
1064     }
1065 
1066     res = bayernr3D_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx);
1067     pParams->bayernrv2_tnr_enable = pCalibdbV2->Bayernr3D.enable;
1068     return res;
1069 
1070 }
1071 
1072 RKAIQ_END_DECLARE
1073 
1074