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