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