1
2
3 #include "rk_aiq_anr_algo_bayernr.h"
4
5 RKAIQ_BEGIN_DECLARE
6
bayernr_get_mode_cell_idx_by_name(CalibDb_BayerNr_2_t * pCalibdb,char * name,int * mode_idx)7 ANRresult_t bayernr_get_mode_cell_idx_by_name(CalibDb_BayerNr_2_t *pCalibdb, char *name, int *mode_idx)
8 {
9 int i = 0;
10 ANRresult_t res = ANR_RET_SUCCESS;
11
12 if(pCalibdb == NULL) {
13 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
14 return ANR_RET_NULL_POINTER;
15 }
16
17 if(name == NULL) {
18 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
19 return ANR_RET_NULL_POINTER;
20 }
21
22 if(mode_idx == NULL) {
23 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
24 return ANR_RET_NULL_POINTER;
25 }
26
27 if(pCalibdb->mode_num < 1) {
28 LOGE_ANR("%s(%d): bayerne mode cell is zero\n", __FUNCTION__, __LINE__);
29 return ANR_RET_NULL_POINTER;
30 }
31
32 for(i = 0; i < pCalibdb->mode_num; i++) {
33 if(strncmp(name, pCalibdb->mode_cell[i].name, sizeof(pCalibdb->mode_cell[i].name)) == 0) {
34 break;
35 }
36 }
37
38 if(i < pCalibdb->mode_num) {
39 *mode_idx = i;
40 res = ANR_RET_SUCCESS;
41 } else {
42 *mode_idx = 0;
43 res = ANR_RET_FAILURE;
44 }
45
46 LOGD_ANR("%s:%d mode_name:%s mode_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *mode_idx, i);
47 return res;
48
49 }
50
bayernr_get_setting_idx_by_name(CalibDb_BayerNr_2_t * pCalibdb,char * name,int mode_idx,int * setting_idx)51 ANRresult_t bayernr_get_setting_idx_by_name(CalibDb_BayerNr_2_t *pCalibdb, char *name, int mode_idx, int *setting_idx)
52 {
53 int i = 0;
54 ANRresult_t res = ANR_RET_SUCCESS;
55
56 if(pCalibdb == NULL) {
57 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
58 return ANR_RET_NULL_POINTER;
59 }
60
61 if(name == NULL) {
62 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
63 return ANR_RET_NULL_POINTER;
64 }
65
66 if(setting_idx == NULL) {
67 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
68 return ANR_RET_NULL_POINTER;
69 }
70
71 for(i = 0; i < CALIBDB_NR_SHARP_SETTING_LEVEL; i++) {
72 if(strncmp(name, pCalibdb->mode_cell[mode_idx].setting[i].snr_mode, sizeof(pCalibdb->mode_cell[mode_idx].setting[i].snr_mode)) == 0) {
73 break;
74 }
75 }
76
77 if(i < CALIBDB_NR_SHARP_SETTING_LEVEL) {
78 *setting_idx = i;
79 res = ANR_RET_SUCCESS;
80 } else {
81 *setting_idx = 0;
82 res = ANR_RET_FAILURE;
83 }
84
85 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *setting_idx, i);
86 return res;
87
88 }
89
bayernr_config_setting_param(RKAnr_Bayernr_Params_t * pParams,CalibDb_BayerNr_2_t * pCalibdb,char * param_mode,char * snr_name)90 ANRresult_t bayernr_config_setting_param(RKAnr_Bayernr_Params_t *pParams, CalibDb_BayerNr_2_t *pCalibdb, char* param_mode, char * snr_name)
91 {
92 ANRresult_t res = ANR_RET_SUCCESS;
93 int mode_idx = 0;
94 int setting_idx = 0;
95
96 res = bayernr_get_mode_cell_idx_by_name(pCalibdb, param_mode, &mode_idx);
97 if(res != ANR_RET_SUCCESS) {
98 LOGW_ANR("%s(%d): error!!! can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
99 }
100
101 res = bayernr_get_setting_idx_by_name(pCalibdb, snr_name, mode_idx, &setting_idx);
102 if(res != ANR_RET_SUCCESS) {
103 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
104 }
105
106 res = init_bayernr_params(pParams, pCalibdb, mode_idx, setting_idx);
107
108 return res;
109
110 }
111
init_bayernr_params(RKAnr_Bayernr_Params_t * pParams,CalibDb_BayerNr_2_t * pCalibdb,int mode_idx,int setting_idx)112 ANRresult_t init_bayernr_params(RKAnr_Bayernr_Params_t *pParams, CalibDb_BayerNr_2_t *pCalibdb, int mode_idx, int setting_idx)
113 {
114 ANRresult_t res = ANR_RET_SUCCESS;
115 int i = 0;
116 int j = 0;
117
118 LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
119 if(pParams == NULL) {
120 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
121 return ANR_RET_NULL_POINTER;
122 }
123
124 if(pCalibdb == NULL) {
125 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
126 return ANR_RET_NULL_POINTER;
127 }
128
129 //RKAnr_Bayernr_Params_t *pParams = &pANRCtx->stAuto.stBayernrParams;
130 //CalibDb_BayerNr_t *pCalibdb = &pANRConfig->stBayernrCalib;
131
132 CalibDb_BayerNR_Params_t *pSetting = &pCalibdb->mode_cell[mode_idx].setting[setting_idx];
133
134 for(i = 0; i < MAX_ISO_STEP; i++) {
135 #ifndef RK_SIMULATOR_HW
136 pParams->iso[i] = pSetting->iso[i];
137 #endif
138 pParams->a[i] = pSetting->iso[i];
139 pParams->b[i] = pSetting->iso[i];
140 pParams->filtpar[i] = pSetting->filtPara[i];
141 LOGI_ANR("a[%d]:%f filtpar[%d]:%f\n",
142 i, pParams->a[i],
143 i, pParams->filtpar[i]);
144 }
145
146 pParams->halfpatch = 1;
147 pParams->halfblock = 1;
148
149 for(i = 0; i < 7; i++) {
150 pParams->ctrPit[i] = 1.0;
151 }
152
153 for(i = 0; i < 8; i++) {
154 pParams->luLevel[i] = pSetting->luLevelVal[i];
155 LOGI_ANR("luLevel[%d]:%f \n",
156 i, pParams->luLevel[i]);
157 }
158
159 for(i = 0; i < MAX_ISO_STEP; i++) {
160 for(j = 0; j < 8; j++) {
161 pParams->luRatio[i][j] = pSetting->luRatio[j][i];
162 }
163 }
164
165 for(i = 0; i < MAX_ISO_STEP; i++) {
166 for(j = 0; j < 4; j++) {
167 pParams->w[i][j] = pSetting->fixW[j][i];
168 }
169 }
170
171 pParams->peaknoisesigma = pSetting->lamda;
172 pParams->sw_rawnr_gauss_en = pSetting->gauss_en;
173 pParams->rgain_offs = pSetting->RGainOff;
174 pParams->rgain_filp = pSetting->RGainFilp;
175 pParams->bgain_offs = pSetting->BGainOff;
176 pParams->bgain_filp = pSetting->BGainFilp;
177 pParams->bayernr_edgesoftness = pSetting->edgeSoftness;
178 pParams->bayernr_gauss_weight0 = 0;
179 pParams->bayernr_gauss_weight1 = 0;
180
181 memcpy(pParams->bayernr_ver_char, pCalibdb->version, sizeof(pParams->bayernr_ver_char));
182
183 LOGI_ANR("%s:(%d) oyyf bayerner xml config end! ver:%s \n", __FUNCTION__, __LINE__, pParams->bayernr_ver_char);
184
185 return res;
186 }
187
188
189
bayernr_get_setting_idx_by_name_json(CalibDbV2_BayerNrV1_t * pCalibdb,char * name,int * calib_idx,int * tuning_idx)190 ANRresult_t bayernr_get_setting_idx_by_name_json(CalibDbV2_BayerNrV1_t *pCalibdb, char *name, int *calib_idx, int * tuning_idx)
191 {
192 int i = 0;
193 ANRresult_t res = ANR_RET_SUCCESS;
194
195 if(pCalibdb == NULL) {
196 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
197 return ANR_RET_NULL_POINTER;
198 }
199
200 if(name == NULL) {
201 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
202 return ANR_RET_NULL_POINTER;
203 }
204
205 if(calib_idx == NULL) {
206 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
207 return ANR_RET_NULL_POINTER;
208 }
209
210 if(tuning_idx == NULL) {
211 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
212 return ANR_RET_NULL_POINTER;
213 }
214
215 for(i = 0; i < pCalibdb->TuningPara.Setting_len; i++) {
216 if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
217 break;
218 }
219 }
220
221 if(i < pCalibdb->TuningPara.Setting_len) {
222 *tuning_idx = i;
223 } else {
224 *tuning_idx = 0;
225 }
226
227 for(i = 0; i < pCalibdb->CalibPara.Setting_len; i++) {
228 if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
229 break;
230 }
231 }
232
233 if(i < pCalibdb->CalibPara.Setting_len) {
234 *calib_idx = i;
235 } else {
236 *calib_idx = 0;
237 }
238
239 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *calib_idx, i);
240 return res;
241
242 }
243
244
init_bayernr_params_json(RKAnr_Bayernr_Params_t * pParams,CalibDbV2_BayerNrV1_t * pCalibdb,int calib_idx,int tuning_idx)245 ANRresult_t init_bayernr_params_json(RKAnr_Bayernr_Params_t *pParams, CalibDbV2_BayerNrV1_t *pCalibdb, int calib_idx, int tuning_idx)
246 {
247 ANRresult_t res = ANR_RET_SUCCESS;
248 int i = 0;
249 int j = 0;
250
251 LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__);
252 if(pParams == NULL) {
253 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
254 return ANR_RET_NULL_POINTER;
255 }
256
257 if(pCalibdb == NULL) {
258 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
259 return ANR_RET_NULL_POINTER;
260 }
261
262 CalibDbV2_BayerNrV1_C_Set_t *pCalibSetting = &pCalibdb->CalibPara.Setting[calib_idx];
263 CalibDbV2_BayerNrV1_T_Set_t *pTuningSetting = &pCalibdb->TuningPara.Setting[tuning_idx];
264
265 CalibDbV2_BayerNrV1_C_ISO_t *pCalib_ISO = NULL;
266 CalibDbV2_BayerNrV1_T_ISO_t *pTuning_ISO = NULL;
267
268
269 for(i = 0; i < pTuningSetting->Tuning_ISO_len; i++) {
270 pTuning_ISO = &pTuningSetting->Tuning_ISO[i];
271
272 #ifndef RK_SIMULATOR_HW
273 pParams->iso[i] = pTuning_ISO->iso;
274 #endif
275 pParams->a[i] = pTuning_ISO->iso;
276 pParams->b[i] = pTuning_ISO->iso;
277 pParams->filtpar[i] = pTuning_ISO->filtPara;
278 LOGI_ANR("a[%d]:%f filtpar[%d]:%f\n",
279 i, pParams->a[i],
280 i, pParams->filtpar[i]);
281 }
282
283 pParams->halfpatch = 1;
284 pParams->halfblock = 1;
285
286 for(i = 0; i < 7; i++) {
287 pParams->ctrPit[i] = 1.0;
288 }
289
290 for(i = 0; i < 8; i++) {
291 pParams->luLevel[i] = pCalibSetting->Calib_ISO[0].luLevelVal[i];
292 LOGI_ANR("luLevel[%d]:%f \n",
293 i, pParams->luLevel[i]);
294 }
295
296 for(i = 0; i < pCalibSetting->Calib_ISO_len; i++) {
297 for(j = 0; j < 8; j++) {
298 pParams->luRatio[i][j] = pCalibSetting->Calib_ISO[i].luRatio[j];
299 }
300 }
301
302 for(i = 0; i < pTuningSetting->Tuning_ISO_len; i++) {
303 pParams->w[i][0] = pTuningSetting->Tuning_ISO[i].fixW0;
304 pParams->w[i][1] = pTuningSetting->Tuning_ISO[i].fixW1;
305 pParams->w[i][2] = pTuningSetting->Tuning_ISO[i].fixW2;
306 pParams->w[i][3] = pTuningSetting->Tuning_ISO[i].fixW3;
307 }
308
309 pParams->peaknoisesigma = pTuningSetting->Tuning_ISO[0].lamda;
310 pParams->sw_rawnr_gauss_en = pTuningSetting->Tuning_ISO[0].gauss_en;
311 pParams->rgain_offs = pTuningSetting->Tuning_ISO[0].RGainOff;
312 pParams->rgain_filp = pTuningSetting->Tuning_ISO[0].RGainFilp;
313 pParams->bgain_offs = pTuningSetting->Tuning_ISO[0].BGainOff;
314 pParams->bgain_filp = pTuningSetting->Tuning_ISO[0].BGainFilp;
315
316 pParams->bayernr_edgesoftness = 0;
317 pParams->bayernr_gauss_weight0 = 0;
318 pParams->bayernr_gauss_weight1 = 0;
319
320 strncpy(pParams->bayernr_ver_char, pCalibdb->Version, sizeof(pParams->bayernr_ver_char)-1);
321
322 LOGI_ANR("%s:(%d) oyyf bayerner xml config end! ver:%s \n", __FUNCTION__, __LINE__, pParams->bayernr_ver_char);
323
324 bayernr_algo_param_printf(pParams);
325
326 return res;
327 }
328
bayernr_algo_param_printf(RKAnr_Bayernr_Params_t * pParams)329 ANRresult_t bayernr_algo_param_printf(RKAnr_Bayernr_Params_t *pParams)
330 {
331 int i, j;
332
333 if(pParams == NULL) {
334 LOGE_ANR("NULL pointer\n");
335 return ANR_RET_NULL_POINTER;
336 }
337
338 for(i = 0; i < MAX_ISO_STEP; i++) {
339 #ifndef RK_SIMULATOR_HW
340 LOGD_ANR("bayernr: iso:%f\n",
341 pParams->iso[i]);
342 #endif
343
344 LOGD_ANR("a[%d]:%f filtpar[%d]:%f\n",
345 i, pParams->a[i],
346 i, pParams->filtpar[i]);
347 }
348
349 for(i = 0; i < 8; i++) {
350 LOGD_ANR("luLevel[%d]:%f \n",
351 i, pParams->luLevel[i]);
352 }
353
354 for(i = 0; i < MAX_ISO_STEP; i++) {
355 for(j = 0; j < 8; j++) {
356 LOGD_ANR("luLevel[%d][%d]:%f \n",
357 i, j, pParams->luRatio[i][j]);
358 }
359
360 LOGD_ANR("fixw[%d]:%f %f %f %f \n",
361 i, pParams->w[i][0], pParams->w[i][1], pParams->w[i][2], pParams->w[i][3]);
362 }
363
364 LOGD_ANR(" lamda:%f gauss_en:%d\n",
365 pParams->peaknoisesigma, pParams->sw_rawnr_gauss_en);
366
367 return ANR_RET_SUCCESS;
368 }
369
bayernr_config_setting_param_json(RKAnr_Bayernr_Params_t * pParams,CalibDbV2_BayerNrV1_t * pCalibdb,char * param_mode,char * snr_name)370 ANRresult_t bayernr_config_setting_param_json(RKAnr_Bayernr_Params_t *pParams, CalibDbV2_BayerNrV1_t *pCalibdb, char* param_mode, char * snr_name)
371 {
372 ANRresult_t res = ANR_RET_SUCCESS;
373 int calib_idx = 0;
374 int tuning_idx = 0;
375
376 res = bayernr_get_setting_idx_by_name_json(pCalibdb, snr_name, &calib_idx, &tuning_idx);
377 if(res != ANR_RET_SUCCESS) {
378 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
379 }
380
381 res = init_bayernr_params_json(pParams, pCalibdb, calib_idx, tuning_idx);
382
383 return res;
384
385 }
386
selsec_hdr_parmas_by_ISO(RKAnr_Bayernr_Params_t * stBayerNrParams,RKAnr_Bayernr_Params_Select_t * stBayerNrParamsSelected,ANRExpInfo_t * pExpInfo)387 ANRresult_t selsec_hdr_parmas_by_ISO(RKAnr_Bayernr_Params_t *stBayerNrParams, RKAnr_Bayernr_Params_Select_t *stBayerNrParamsSelected, ANRExpInfo_t *pExpInfo)
388 {
389 float frameiso[3];
390 float frameEt[3];
391 float fdgain[3];
392 int i = 0;
393
394 if(stBayerNrParams == NULL) {
395 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
396 return ANR_RET_NULL_POINTER;
397 }
398
399 if(stBayerNrParamsSelected == NULL) {
400 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
401 return ANR_RET_NULL_POINTER;
402 }
403
404 if(pExpInfo == NULL) {
405 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
406 return ANR_RET_NULL_POINTER;
407 }
408
409 int framenum = pExpInfo->hdr_mode + 1;
410
411 frameiso[0] = pExpInfo->arAGain[0] * pExpInfo->arDGain[0];
412 frameiso[1] = pExpInfo->arAGain[1] * pExpInfo->arDGain[1];
413 frameiso[2] = pExpInfo->arAGain[2] * pExpInfo->arDGain[2];
414
415 frameEt[0] = pExpInfo->arTime[0];
416 frameEt[1] = pExpInfo->arTime[1];
417 frameEt[2] = pExpInfo->arTime[2];
418
419 for(int j = 0; j < framenum; j++)
420 {
421 ////降噪参数获取
422 //确定iso等级
423 //共有7个iso等级:50 100 200 400 800 1600 3200 6400 12800
424 // isogain: 1 2 4 8 16 32 64 128 256
425 // isolevel: 0 1 2 3 4 5 6 7 8
426 int isoGainStd[MAX_ISO_STEP];
427 int isoGain = int(frameiso[j]);
428 int isoGainLow = 0; //向下一个isoGain,用做参数插值:y=float(isoGainHig-isoGain)/float(isoGainHig-isoGainLow)*y[isoLevelLow]
429 // +float(isoGain-isoGainLow)/float(isoGainHig-isoGainLow)*y[isoLevelHig];
430 int isoGainHig = 0; //向上一个isoGain
431 int isoGainCorrect = 1; //选择最近的一档iso的配置
432
433 int isoLevelLow = 0;
434 int isoLevelHig = 0;
435 int isoLevelCorrect = 0;
436
437 #ifndef RK_SIMULATOR_HW
438 for(int i = 0; i < MAX_ISO_STEP; i++) {
439 isoGainStd[i] = stBayerNrParams->iso[i] / 50;
440 }
441 #else
442 for(int i = 0; i < MAX_ISO_STEP; i++) {
443 isoGainStd[i] = 1 * (1 << i);
444 }
445 #endif
446
447 for (i = 0; i < MAX_ISO_STEP - 1; i++)
448 {
449 if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1])
450 {
451 isoGainLow = isoGainStd[i];
452 isoGainHig = isoGainStd[i + 1];
453 isoLevelLow = i;
454 isoLevelHig = i + 1;
455 isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
456 isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
457 }
458 }
459
460 //VST变换参数, bilinear
461 stBayerNrParamsSelected->a[j] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->a[isoLevelLow]
462 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->a[isoLevelHig];
463
464 stBayerNrParamsSelected->b[j] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->b[isoLevelLow]
465 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->b[isoLevelHig];
466
467 stBayerNrParamsSelected->b[j] = 0;
468 stBayerNrParamsSelected->t0[j] = 0;
469
470 stBayerNrParamsSelected->filtPar[j] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->filtpar[isoLevelLow]
471 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->filtpar[isoLevelHig];
472
473 }
474
475 for (i = 0; i < framenum; i++) {
476 frameiso[i] = frameiso[i] * 50;
477 fdgain[i] = frameiso[i] * frameEt[i];
478 }
479
480 for (i = 0; i < framenum; i++) {
481 fdgain[i] = fdgain[framenum - 1] / fdgain[i];
482 #if 0
483 stBayerNrParamsSelected->sw_dgain[i] = fdgain[i];
484 #else
485 stBayerNrParamsSelected->sw_dgain[i] = sqrt(fdgain[i]);
486 #endif
487 }
488
489 float filtParDiscount = (float)0.1;
490 for (i = 0; i < framenum; i++)
491 {
492 float gainsqrt = sqrt(fdgain[i]);
493 #if 0
494 float par = (stBayerNrParamsSelected->filtPar[i] * filtParDiscount);
495
496 LOGD_ANR("gainsqrt:%f filtpar:%f, total:%f\n",
497 gainsqrt, stBayerNrParamsSelected->filtPar[i], par * gainsqrt);
498 stBayerNrParamsSelected->filtPar[i] = par * gainsqrt;
499 #else
500 stBayerNrParamsSelected->filtPar[i] = stBayerNrParamsSelected->filtPar[i] * gainsqrt;
501 #endif
502 }
503
504 if(framenum <= 1 ) {
505 stBayerNrParamsSelected->gausskparsq = int((1 * 1) * float(1 << (FIXNLMCALC)));// * (1 << 7);
506 } else {
507 stBayerNrParamsSelected->gausskparsq = int((1 * 1) * float(1 << (FIXNLMCALC)));
508 }
509 stBayerNrParamsSelected->sigmaPar = 0 * (1 << FIXNLMCALC);
510 stBayerNrParamsSelected->thld_diff = (int(LUTMAXM1_FIX * LUTPRECISION_FIX));
511 stBayerNrParamsSelected->thld_chanelw = int(0.1 * float(1 << FIXNLMCALC));
512 stBayerNrParamsSelected->pix_diff = FIXDIFMAX - 1;
513 stBayerNrParamsSelected->log_bypass = 0; //0 is none, 1 is G and RB all en, 2 only en G, 3 only RB;
514
515 if(framenum <= 1 ) {
516 stBayerNrParamsSelected->filtPar[1] = stBayerNrParamsSelected->filtPar[0];
517 stBayerNrParamsSelected->filtPar[2] = stBayerNrParamsSelected->filtPar[0];
518 stBayerNrParamsSelected->sw_dgain[1] = stBayerNrParamsSelected->sw_dgain[0];
519 stBayerNrParamsSelected->sw_dgain[2] = stBayerNrParamsSelected->sw_dgain[0];
520 }
521 return ANR_RET_SUCCESS;
522 }
523
select_bayernr_params_by_ISO(RKAnr_Bayernr_Params_t * stBayerNrParams,RKAnr_Bayernr_Params_Select_t * stBayerNrParamsSelected,ANRExpInfo_t * pExpInfo)524 ANRresult_t select_bayernr_params_by_ISO(RKAnr_Bayernr_Params_t *stBayerNrParams, RKAnr_Bayernr_Params_Select_t *stBayerNrParamsSelected, ANRExpInfo_t *pExpInfo)
525 {
526 ANRresult_t res = ANR_RET_SUCCESS;
527 int iso = 50;
528
529 if(stBayerNrParams == NULL) {
530 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
531 return ANR_RET_NULL_POINTER;
532 }
533
534 if(stBayerNrParamsSelected == NULL) {
535 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
536 return ANR_RET_NULL_POINTER;
537 }
538
539 if(pExpInfo == NULL) {
540 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
541 return ANR_RET_NULL_POINTER;
542 }
543
544 iso = pExpInfo->arIso[pExpInfo->hdr_mode];
545
546 LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso);
547
548 int isoGainStd[MAX_ISO_STEP];
549 int isoGain = MAX(int(iso / 50), 1);
550 int isoGainLow = 0;
551 int isoGainHig = 0;
552 int isoGainCorrect = 1;
553 int isoLevelLow = 0;
554 int isoLevelHig = 0;
555 int isoLevelCorrect = 0;
556 int i, j;
557
558 #ifndef RK_SIMULATOR_HW
559 for(int i = 0; i < MAX_ISO_STEP; i++) {
560 isoGainStd[i] = stBayerNrParams->iso[i] / 50;
561 }
562 #else
563 for(int i = 0; i < MAX_ISO_STEP; i++) {
564 isoGainStd[i] = 1 * (1 << i);
565 }
566 #endif
567
568
569 for (i = 0; i < MAX_ISO_STEP - 1; i++)
570 {
571 if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1])
572 {
573 isoGainLow = isoGainStd[i];
574 isoGainHig = isoGainStd[i + 1];
575 isoLevelLow = i;
576 isoLevelHig = i + 1;
577 isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1];
578 isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1);
579 break;
580 }
581 }
582
583 if(i == MAX_ISO_STEP - 1) {
584 if(isoGain < isoGainStd[0]) {
585 isoGainLow = isoGainStd[0];
586 isoGainHig = isoGainStd[1];
587 isoLevelLow = 0;
588 isoLevelHig = 1;
589 isoGainCorrect = ((isoGain - isoGainStd[0]) <= (isoGainStd[1] - isoGain)) ? isoGainStd[0] : isoGainStd[1];
590 isoLevelCorrect = ((isoGain - isoGainStd[0]) <= (isoGainStd[1] - isoGain)) ? 0 : (1);
591 }
592
593 if(isoGain > isoGainStd[MAX_ISO_STEP - 1]) {
594 isoGainLow = isoGainStd[MAX_ISO_STEP - 2];
595 isoGainHig = isoGainStd[MAX_ISO_STEP - 1];
596 isoLevelLow = MAX_ISO_STEP - 2;
597 isoLevelHig = MAX_ISO_STEP - 1;
598 isoGainCorrect = ((isoGain - isoGainStd[MAX_ISO_STEP - 2]) <= (isoGainStd[MAX_ISO_STEP - 1] - isoGain)) ? isoGainStd[MAX_ISO_STEP - 2] : isoGainStd[MAX_ISO_STEP - 1];
599 isoLevelCorrect = ((isoGain - isoGainStd[MAX_ISO_STEP - 2]) <= (isoGainStd[MAX_ISO_STEP - 1] - isoGain)) ? (MAX_ISO_STEP - 2) : (MAX_ISO_STEP - 1);
600 }
601 }
602
603 LOGD_ANR("%s:%d iso:%d high:%d low:%d\n",
604 __FUNCTION__, __LINE__,
605 isoGain, isoGainHig, isoGainLow);
606
607 //VST变换参数, bilinear
608 stBayerNrParamsSelected->a[0] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->a[isoLevelLow]
609 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->a[isoLevelHig];
610
611 stBayerNrParamsSelected->b[0] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->b[isoLevelLow]
612 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->b[isoLevelHig];
613
614 stBayerNrParamsSelected->b[0] = 0;
615 stBayerNrParamsSelected->t0[0] = 0;
616
617 //领域halfBlock、搜索halfBlock、降噪系数filtPar,其中halfPatch和halfBlock都是对单通道而言
618 stBayerNrParamsSelected->halfPatch = stBayerNrParams->halfpatch;
619 stBayerNrParamsSelected->halfBlock = stBayerNrParams->halfblock;
620
621 stBayerNrParamsSelected->filtPar[0] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->filtpar[isoLevelLow]
622 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->filtpar[isoLevelHig];
623
624 #ifdef BAYER_NR_DEBUG
625 LOGD_ANR("Patch=%d*%d\n", stBayerNrParamsSelected->halfPatch * 2 + 1, stBayerNrParamsSelected->halfPatch * 2 + 1);
626 LOGD_ANR("Block=%d*%d\n", stBayerNrParamsSelected->halfBlock * 2 + 1, stBayerNrParamsSelected->halfBlock * 2 + 1);
627 LOGD_ANR("filPar=%f\n", stBayerNrParamsSelected->filtPar);
628 #endif
629
630 for (i = 0; i < 7; i++)
631 {
632 stBayerNrParamsSelected->ctrPit[i] = stBayerNrParams->ctrPit[i];
633 }
634
635 for (i = 0; i < 8; i++)
636 {
637 stBayerNrParamsSelected->luLevel[i] = stBayerNrParams->luLevel[i];
638 stBayerNrParamsSelected->luRatio[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->luRatio[isoLevelLow][i]
639 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->luRatio[isoLevelHig][i];
640 }
641
642 stBayerNrParamsSelected->peaknoisesigma = stBayerNrParams->peaknoisesigma;
643 stBayerNrParamsSelected->sw_rawnr_gauss_en = stBayerNrParams->sw_rawnr_gauss_en;
644 for (i = 0; i < 4; i++)
645 {
646 stBayerNrParamsSelected->w[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->w[isoLevelLow][i]
647 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->w[isoLevelHig][i];
648 }
649 stBayerNrParamsSelected->bayernr_edgesoftness = stBayerNrParams->bayernr_edgesoftness;
650
651 stBayerNrParamsSelected->sw_bayernr_edge_filter_en = stBayerNrParams->sw_bayernr_edge_filter_en;
652 for (i = 0; i < 8; i++)
653 {
654 stBayerNrParamsSelected->sw_bayernr_edge_filter_lumapoint[i] = stBayerNrParams->sw_bayernr_edge_filter_lumapoint[i];
655 stBayerNrParamsSelected->sw_bayernr_edge_filter_wgt[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_edge_filter_wgt[isoLevelLow][i]
656 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_edge_filter_wgt[isoLevelHig][i];
657 }
658 stBayerNrParamsSelected->sw_bayernr_filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_strength[isoLevelLow]
659 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_strength[isoLevelHig];
660 for (i = 0; i < 16; i++)
661 {
662 stBayerNrParamsSelected->sw_bayernr_filter_lumapoint[i] = stBayerNrParams->sw_bayernr_filter_lumapoint[i];
663 stBayerNrParamsSelected->sw_bayernr_filter_sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_sigma[isoLevelLow][i]
664 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_sigma[isoLevelHig][i];
665 }
666 stBayerNrParamsSelected->sw_bayernr_filter_edgesofts = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_edgesofts[isoLevelLow]
667 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_edgesofts[isoLevelHig];
668 stBayerNrParamsSelected->sw_bayernr_filter_soft_threshold_ratio = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_soft_threshold_ratio[isoLevelLow]
669 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_soft_threshold_ratio[isoLevelHig];
670 stBayerNrParamsSelected->sw_bayernr_filter_out_wgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_out_wgt[isoLevelLow]
671 + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * stBayerNrParams->sw_bayernr_filter_out_wgt[isoLevelHig];
672
673 //oyyf: add some fix params select
674 memcpy(stBayerNrParamsSelected->bayernr_ver_char, stBayerNrParams->bayernr_ver_char, sizeof(stBayerNrParams->bayernr_ver_char));
675 stBayerNrParamsSelected->rgain_offs = stBayerNrParams->rgain_offs;
676 stBayerNrParamsSelected->rgain_filp = stBayerNrParams->rgain_filp;
677 stBayerNrParamsSelected->bgain_offs = stBayerNrParams->bgain_offs;
678 stBayerNrParamsSelected->bgain_filp = stBayerNrParams->bgain_filp;
679
680 stBayerNrParamsSelected->bayernr_gauss_weight0 = stBayerNrParams->bayernr_gauss_weight0;
681 stBayerNrParamsSelected->bayernr_gauss_weight1 = stBayerNrParams->bayernr_gauss_weight1;
682
683 stBayerNrParamsSelected->gausskparsq = int((1.15 * 1.15) * float(1 << (FIXNLMCALC)));
684 stBayerNrParamsSelected->sigmaPar = 0 * (1 << FIXNLMCALC);
685 stBayerNrParamsSelected->thld_diff = (int(LUTMAXM1_FIX * LUTPRECISION_FIX));
686 stBayerNrParamsSelected->thld_chanelw = int(0.1 * float(1 << FIXNLMCALC));
687 stBayerNrParamsSelected->pix_diff = FIXDIFMAX - 1;
688 stBayerNrParamsSelected->log_bypass = 0; //0 is none, 1 is G and RB all en, 2 only en G, 3 only RB;
689
690 //oyyf: if hdr open
691 selsec_hdr_parmas_by_ISO(stBayerNrParams, stBayerNrParamsSelected, pExpInfo);
692
693 return res;
694 }
695
696
bayernr_get_trans(int tmpfix)697 unsigned short bayernr_get_trans(int tmpfix)
698 {
699 int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440,
700 13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710,
701 26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346,
702 38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704,
703 48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040,
704 57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536
705 };
706 int logprecision = 6;
707 int logfixbit = 16;
708 int logtblbit = 16;
709 int logscalebit = 12;
710 int logfixmul = (1 << logfixbit);
711 long long x8, one = 1;
712 long long gx, n = 0, ix1, ix2, dp;
713 long long lt1, lt2, dx, fx;
714 int i, j = 1;
715
716 x8 = tmpfix + (1 << 8);
717 // find highest bit
718 for (i = 0; i < 32; i++)
719 {
720 if (x8 & j)
721 {
722 n = i;
723 }
724 j = j << 1;
725 }
726
727 gx = x8 - (one << n);
728 gx = gx * (one << logprecision) * logfixmul;
729 gx = gx / (one << n);
730
731 ix1 = gx >> logfixbit;
732 dp = gx - ix1 * logfixmul;
733
734 ix2 = ix1 + 1;
735
736 lt1 = logtablef[ix1];
737 lt2 = logtablef[ix2];
738
739 dx = lt1 * (logfixmul - dp) + lt2 * dp;
740
741 fx = dx + (n - 8) * (one << (logfixbit + logtblbit));
742 fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1));
743 fx = fx >> (logfixbit + logtblbit - logscalebit);
744
745 return fx;
746 }
747
bayernr_fix_tranfer(RKAnr_Bayernr_Params_Select_t * rawnr,RKAnr_Bayernr_Fix_t * pRawnrCfg,float fStrength)748 ANRresult_t bayernr_fix_tranfer(RKAnr_Bayernr_Params_Select_t* rawnr, RKAnr_Bayernr_Fix_t *pRawnrCfg, float fStrength)
749 {
750 ANRresult_t res = ANR_RET_SUCCESS;
751 int rawbit = 12;//rawBit;
752 float tmp;
753
754 LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
755
756 if(rawnr == NULL) {
757 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
758 return ANR_RET_NULL_POINTER;
759 }
760
761 if(pRawnrCfg == NULL) {
762 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
763 return ANR_RET_NULL_POINTER;
764 }
765
766 if(fStrength <= 0.0f) {
767 fStrength = 0.000001;
768 }
769
770 LOGD_ANR("%s(%d): strength:%f \n", __FUNCTION__, __LINE__, fStrength);
771
772 //(0x0004)
773 pRawnrCfg->gauss_en = rawnr->sw_rawnr_gauss_en;
774 pRawnrCfg->log_bypass = rawnr->log_bypass;
775
776 //(0x0008 - 0x00010)
777 pRawnrCfg->filtpar0 = (unsigned short)(rawnr->filtPar[0] * fStrength * (1 << FIXNLMCALC));
778 pRawnrCfg->filtpar1 = (unsigned short)(rawnr->filtPar[1] * fStrength * (1 << FIXNLMCALC));
779 pRawnrCfg->filtpar2 = (unsigned short)(rawnr->filtPar[2] * fStrength * (1 << FIXNLMCALC));
780 if(pRawnrCfg->filtpar0 > 0x3fff) {
781 pRawnrCfg->filtpar0 = 0x3fff;
782 }
783 if(pRawnrCfg->filtpar1 > 0x3fff) {
784 pRawnrCfg->filtpar1 = 0x3fff;
785 }
786 if(pRawnrCfg->filtpar2 > 0x3fff) {
787 pRawnrCfg->filtpar2 = 0x3fff;
788 }
789
790 //(0x0014 - 0x0001c)
791 pRawnrCfg->dgain0 = (unsigned int)(rawnr->sw_dgain[0] * (1 << FIXNLMCALC));
792 pRawnrCfg->dgain1 = (unsigned int)(rawnr->sw_dgain[1] * (1 << FIXNLMCALC));
793 pRawnrCfg->dgain2 = (unsigned int)(rawnr->sw_dgain[2] * (1 << FIXNLMCALC));
794 if(pRawnrCfg->dgain0 > 0x3ffff) {
795 pRawnrCfg->dgain0 = 0x3ffff;
796 }
797 if(pRawnrCfg->dgain1 > 0x3ffff) {
798 pRawnrCfg->dgain1 = 0x3ffff;
799 }
800 if(pRawnrCfg->dgain2 > 0x3ffff) {
801 pRawnrCfg->dgain2 = 0x3ffff;
802 }
803
804
805 //(0x0020 - 0x0002c)
806 for(int i = 0; i < 8; i++) {
807 pRawnrCfg->luration[i] = (unsigned short)(rawnr->luRatio[i] * (1 << FIXNLMCALC));
808 }
809
810 //(0x0030 - 0x0003c)
811 for(int i = 0; i < 8; i++) {
812 tmp = rawnr->luLevel[i] * ( 1 << (rawbit - 8) );
813 pRawnrCfg->lulevel[i] = bayernr_get_trans((int)tmp);
814 }
815 tmp = (float)((1 << rawbit) - 1);
816 pRawnrCfg->lulevel[8 - 1] = bayernr_get_trans((int)tmp);
817
818 //(0x0040)
819 pRawnrCfg->gauss = rawnr->gausskparsq;
820
821 //(0x0044)
822 pRawnrCfg->sigma = rawnr->sigmaPar;
823
824
825 //(0x0048)
826 pRawnrCfg->pix_diff = rawnr->pix_diff;
827
828
829 //(0x004c)
830 pRawnrCfg->thld_diff = rawnr->thld_diff;
831
832
833 //(0x0050)
834 pRawnrCfg->gas_weig_scl1 = rawnr->bayernr_gauss_weight0 * (1 << 8);
835 pRawnrCfg->gas_weig_scl2 = rawnr->bayernr_gauss_weight1 * (1 << 8);
836 pRawnrCfg->thld_chanelw = rawnr->thld_chanelw;
837
838
839
840 //(0x0054)
841 pRawnrCfg->lamda = rawnr->peaknoisesigma;
842
843
844 //(0x0058 - 0x0005c)
845 tmp = (rawnr->w[0] / fStrength * (1 << FIXNLMCALC));
846 if(tmp > 0x3ff) {
847 tmp = 0x3ff;
848 }
849 pRawnrCfg->fixw0 = (unsigned short)tmp;
850 tmp = (rawnr->w[1] / fStrength * (1 << FIXNLMCALC));
851 if(tmp > 0x3ff) {
852 tmp = 0x3ff;
853 }
854 pRawnrCfg->fixw1 = (unsigned short)tmp;;
855 tmp = (rawnr->w[2] / fStrength * (1 << FIXNLMCALC));
856 if(tmp > 0x3ff) {
857 tmp = 0x3ff;
858 }
859 pRawnrCfg->fixw2 = (unsigned short)tmp;
860 tmp = (rawnr->w[3] / fStrength * (1 << FIXNLMCALC));
861 if(tmp > 0x3ff) {
862 tmp = 0x3ff;
863 }
864 pRawnrCfg->fixw3 = (unsigned short)tmp;
865
866
867 //(0x0060 - 0x00068)
868 pRawnrCfg->wlamda0 = (pRawnrCfg->fixw0 * pRawnrCfg->lamda) >> FIXNLMCALC;
869 pRawnrCfg->wlamda1 = (pRawnrCfg->fixw1 * pRawnrCfg->lamda) >> FIXNLMCALC;
870 pRawnrCfg->wlamda2 = (pRawnrCfg->fixw2 * pRawnrCfg->lamda) >> FIXNLMCALC;
871
872
873 //(0x006c)
874 pRawnrCfg->rgain_filp = rawnr->rgain_filp;
875 pRawnrCfg->bgain_filp = rawnr->bgain_filp;
876
877 #if BAYERNR_FIX_VALUE_PRINTF
878 bayernr_fix_printf(pRawnrCfg);
879 #endif
880
881 LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
882
883 return res;
884
885 }
886
bayernr_fix_printf(RKAnr_Bayernr_Fix_t * pRawnrCfg)887 ANRresult_t bayernr_fix_printf(RKAnr_Bayernr_Fix_t * pRawnrCfg)
888 {
889 //FILE *fp = fopen("bayernr_regsiter.dat", "wb+");
890 ANRresult_t res = ANR_RET_SUCCESS;
891
892 if(pRawnrCfg == NULL) {
893 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
894 return ANR_RET_NULL_POINTER;
895 }
896
897 LOGD_ANR("%s:(%d) ############# rawnr enter######################## \n", __FUNCTION__, __LINE__);
898
899 //(0x0004)
900 LOGD_ANR("gauss_en:%d log_bypass:%d \n",
901 pRawnrCfg->gauss_en,
902 pRawnrCfg->log_bypass);
903
904 //(0x0008 - 0x00010)
905 LOGD_ANR("filtpar0-2:%d %d %d \n",
906 pRawnrCfg->filtpar0,
907 pRawnrCfg->filtpar1,
908 pRawnrCfg->filtpar2);
909
910 //(0x0014 - 0x0001c)
911 LOGD_ANR("bayernr (0x0014 - 0x0001c)dgain0-2:%d %d %d \n",
912 pRawnrCfg->dgain0,
913 pRawnrCfg->dgain1,
914 pRawnrCfg->dgain2);
915
916 //(0x0020 - 0x0002c)
917 for(int i = 0; i < 8; i++) {
918 LOGD_ANR("luration[%d]:%d \n", i, pRawnrCfg->luration[i]);
919 }
920
921 //(0x0030 - 0x0003c)
922 for(int i = 0; i < 8; i++) {
923 LOGD_ANR("lulevel[%d]:%d \n", i, pRawnrCfg->lulevel[i]);
924 }
925
926 //(0x0040)
927 LOGD_ANR("gauss:%d \n", pRawnrCfg->gauss);
928
929 //(0x0044)
930 LOGD_ANR("sigma:%d \n", pRawnrCfg->sigma);
931
932 //(0x0048)
933 LOGD_ANR("pix_diff:%d \n", pRawnrCfg->pix_diff);
934
935 //(0x004c)
936 LOGD_ANR("thld_diff:%d \n", pRawnrCfg->thld_diff);
937
938 //(0x0050)
939 LOGD_ANR("gas_weig_scl1:%d gas_weig_scl2:%d thld_chanelw:%d \n",
940 pRawnrCfg->gas_weig_scl1,
941 pRawnrCfg->gas_weig_scl2,
942 pRawnrCfg->thld_chanelw);
943
944 //(0x0054)
945 LOGD_ANR("lamda:%d \n", pRawnrCfg->lamda);
946
947 //(0x0058 - 0x0005c)
948 LOGD_ANR("fixw0-3:%d %d %d %d\n",
949 pRawnrCfg->fixw0,
950 pRawnrCfg->fixw1,
951 pRawnrCfg->fixw2,
952 pRawnrCfg->fixw3);
953
954 //(0x0060 - 0x00068)
955 LOGD_ANR("wlamda0-2:%d %d %d \n",
956 pRawnrCfg->wlamda0,
957 pRawnrCfg->wlamda1,
958 pRawnrCfg->wlamda2);
959
960 //(0x006c)
961 LOGD_ANR("rgain_filp:%d bgain_filp:%d \n",
962 pRawnrCfg->rgain_filp,
963 pRawnrCfg->bgain_filp);
964
965 LOGD_ANR("%s:(%d) ############# rawnr exit ######################## \n", __FUNCTION__, __LINE__);
966 LOGD_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
967
968 return res;
969 }
970
bayernr_calibdbV2_assign(CalibDbV2_BayerNrV1_t * pDst,CalibDbV2_BayerNrV1_t * pSrc)971 ANRresult_t bayernr_calibdbV2_assign(CalibDbV2_BayerNrV1_t *pDst, CalibDbV2_BayerNrV1_t *pSrc)
972 {
973 ANRresult_t res = ANR_RET_SUCCESS;
974 CalibDbV2_BayerNrV1_Calib_t *pSrcCalibParaV2 = NULL;
975 CalibDbV2_BayerNrV1_Tuning_t *pSrcTuningParaV2 = NULL;
976 CalibDbV2_BayerNrV1_Calib_t *pDstCalibParaV2 = NULL;
977 CalibDbV2_BayerNrV1_Tuning_t *pDstTuningParaV2 = NULL;
978 int setting_len = 0;
979 int iso_len = 0;
980
981
982 if(pDst == NULL) {
983 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
984 return ANR_RET_NULL_POINTER;
985 }
986
987 if(pSrc == NULL) {
988 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
989 return ANR_RET_NULL_POINTER;
990 }
991
992 bayernr_calibdbV2_free(pDst);
993
994 pSrcCalibParaV2 = &pSrc->CalibPara;
995 pSrcTuningParaV2 = &pSrc->TuningPara;
996 pDstCalibParaV2 = &pDst->CalibPara;
997 pDstTuningParaV2 = &pDst->TuningPara;
998
999 //assign the value
1000 pDst->Version = strdup(pSrc->Version);
1001 pDstTuningParaV2->enable = pSrcTuningParaV2->enable;
1002
1003
1004 //malloc iso size
1005 setting_len = pSrcCalibParaV2->Setting_len;
1006 pDstCalibParaV2->Setting = (CalibDbV2_BayerNrV1_C_Set_t *)malloc(setting_len * sizeof(CalibDbV2_BayerNrV1_C_Set_t));
1007 memset(pDstCalibParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_BayerNrV1_C_Set_t));
1008 pDstCalibParaV2->Setting_len = setting_len;
1009
1010 for(int i = 0; i < setting_len; i++) {
1011 iso_len = pSrcCalibParaV2->Setting[i].Calib_ISO_len;
1012 pDstCalibParaV2->Setting[i].Calib_ISO = (CalibDbV2_BayerNrV1_C_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_BayerNrV1_C_ISO_t));
1013 memset(pDstCalibParaV2->Setting[i].Calib_ISO, 0x00, iso_len * sizeof(CalibDbV2_BayerNrV1_C_ISO_t));
1014 pDstCalibParaV2->Setting[i].Calib_ISO_len = iso_len;
1015 }
1016
1017 for(int i = 0; i < setting_len; i++) {
1018 iso_len = pSrcCalibParaV2->Setting[i].Calib_ISO_len;
1019 pDstCalibParaV2->Setting[i].SNR_Mode = strdup(pSrcTuningParaV2->Setting[i].SNR_Mode);
1020 pDstCalibParaV2->Setting[i].Sensor_Mode = strdup(pSrcTuningParaV2->Setting[i].Sensor_Mode);
1021
1022 for(int j = 0; j < iso_len; j++) {
1023 pDstCalibParaV2->Setting[i].Calib_ISO[j] = pSrcCalibParaV2->Setting[i].Calib_ISO[j];
1024 }
1025 }
1026
1027 setting_len = pSrcTuningParaV2->Setting_len;
1028 pDstTuningParaV2->Setting = (CalibDbV2_BayerNrV1_T_Set_t *)malloc(setting_len * sizeof(CalibDbV2_BayerNrV1_T_Set_t));
1029 memset(pDstTuningParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_BayerNrV1_T_Set_t));
1030 pDstTuningParaV2->Setting_len = setting_len;
1031
1032 for(int i = 0; i < setting_len; i++) {
1033 iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
1034 pDstTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_BayerNrV1_T_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_BayerNrV1_T_ISO_t));
1035 memset(pDstTuningParaV2->Setting[i].Tuning_ISO, 0x00, iso_len * sizeof(CalibDbV2_BayerNrV1_T_ISO_t));
1036 pDstTuningParaV2->Setting[i].Tuning_ISO_len = iso_len;
1037 }
1038
1039 for(int i = 0; i < setting_len; i++) {
1040 iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
1041 pDstTuningParaV2->Setting[i].SNR_Mode = strdup(pSrcTuningParaV2->Setting[i].SNR_Mode);
1042 pDstTuningParaV2->Setting[i].Sensor_Mode = strdup(pSrcTuningParaV2->Setting[i].Sensor_Mode);
1043
1044 for(int j = 0; j < iso_len; j++) {
1045 pDstTuningParaV2->Setting[i].Tuning_ISO[j] = pSrcTuningParaV2->Setting[i].Tuning_ISO[j];
1046 }
1047 }
1048
1049 return res;
1050 }
1051
1052
1053
bayernr_calibdbV2_free(CalibDbV2_BayerNrV1_t * pCalibdbV2)1054 void bayernr_calibdbV2_free(CalibDbV2_BayerNrV1_t *pCalibdbV2)
1055 {
1056 if(pCalibdbV2 != NULL) {
1057 if(pCalibdbV2->CalibPara.Setting != NULL) {
1058 for(int i = 0; i < pCalibdbV2->CalibPara.Setting_len; i++) {
1059 if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO != NULL) {
1060 free(pCalibdbV2->CalibPara.Setting[i].Calib_ISO );
1061 }
1062 if(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode != NULL) {
1063 free(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode);
1064 }
1065 if(pCalibdbV2->CalibPara.Setting[i].SNR_Mode != NULL) {
1066 free(pCalibdbV2->CalibPara.Setting[i].SNR_Mode);
1067 }
1068 }
1069 free(pCalibdbV2->CalibPara.Setting);
1070 }
1071
1072 if(pCalibdbV2->TuningPara.Setting != NULL) {
1073 for(int i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
1074 if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO != NULL) {
1075 free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO );
1076 }
1077 if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode != NULL) {
1078 free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode);
1079 }
1080 if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode != NULL) {
1081 free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode);
1082 }
1083 }
1084 free(pCalibdbV2->TuningPara.Setting);
1085 }
1086
1087 if(pCalibdbV2->Version != NULL) {
1088 free(pCalibdbV2->Version);
1089 }
1090
1091 }
1092
1093 }
1094
1095
1096 RKAIQ_END_DECLARE
1097
1098