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