xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/auvnr/rk_aiq_auvnr_algo_uvnr_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "rk_aiq_auvnr_algo_uvnr_v1.h"
2 
3 
4 RKAIQ_BEGIN_DECLARE
5 
uvnr_get_mode_cell_idx_by_name_v1(CalibDb_UVNR_2_t * pCalibdb,char * name,int * mode_idx)6 Auvnr_result_t uvnr_get_mode_cell_idx_by_name_v1(CalibDb_UVNR_2_t *pCalibdb, char *name, int *mode_idx)
7 {
8     int i = 0;
9     Auvnr_result_t res = AUVNR_RET_SUCCESS;
10 
11     if(pCalibdb == NULL || name == NULL || mode_idx == NULL ) {
12         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
13         return AUVNR_RET_NULL_POINTER;
14     }
15 
16     if(pCalibdb->mode_num < 1) {
17         LOGE_ANR("%s(%d): uvnr mode cell num is zero\n", __FUNCTION__, __LINE__);
18         return AUVNR_RET_INVALID_PARM;
19     }
20 
21     for(i = 0; i < pCalibdb->mode_num; i++) {
22         if(strncmp(name, pCalibdb->mode_cell[i].name, sizeof(pCalibdb->mode_cell[i].name)) == 0) {
23             break;
24         }
25     }
26 
27     if(i < pCalibdb->mode_num) {
28         *mode_idx = i;
29         res = AUVNR_RET_SUCCESS;
30     } else {
31         *mode_idx = 0;
32         res = AUVNR_RET_FAILURE;
33     }
34 
35     LOGE_ANR("%s:%d mode_name:%s  mode_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *mode_idx, i);
36     return res;
37 
38 }
39 
uvnr_get_setting_idx_by_name_v1(CalibDb_UVNR_2_t * pCalibdb,char * name,int mode_idx,int * setting_idx)40 Auvnr_result_t uvnr_get_setting_idx_by_name_v1(CalibDb_UVNR_2_t *pCalibdb, char *name, int mode_idx, int *setting_idx)
41 {
42     int i = 0;
43     Auvnr_result_t res = AUVNR_RET_SUCCESS;
44 
45     if(pCalibdb == NULL || name == NULL) {
46         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
47         return AUVNR_RET_NULL_POINTER;
48     }
49 
50     if(setting_idx == NULL) {
51         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
52         return AUVNR_RET_NULL_POINTER;
53     }
54 
55     for(i = 0; i < CALIBDB_NR_SHARP_SETTING_LEVEL; i++) {
56         if(strncmp(name, pCalibdb->mode_cell[mode_idx].setting[i].snr_mode, sizeof(pCalibdb->mode_cell[mode_idx].setting[i].snr_mode)) == 0) {
57             break;
58         }
59     }
60 
61     if(i < CALIBDB_NR_SHARP_SETTING_LEVEL) {
62         *setting_idx = i;
63         res = AUVNR_RET_SUCCESS;
64     } else {
65         *setting_idx = 0;
66         res = AUVNR_RET_FAILURE;
67     }
68 
69     LOGE_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, * setting_idx, i);
70     return res;
71 
72 }
73 
uvnr_config_setting_param_v1(RK_UVNR_Params_V1_t * pParams,CalibDb_UVNR_2_t * pCalibdb,char * param_mode,char * snr_name)74 Auvnr_result_t uvnr_config_setting_param_v1(RK_UVNR_Params_V1_t *pParams, CalibDb_UVNR_2_t *pCalibdb, char* param_mode, char * snr_name)
75 {
76     Auvnr_result_t res = AUVNR_RET_SUCCESS;
77     int mode_idx = 0;
78     int setting_idx = 0;
79 
80     if(pParams == NULL || pCalibdb == NULL) {
81         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
82         return AUVNR_RET_NULL_POINTER;
83     }
84 
85     res = uvnr_get_mode_cell_idx_by_name_v1(pCalibdb, param_mode, &mode_idx);
86     if(res != AUVNR_RET_SUCCESS) {
87         LOGW_ANR("%s(%d): error!!!  can't find mode cell in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
88     }
89 
90     res = uvnr_get_setting_idx_by_name_v1(pCalibdb, snr_name, mode_idx, &setting_idx);
91     if(res != AUVNR_RET_SUCCESS) {
92         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
93     }
94 
95     res = init_uvnr_params_v1(pParams, pCalibdb, mode_idx, setting_idx);
96 
97     return res;
98 
99 }
100 
init_uvnr_params_v1(RK_UVNR_Params_V1_t * pParams,CalibDb_UVNR_2_t * pCalibdb,int mode_idx,int setting_idx)101 Auvnr_result_t init_uvnr_params_v1(RK_UVNR_Params_V1_t *pParams, CalibDb_UVNR_2_t *pCalibdb, int mode_idx, int setting_idx)
102 {
103     Auvnr_result_t res = AUVNR_RET_SUCCESS;
104     int i = 0;
105     int j = 0;
106 
107     LOGE_ANR("%s:%d enter\n", __FUNCTION__, __LINE__);
108 
109     if(pParams == NULL || pCalibdb == NULL) {
110         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
111         return AUVNR_RET_NULL_POINTER;
112     }
113 
114     CalibDb_UVNR_Params_t *pSetting = &pCalibdb->mode_cell[mode_idx].setting[setting_idx];
115     for(i = 0; i < UVNR_MAX_ISO_STEP; i++) {
116 #ifndef RK_SIMULATOR_HW
117         pParams->iso[i] = pSetting->ISO[i];
118 #endif
119         pParams->ratio[i] = pSetting->step0_uvgrad_ratio[i];
120         pParams->offset[i] = pSetting->step0_uvgrad_offset[i];
121 
122         pParams->wStep1[i] = pSetting->step1_downSample_w[i];
123         pParams->hStep1[i] = pSetting->step1_downSample_h[i];
124         pParams->meanSize1[i] = pSetting->step1_downSample_meansize[i];
125 
126         pParams->medSize1[i] = pSetting->step1_median_size[i];
127         pParams->medRatio1[i] = pSetting->step1_median_ratio[i];
128         pParams->isMedIIR1[i] = pSetting->step1_median_IIR[i];
129 
130         pParams->bfSize1[i] = pSetting->step1_bf_size[i];
131         pParams->sigmaR1[i] = pSetting->step1_bf_sigmaR[i];
132         pParams->sigmaD1[i] = pSetting->step1_bf_sigmaD[i];
133         pParams->uvgain1[i] = pSetting->step1_bf_uvgain[i];
134         pParams->bfRatio1[i] = pSetting->step1_bf_ratio[i];
135         pParams->isRowIIR1[i] = pSetting->step1_bf_isRowIIR[i];
136         pParams->isYcopy1[i] = pSetting->step1_bf_isYcopy[i];
137 
138         pParams->wStep2[i] = pSetting->step2_downSample_w[i];
139         pParams->hStep2[i] = pSetting->step2_downSample_h[i];
140         pParams->meanSize2[i] = pSetting->step2_downSample_meansize[i];
141 
142         pParams->medSize2[i] = pSetting->step2_median_size[i];
143         pParams->medRatio2[i] = pSetting->step2_median_ratio[i];
144         pParams->isMedIIR2[i] = pSetting->step2_median_IIR[i];
145 
146         pParams->bfSize3[i] = pSetting->step2_bf_size[i];
147         pParams->sigmaR2[i] = pSetting->step2_bf_sigmaR[i];
148         pParams->sigmaD2[i] = pSetting->step2_bf_sigmaD[i];
149         pParams->uvgain2[i] = pSetting->step2_bf_uvgain[i];
150         pParams->bfRatio2[i] = pSetting->step2_bf_ratio[i];
151         pParams->isRowIIR2[i] = pSetting->step2_bf_isRowIIR[i];
152         pParams->isYcopy2[i] = pSetting->step2_bf_isYcopy[i];
153 
154         pParams->bfSize3[i] = pSetting->step3_bf_size[i];
155         pParams->sigmaR3[i] = pSetting->step3_bf_sigmaR[i];
156         pParams->sigmaD3[i] = pSetting->step3_bf_sigmaD[i];
157         pParams->uvgain3[i] = pSetting->step3_bf_uvgain[i];
158         pParams->bfRatio3[i] = pSetting->step3_bf_ratio[i];
159         pParams->isRowIIR3[i] = pSetting->step3_bf_isRowIIR[i];
160         pParams->isYcopy3[i] = pSetting->step3_bf_isYcopy[i];
161 
162     }
163 
164     for(i = 0; i < 4; i++) {
165         pParams->nonMed1[i] = pSetting->step1_nonMed1[i];
166         pParams->nonBf1[i] = pSetting->step1_nonBf1[i];
167         pParams->block2_ext[i] = pSetting->step2_nonExt_block[i];
168         pParams->nonMed2[i] = pSetting->step2_nonMed[i];
169         pParams->nonBf2[i] = pSetting->step2_nonBf[i];
170         pParams->nonBf3[i] = pSetting->step3_nonBf3[i];
171     }
172 
173     for(i = 0; i < 3; i++) {
174         pParams->kernel_3x3_table[i] = pSetting->kernel_3x3[i];
175     }
176 
177     for(i = 0; i < 5; i++) {
178         pParams->kernel_5x5_talbe[i] = pSetting->kernel_5x5[i];
179     }
180 
181     for(i = 0; i < 8; i++) {
182         pParams->kernel_9x9_table[i] = pSetting->kernel_9x9[i];
183     }
184 
185     pParams->kernel_9x9_num = pSetting->kernel_9x9_num;
186 
187     for(i = 0; i < 9; i++) {
188         pParams->sigmaAdj_x[i] = pSetting->sigma_adj_luma[i];
189         pParams->sigamAdj_y[i] = pSetting->sigma_adj_ratio[i];
190 
191         pParams->threAdj_x[i] = pSetting->threshold_adj_luma[i];
192         pParams->threAjd_y[i] = pSetting->threshold_adj_thre[i];
193     }
194 
195     LOGE_ANR("%s:%d exit\n", __FUNCTION__, __LINE__);
196     return AUVNR_RET_SUCCESS;
197 
198 }
199 
uvnr_get_setting_idx_by_name_json_v1(CalibDbV2_UVNR_t * pCalibdb,char * name,int * tuning_idx)200 Auvnr_result_t uvnr_get_setting_idx_by_name_json_v1(CalibDbV2_UVNR_t *pCalibdb, char *name, int *tuning_idx)
201 {
202     int i = 0;
203     Auvnr_result_t res = AUVNR_RET_SUCCESS;
204 
205     if(pCalibdb == NULL || name == NULL || tuning_idx == NULL) {
206         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
207         return AUVNR_RET_NULL_POINTER;
208     }
209 
210     for(i = 0; i < pCalibdb->TuningPara.Setting_len; i++) {
211         if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
212             break;
213         }
214     }
215 
216     if(i < pCalibdb->TuningPara.Setting_len) {
217         *tuning_idx = i;
218         res = AUVNR_RET_SUCCESS;
219     } else {
220         *tuning_idx = 0;
221         res = AUVNR_RET_FAILURE;
222     }
223 
224     LOGD_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *tuning_idx, i);
225     return res;
226 
227 }
228 
229 
init_uvnr_params_json_v1(RK_UVNR_Params_V1_t * pParams,CalibDbV2_UVNR_t * pCalibdb,int setting_idx)230 Auvnr_result_t init_uvnr_params_json_v1(RK_UVNR_Params_V1_t *pParams, CalibDbV2_UVNR_t *pCalibdb,  int setting_idx)
231 {
232     Auvnr_result_t res = AUVNR_RET_SUCCESS;
233     int i = 0;
234     int j = 0;
235     float luma[9] = {0.0000, 32.0000, 64.0000, 96.0000, 128.0000, 160.0000, 192.0000, 224.0000, 256.0000 };
236 
237     if(pParams == NULL || pCalibdb == NULL) {
238         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
239         return AUVNR_RET_NULL_POINTER;
240     }
241 
242     CalibDbV2_UVNR_T_Set_t *pSetting = &pCalibdb->TuningPara.Setting[setting_idx];
243     CalibDbV2_UVNR_T_ISO_t *pTuning_ISO = NULL;
244     for(i = 0; i < pSetting->Tuning_ISO_len; i++) {
245         pTuning_ISO = &pSetting->Tuning_ISO[i];
246 #ifndef RK_SIMULATOR_HW
247         pParams->iso[i] = pTuning_ISO->iso;
248 #endif
249         pParams->ratio[i] = pTuning_ISO->step0_uvgrad_ratio;
250         pParams->offset[i] = pTuning_ISO->step0_uvgrad_offset;
251 
252         pParams->wStep1[i] = 4;
253         pParams->hStep1[i] = 4;
254         pParams->meanSize1[i] = 4;
255 
256         pParams->medSize1[i] = 3;
257         pParams->medRatio1[i] = pTuning_ISO->step1_median_ratio;
258         pParams->isMedIIR1[i] = 0;
259 
260         pParams->bfSize1[i] = 5;
261         pParams->sigmaR1[i] = pTuning_ISO->step1_bf_sigmaR;
262         pParams->sigmaD1[i] = 16;
263         pParams->uvgain1[i] = pTuning_ISO->step1_bf_uvgain;
264         pParams->bfRatio1[i] = pTuning_ISO->step1_bf_ratio;
265         pParams->isRowIIR1[i] = 0;
266         pParams->isYcopy1[i] = 1;
267 
268         pParams->wStep2[i] = 32;
269         pParams->hStep2[i] = 32;
270         pParams->meanSize2[i] = 8;
271 
272         pParams->medSize2[i] = 3;
273         pParams->medRatio2[i] = pTuning_ISO->step2_median_ratio;
274         pParams->isMedIIR2[i] = 0;
275 
276         pParams->bfSize3[i] = 5;
277         pParams->sigmaR2[i] = pTuning_ISO->step2_bf_sigmaR;
278         pParams->sigmaD2[i] = 128;
279         pParams->uvgain2[i] = pTuning_ISO->step2_bf_uvgain;
280         pParams->bfRatio2[i] = pTuning_ISO->step2_bf_ratio;
281         pParams->isRowIIR2[i] = 0;
282         pParams->isYcopy2[i] = 1;
283 
284         pParams->bfSize3[i] = 3;
285         pParams->sigmaR3[i] = pTuning_ISO->step3_bf_sigmaR;
286         pParams->sigmaD3[i] = 8;
287         pParams->uvgain3[i] = pTuning_ISO->step3_bf_uvgain;
288         pParams->bfRatio3[i] = pTuning_ISO->step3_bf_ratio;
289         pParams->isRowIIR3[i] = 0;
290         pParams->isYcopy3[i] = 1;
291 
292     }
293 
294     for(i = 0; i < 4; i++) {
295         pParams->nonMed1[i] = 3;
296         pParams->nonBf1[i] = 31;
297         pParams->block2_ext[i] = 7;
298         pParams->nonMed2[i] = 1;
299         pParams->nonBf2[i] = 3;
300         pParams->nonBf3[i] = 32;
301     }
302 
303     for(i = 0; i < 3; i++) {
304         pParams->kernel_3x3_table[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_3x3[i];
305     }
306 
307     for(i = 0; i < 5; i++) {
308         pParams->kernel_5x5_talbe[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_5x5[i];
309     }
310 
311     for(i = 0; i < 8; i++) {
312         pParams->kernel_9x9_table[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_9x9[i];
313     }
314 
315     pParams->kernel_9x9_num = pCalibdb->TuningPara.Kernel_Coeff.kernel_9x9_num;
316 
317     for(i = 0; i < 9; i++) {
318         pParams->sigmaAdj_x[i] = luma[i];
319         pParams->sigamAdj_y[i] = 1;
320 
321         pParams->threAdj_x[i] = luma[i];
322         pParams->threAjd_y[i] = 10;
323     }
324 
325     uvnr_algo_param_printf_v1(pParams);
326     return AUVNR_RET_SUCCESS;
327 
328 }
329 
uvnr_algo_param_printf_v1(RK_UVNR_Params_V1_t * pParams)330 Auvnr_result_t uvnr_algo_param_printf_v1(RK_UVNR_Params_V1_t *pParams)
331 {
332     int i, j;
333 
334     if(pParams != NULL) {
335         for(i = 0; i < UVNR_MAX_ISO_STEP; i++) {
336 #ifndef RK_SIMULATOR_HW
337             LOGD_ANR("uvnr iso:%f\n",
338                      pParams->iso[i]);
339 #endif
340             LOGD_ANR(" ratio:%f, offset:%f medRatio1\n",
341                      pParams->ratio[i],
342                      pParams->offset[i]);
343 
344             LOGD_ANR("step1_median_ratio:%f  step1_bf_sigmaR:%f step1_bf_uvgain:%f step1_bf_ratio:%f\n",
345                      pParams->medRatio1[i],
346                      pParams->sigmaR1[i],
347                      pParams->uvgain1[i],
348                      pParams->bfRatio1[i]);
349 
350             LOGD_ANR("step2_median_ratio:%f  step2_bf_sigmaR:%f step2_bf_uvgain:%f step2_bf_ratio:%f\n",
351                      pParams->medRatio2[i],
352                      pParams->sigmaR2[i],
353                      pParams->uvgain2[i],
354                      pParams->bfRatio2[i]);
355 
356             LOGD_ANR(" step2_bf_sigmaR:%f step2_bf_uvgain:%f step2_bf_ratio:%f\n",
357                      pParams->sigmaR3[i],
358                      pParams->uvgain3[i],
359                      pParams->bfRatio3[i]);
360 
361             LOGD_ANR(" kernel3x3: %f %f %f\n",
362                      pParams->kernel_3x3_table[0],
363                      pParams->kernel_3x3_table[1],
364                      pParams->kernel_3x3_table[2]);
365 
366             LOGD_ANR(" kernel5x5: %f %f %f %f %f\n",
367                      pParams->kernel_5x5_talbe[0],
368                      pParams->kernel_5x5_talbe[1],
369                      pParams->kernel_5x5_talbe[2],
370                      pParams->kernel_5x5_talbe[3],
371                      pParams->kernel_5x5_talbe[4]);
372 
373             LOGD_ANR(" kernel9x9: %f %f %f %f %f %f %f %f\n",
374                      pParams->kernel_9x9_table[0],
375                      pParams->kernel_9x9_table[1],
376                      pParams->kernel_9x9_table[2],
377                      pParams->kernel_9x9_table[3],
378                      pParams->kernel_9x9_table[4],
379                      pParams->kernel_9x9_table[5],
380                      pParams->kernel_9x9_table[6],
381                      pParams->kernel_9x9_table[7]);
382 
383             LOGD_ANR("kernel_num:%d\n\n", pParams->kernel_9x9_num);
384 
385 
386         }
387     }
388 
389     return AUVNR_RET_SUCCESS;
390 }
391 
392 
uvnr_config_setting_param_json_v1(RK_UVNR_Params_V1_t * pParams,CalibDbV2_UVNR_t * pCalibdb,char * param_mode,char * snr_name)393 Auvnr_result_t uvnr_config_setting_param_json_v1(RK_UVNR_Params_V1_t *pParams, CalibDbV2_UVNR_t *pCalibdb, char* param_mode, char * snr_name)
394 {
395     Auvnr_result_t res = AUVNR_RET_SUCCESS;
396     int tuning_idx = 0;
397 
398     if(pParams == NULL || pCalibdb == NULL) {
399         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
400         return AUVNR_RET_NULL_POINTER;
401     }
402 
403     res = uvnr_get_setting_idx_by_name_json_v1(pCalibdb, snr_name,  &tuning_idx);
404     if(res != AUVNR_RET_SUCCESS) {
405         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
406     }
407 
408     res = init_uvnr_params_json_v1(pParams, pCalibdb, tuning_idx);
409 
410     return res;
411 
412 }
413 
ufnr_interpISO_v1(int ISO_low,int ISO_high,float value_low,float value_high,int ISO,float value)414 float ufnr_interpISO_v1(int ISO_low, int ISO_high, float value_low, float value_high, int ISO, float value)
415 {
416     if (ISO <= ISO_low)
417     {
418         value = value_low;
419     }
420     else if (ISO >= ISO_high)
421     {
422         value = value_high;
423     }
424     else
425     {
426         value = float(ISO - ISO_low) / float(ISO_high - ISO_low) * (value_high - value_low) + value_low;
427     }
428     return value;
429 }
430 
431 
select_uvnr_params_by_ISO_v1(RK_UVNR_Params_V1_t * stRKUVNrParams,RK_UVNR_Params_V1_Select_t * stRKUVNrParamsSelected,Auvnr_ExpInfo_t * pExpInfo)432 Auvnr_result_t select_uvnr_params_by_ISO_v1(RK_UVNR_Params_V1_t *stRKUVNrParams, RK_UVNR_Params_V1_Select_t *stRKUVNrParamsSelected, Auvnr_ExpInfo_t *pExpInfo)
433 {
434     Auvnr_result_t res = AUVNR_RET_SUCCESS;
435     int iso = 50;
436     if(stRKUVNrParams == NULL || stRKUVNrParamsSelected == NULL || pExpInfo == NULL) {
437         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
438         return AUVNR_RET_NULL_POINTER;
439     }
440 
441     if(pExpInfo->mfnr_mode_3to1) {
442         iso = pExpInfo->preIso[pExpInfo->hdr_mode];
443     } else {
444         iso = pExpInfo->arIso[pExpInfo->hdr_mode];
445     }
446     //ȷ��iso�ȼ�
447     //rkuvnriso@50 100 200 400 800 1600 3200  6400 12800
448     //      isogain: 1  2   4   8   16  32   64    128  256
449     //     isoindex: 0  1   2   3   4   5    6     7    8
450 
451     int isoIndex = 0;
452     int isoGainLow = 0;
453     int isoGainHigh = 0;
454     int isoIndexLow = 0;
455     int isoIndexHigh = 0;
456     int iso_div         = 50;
457     int max_iso_step  = UVNR_MAX_ISO_STEP;
458     int i = 0;
459 
460 #ifndef RK_SIMULATOR_HW
461     for ( i = 0; i < max_iso_step - 1 ; i++)
462     {
463         if (iso >=  stRKUVNrParams->iso[i]  &&  iso <= stRKUVNrParams->iso[i + 1])
464         {
465             isoGainLow =  stRKUVNrParams->iso[i] ;
466             isoGainHigh = stRKUVNrParams->iso[i + 1];
467             isoIndexLow = i;
468             isoIndexHigh = i + 1;
469             isoIndex = isoIndexLow;
470             break;
471         }
472     }
473 
474     if(i == max_iso_step - 1) {
475         if(iso < stRKUVNrParams->iso[0] ) {
476             isoGainLow =  stRKUVNrParams->iso[0];
477             isoGainHigh = stRKUVNrParams->iso[1];
478             isoIndexLow = 0;
479             isoIndexHigh = 1;
480             isoIndex = 0;
481         }
482 
483         if(iso >  stRKUVNrParams->iso[max_iso_step - 1] ) {
484             isoGainLow =  stRKUVNrParams->iso[max_iso_step - 2] ;
485             isoGainHigh = stRKUVNrParams->iso[max_iso_step - 1];
486             isoIndexLow = max_iso_step - 2;
487             isoIndexHigh = max_iso_step - 1;
488             isoIndex = max_iso_step - 1;
489         }
490     }
491 #else
492     isoIndex = int(log(float(iso / iso_div)) / log(2.0f));
493 
494     for (i = max_iso_step - 1; i >= 0; i--)
495     {
496         if (iso < iso_div * (2 << i))
497         {
498             isoGainLow = iso_div * (2 << (i)) / 2;
499             isoGainHigh = iso_div * (2 << i);
500         }
501     }
502 
503     isoGainLow      = MIN(isoGainLow, iso_div * (2 << max_iso_step));
504     isoGainHigh     = MIN(isoGainHigh, iso_div * (2 << max_iso_step));
505 
506     isoIndexHigh    = (int)(log((float)isoGainHigh / iso_div) / log((float)2));
507     isoIndexLow     = (int)(log((float)isoGainLow / iso_div) / log((float)2));
508 
509     isoIndexLow     = MIN(MAX(isoIndexLow, 0), max_iso_step - 1);
510     isoIndexHigh    = MIN(MAX(isoIndexHigh, 0), max_iso_step - 1);
511 #endif
512 
513     LOGD_ANR("%s:%d iso:%d high:%d low:%d \n",
514              __FUNCTION__, __LINE__,
515              iso, isoGainHigh, isoGainLow);
516 
517     //ȡ��
518     memcpy(stRKUVNrParamsSelected->select_iso, stRKUVNrParams->rkuvnrISO, sizeof(char) * 256);
519     //step0:uvgainԤ����
520     stRKUVNrParamsSelected->ratio = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->ratio[isoIndexLow],
521                                     stRKUVNrParams->ratio[isoIndexHigh], iso, stRKUVNrParamsSelected->ratio);
522     stRKUVNrParamsSelected->offset = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->offset[isoIndexLow],
523                                      stRKUVNrParams->offset[isoIndexHigh], iso, stRKUVNrParamsSelected->offset);
524     //step1-�²���1
525     //��ֵ1
526     stRKUVNrParamsSelected->wStep1 = stRKUVNrParams->wStep1[isoIndex];
527     stRKUVNrParamsSelected->hStep1 = stRKUVNrParams->hStep1[isoIndex];
528     stRKUVNrParamsSelected->meanSize1 = stRKUVNrParams->meanSize1[isoIndex];
529     //��ֵ1
530     memcpy(stRKUVNrParamsSelected->nonMed1, stRKUVNrParams->nonMed1, sizeof(int) * 4);
531     stRKUVNrParamsSelected->medSize1 = stRKUVNrParams->medSize1[isoIndex];
532     stRKUVNrParamsSelected->medRatio1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->medRatio1[isoIndexLow],
533                                         stRKUVNrParams->medRatio1[isoIndexHigh], iso, stRKUVNrParamsSelected->medRatio1);
534     stRKUVNrParamsSelected->isMedIIR1 = stRKUVNrParams->isMedIIR1[isoIndex];
535     //˫��1
536     memcpy(stRKUVNrParamsSelected->nonBf1, stRKUVNrParams->nonBf1, sizeof(int) * 4);
537     stRKUVNrParamsSelected->bfSize1 = stRKUVNrParams->bfSize1[isoIndex];
538     stRKUVNrParamsSelected->sigmaR1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR1[isoIndexLow],
539                                       stRKUVNrParams->sigmaR1[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR1);
540     stRKUVNrParamsSelected->sigmaD1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD1[isoIndexLow],
541                                       stRKUVNrParams->sigmaD1[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD1);
542     stRKUVNrParamsSelected->uvgain1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain1[isoIndexLow],
543                                       stRKUVNrParams->uvgain1[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain1);
544     stRKUVNrParamsSelected->bfRatio1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio1[isoIndexLow],
545                                        stRKUVNrParams->bfRatio1[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio1);
546     stRKUVNrParamsSelected->isRowIIR1 = stRKUVNrParams->isRowIIR1[isoIndex];
547     stRKUVNrParamsSelected->isYcopy1 = stRKUVNrParams->isYcopy1[isoIndex];
548 
549     //step2-�²���2
550     memcpy(stRKUVNrParamsSelected->block2_ext, stRKUVNrParams->block2_ext, sizeof(int) * 4);
551     //��ֵ2
552     stRKUVNrParamsSelected->wStep2 = stRKUVNrParams->wStep2[isoIndex];
553     stRKUVNrParamsSelected->hStep2 = stRKUVNrParams->hStep2[isoIndex];
554     stRKUVNrParamsSelected->meanSize2 = stRKUVNrParams->meanSize2[isoIndex];
555     //��ֵ2
556     memcpy(stRKUVNrParamsSelected->nonMed2, stRKUVNrParams->nonMed2, sizeof(int) * 4);
557     stRKUVNrParamsSelected->medSize2 = stRKUVNrParams->medSize2[isoIndex];
558     stRKUVNrParamsSelected->medRatio2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->medRatio2[isoIndexLow],
559                                         stRKUVNrParams->medRatio2[isoIndexHigh], iso, stRKUVNrParamsSelected->medRatio2);
560     stRKUVNrParamsSelected->isMedIIR2 = stRKUVNrParams->isMedIIR2[isoIndex];
561     //˫��2
562     memcpy(stRKUVNrParamsSelected->nonBf2, stRKUVNrParams->nonBf2, sizeof(int) * 4);
563     stRKUVNrParamsSelected->bfSize2 = stRKUVNrParams->bfSize2[isoIndex];
564     stRKUVNrParamsSelected->sigmaR2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR2[isoIndexLow],
565                                       stRKUVNrParams->sigmaR2[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR2);
566     stRKUVNrParamsSelected->sigmaD2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD2[isoIndexLow],
567                                       stRKUVNrParams->sigmaD2[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD2);
568     stRKUVNrParamsSelected->uvgain2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain2[isoIndexLow],
569                                       stRKUVNrParams->uvgain2[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain2);
570     stRKUVNrParamsSelected->bfRatio2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio2[isoIndexLow],
571                                        stRKUVNrParams->bfRatio2[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio2);
572     stRKUVNrParamsSelected->isRowIIR2 = stRKUVNrParams->isRowIIR2[isoIndex];
573     stRKUVNrParamsSelected->isYcopy2 = stRKUVNrParams->isYcopy2[isoIndex];
574 
575     //step3
576     memcpy(stRKUVNrParamsSelected->nonBf3, stRKUVNrParams->nonBf3, sizeof(int) * 4);
577     //˫��3
578     stRKUVNrParamsSelected->bfSize3 = stRKUVNrParams->bfSize3[isoIndex];
579     stRKUVNrParamsSelected->sigmaR3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR3[isoIndexLow],
580                                       stRKUVNrParams->sigmaR3[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR3);
581     stRKUVNrParamsSelected->sigmaD3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD3[isoIndexLow],
582                                       stRKUVNrParams->sigmaD3[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD3);
583     stRKUVNrParamsSelected->uvgain3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain3[isoIndexLow],
584                                       stRKUVNrParams->uvgain3[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain3);
585     stRKUVNrParamsSelected->bfRatio3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio3[isoIndexLow],
586                                        stRKUVNrParams->bfRatio3[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio3);
587     stRKUVNrParamsSelected->isRowIIR3 = stRKUVNrParams->isRowIIR3[isoIndex];
588     stRKUVNrParamsSelected->isYcopy3 = stRKUVNrParams->isYcopy3[isoIndex];
589 
590     //kernels
591     memcpy(stRKUVNrParamsSelected->kernel_3x3_table, stRKUVNrParams->kernel_3x3_table, sizeof(float) * 3);
592     memcpy(stRKUVNrParamsSelected->kernel_5x5_table, stRKUVNrParams->kernel_5x5_talbe, sizeof(float) * 5);
593     memcpy(stRKUVNrParamsSelected->kernel_9x9_table, stRKUVNrParams->kernel_9x9_table, sizeof(float) * 8);
594     stRKUVNrParamsSelected->kernel_9x9_num = stRKUVNrParams->kernel_9x9_num;
595 
596     //curves
597     memcpy(stRKUVNrParamsSelected->sigmaAdj_x, stRKUVNrParams->sigmaAdj_x, sizeof(int) * 9);
598     memcpy(stRKUVNrParamsSelected->sigmaAdj_y, stRKUVNrParams->sigamAdj_y, sizeof(float) * 9);
599     memcpy(stRKUVNrParamsSelected->threAdj_x, stRKUVNrParams->threAdj_x, sizeof(int) * 9);
600     memcpy(stRKUVNrParamsSelected->threAdj_y, stRKUVNrParams->threAjd_y, sizeof(int) * 9);
601 
602     return AUVNR_RET_SUCCESS;
603 
604 }
605 
606 
uvnr_fix_transfer_v1(RK_UVNR_Params_V1_Select_t * uvnr,RK_UVNR_Fix_V1_t * pNrCfg,Auvnr_ExpInfo_t * pExpInfo,float gain_ratio,float fStrength)607 Auvnr_result_t uvnr_fix_transfer_v1(RK_UVNR_Params_V1_Select_t *uvnr, RK_UVNR_Fix_V1_t *pNrCfg, Auvnr_ExpInfo_t *pExpInfo, float gain_ratio, float fStrength)
608 {
609     LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
610 
611     int i = 0;
612     Auvnr_result_t res = AUVNR_RET_SUCCESS;
613 
614     if(uvnr == NULL || pNrCfg == NULL || pExpInfo == NULL) {
615         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
616         return AUVNR_RET_NULL_POINTER;
617     }
618 
619     int iso = pExpInfo->arIso[pExpInfo->hdr_mode] * gain_ratio;
620 
621     int log2e                       = (int)(0.8493f * (1 << RKUVNR_log2e));
622     log2e                           = log2e * (1 << RKUVNR_imgBit_set);
623 
624     //0x0080
625     pNrCfg->uvnr_step1_en = 1;
626     pNrCfg->uvnr_step2_en = 1;
627     pNrCfg->nr_gain_en = 1;
628     pNrCfg->uvnr_nobig_en = 0;
629     pNrCfg->uvnr_big_en = 0;
630 
631 
632     //0x0084
633     pNrCfg->uvnr_gain_1sigma = (unsigned char)(uvnr->ratio * (1 << RKUVNR_ratio));
634 
635     //0x0088
636     pNrCfg->uvnr_gain_offset = (unsigned char)(uvnr->offset * (1 << RKUVNR_offset));
637 
638     //0x008c
639     pNrCfg->uvnr_gain_uvgain[0] = (unsigned char)(uvnr->uvgain1 * fStrength * (1 << RKUVNR_uvgain));
640     if( pNrCfg->uvnr_gain_uvgain[0]  > 0x7f) {
641         pNrCfg->uvnr_gain_uvgain[0] = 0x7f;
642     }
643     pNrCfg->uvnr_gain_uvgain[1] = (unsigned char)(uvnr->uvgain3 * fStrength * (1 << RKUVNR_uvgain));
644     if( pNrCfg->uvnr_gain_uvgain[1]  > 0x7f) {
645         pNrCfg->uvnr_gain_uvgain[1] = 0x7f;
646     }
647     pNrCfg->uvnr_gain_t2gen = (unsigned char)(uvnr->uvgain2 *  fStrength * (1 << RKUVNR_uvgain));
648     if( pNrCfg->uvnr_gain_t2gen  > 0x7f) {
649         pNrCfg->uvnr_gain_t2gen = 0x7f;
650     }
651     pNrCfg->uvnr_gain_iso = (int)(sqrt(50.0 / (float)(iso)) * (1 << RKUVNR_gainRatio));
652     if(pNrCfg->uvnr_gain_iso > 0x80) {
653         pNrCfg->uvnr_gain_iso = 0x80;
654     }
655 
656     if(pNrCfg->uvnr_gain_iso < 0x8) {
657         pNrCfg->uvnr_gain_iso = 0x8;
658     }
659 
660     //0x0090
661     pNrCfg->uvnr_t1gen_m3alpha = (uvnr->medRatio1 * (1 << RKUVNR_medRatio));
662 
663     //0x0094
664     pNrCfg->uvnr_t1flt_mode = uvnr->kernel_9x9_num;
665 
666     //0x0098
667     pNrCfg->uvnr_t1flt_msigma = (unsigned short)(log2e / uvnr->sigmaR1);
668 
669     pNrCfg->uvnr_t1flt_msigma = MIN(pNrCfg->uvnr_t1flt_msigma, 8191);
670 
671 
672     //0x009c
673     pNrCfg->uvnr_t1flt_wtp = (unsigned char)(uvnr->bfRatio1 * (1 << RKUVNR_bfRatio));
674 
675     //0x00a0-0x00a4
676     for(i = 0; i < 8; i++) {
677         pNrCfg->uvnr_t1flt_wtq[i] = (unsigned char)(uvnr->kernel_9x9_table[i] * (1 << RKUVNR_kernels));
678     }
679 
680     //0x00a8
681     pNrCfg->uvnr_t2gen_m3alpha = (unsigned char)(uvnr->medRatio2 * (1 << RKUVNR_medRatio));
682 
683     //0x00ac
684     pNrCfg->uvnr_t2gen_msigma = (unsigned short)(log2e / uvnr->sigmaR2);
685     pNrCfg->uvnr_t2gen_msigma = MIN(pNrCfg->uvnr_t2gen_msigma, 8191);
686 
687 
688     //0x00b0
689     pNrCfg->uvnr_t2gen_wtp = (unsigned char)(uvnr->kernel_5x5_table[0] * (1 << RKUVNR_kernels));
690 
691     //0x00b4
692     for(i = 0; i < 4; i++) {
693         pNrCfg->uvnr_t2gen_wtq[i] = (unsigned char)(uvnr->kernel_5x5_table[i + 1] * (1 << RKUVNR_kernels));
694     }
695 
696     //0x00b8
697     pNrCfg->uvnr_t2flt_msigma = (unsigned short)(log2e / uvnr->sigmaR3);
698     pNrCfg->uvnr_t2flt_msigma = MIN(pNrCfg->uvnr_t2flt_msigma, 8191);
699 
700     //0x00bc
701     pNrCfg->uvnr_t2flt_wtp = (unsigned char)(uvnr->bfRatio3 * (1 << RKUVNR_bfRatio));
702     for(i = 0; i < 3; i++) {
703         pNrCfg->uvnr_t2flt_wt[i] = (unsigned char)(uvnr->kernel_3x3_table[i] * (1 << RKUVNR_kernels));
704     }
705 
706 #if UVNR_FIX_VALUE_PRINTF
707     uvnr_fix_Printf_v1(pNrCfg);
708 #endif
709 
710     LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
711 
712     return AUVNR_RET_SUCCESS;
713 }
714 
715 
uvnr_fix_Printf_v1(RK_UVNR_Fix_V1_t * pNrCfg)716 Auvnr_result_t uvnr_fix_Printf_v1(RK_UVNR_Fix_V1_t  * pNrCfg)
717 {
718     int i = 0;
719     LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
720 
721     Auvnr_result_t res = AUVNR_RET_SUCCESS;
722 
723     if(pNrCfg == NULL) {
724         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
725         return AUVNR_RET_NULL_POINTER;
726     }
727 
728     //0x0080
729     LOGD_ANR("(0x0080) uvnr_step1_en:%d uvnr_step2_en:%d nr_gain_en:%d uvnr_nobig_en:%d uvnr_big_en:%d\n",
730              pNrCfg->uvnr_step1_en,
731              pNrCfg->uvnr_step2_en,
732              pNrCfg->nr_gain_en,
733              pNrCfg->uvnr_nobig_en,
734              pNrCfg->uvnr_big_en);
735 
736     //0x0084
737     LOGD_ANR("(0x0084) uvnr_gain_1sigma:%d \n",
738              pNrCfg->uvnr_gain_1sigma);
739 
740     //0x0088
741     LOGD_ANR("(0x0088) uvnr_gain_offset:%d \n",
742              pNrCfg->uvnr_gain_offset);
743 
744     //0x008c
745     LOGD_ANR("uvnr: (0x008c) uvnr_gain_uvgain:%d uvnr_step2_en:%d uvnr_gain_t2gen:%d uvnr_gain_iso:%d\n",
746              pNrCfg->uvnr_gain_uvgain[0],
747              pNrCfg->uvnr_gain_uvgain[1],
748              pNrCfg->uvnr_gain_t2gen,
749              pNrCfg->uvnr_gain_iso);
750 
751 
752     //0x0090
753     LOGD_ANR("(0x0090) uvnr_t1gen_m3alpha:%d \n",
754              pNrCfg->uvnr_t1gen_m3alpha);
755 
756     //0x0094
757     LOGD_ANR("(0x0094) uvnr_t1flt_mode:%d \n",
758              pNrCfg->uvnr_t1flt_mode);
759 
760     //0x0098
761     LOGD_ANR("(0x0098) uvnr_t1flt_msigma:%d \n",
762              pNrCfg->uvnr_t1flt_msigma);
763 
764     //0x009c
765     LOGD_ANR("(0x009c) uvnr_t1flt_wtp:%d \n",
766              pNrCfg->uvnr_t1flt_wtp);
767 
768     //0x00a0-0x00a4
769     for(i = 0; i < 8; i++) {
770         LOGD_ANR("(0x00a0-0x00a4) uvnr_t1flt_wtq[%d]:%d \n",
771                  i, pNrCfg->uvnr_t1flt_wtq[i]);
772     }
773 
774     //0x00a8
775     LOGD_ANR("(0x00a8) uvnr_t2gen_m3alpha:%d \n",
776              pNrCfg->uvnr_t2gen_m3alpha);
777 
778     //0x00ac
779     LOGD_ANR("(0x00ac) uvnr_t2gen_msigma:%d \n",
780              pNrCfg->uvnr_t2gen_msigma);
781 
782     //0x00b0
783     LOGD_ANR("(0x00b0) uvnr_t2gen_wtp:%d \n",
784              pNrCfg->uvnr_t2gen_wtp);
785 
786     //0x00b4
787     for(i = 0; i < 4; i++) {
788         LOGD_ANR("(0x00b4) uvnr_t2gen_wtq[%d]:%d \n",
789                  i, pNrCfg->uvnr_t2gen_wtq[i]);
790     }
791 
792     //0x00b8
793     LOGD_ANR("(0x00b8) uvnr_t2flt_msigma:%d \n",
794              pNrCfg->uvnr_t2flt_msigma);
795 
796     //0x00bc
797     LOGD_ANR("(0x00bc) uvnr_t2flt_wtp:%d \n",
798              pNrCfg->uvnr_t2flt_wtp);
799     for(i = 0; i < 3; i++) {
800         LOGD_ANR("(0x00bc) uvnr_t2flt_wt[%d]:%d \n",
801                  i, pNrCfg->uvnr_t2flt_wt[i]);
802     }
803 
804 
805     LOGD_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
806 
807     return AUVNR_RET_SUCCESS;
808 }
809 
810 
uvnr_calibdbV2_assign_v1(CalibDbV2_UVNR_t * pDst,CalibDbV2_UVNR_t * pSrc)811 Auvnr_result_t uvnr_calibdbV2_assign_v1(CalibDbV2_UVNR_t *pDst, CalibDbV2_UVNR_t *pSrc)
812 {
813     Auvnr_result_t res = AUVNR_RET_SUCCESS;
814     CalibDbV2_UVNR_Tuning_t *pSrcTuningParaV2 = NULL;
815     CalibDbV2_UVNR_Tuning_t *pDstTuningParaV2 = NULL;
816     int setting_len = 0;
817     int iso_len = 0;
818 
819 
820     if(pDst == NULL || pSrc == NULL) {
821         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
822         return AUVNR_RET_NULL_POINTER;
823     }
824 
825     uvnr_calibdbV2_free_v1(pDst);
826 
827     pSrcTuningParaV2 = &pSrc->TuningPara;
828     pDstTuningParaV2 = &pDst->TuningPara;
829 
830     //assign the value
831     pDst->Version = strdup(pSrc->Version);
832     pDstTuningParaV2->enable = pSrcTuningParaV2->enable;
833 
834     //malloc iso size
835     setting_len = pSrcTuningParaV2->Setting_len;
836     pDstTuningParaV2->Setting = (CalibDbV2_UVNR_T_Set_t *)malloc(setting_len * sizeof(CalibDbV2_UVNR_T_Set_t));
837     memset(pDstTuningParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_UVNR_T_Set_t));
838     pDstTuningParaV2->Setting_len = setting_len;
839 
840     for(int i = 0; i < setting_len; i++) {
841         iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
842         pDstTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_UVNR_T_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_UVNR_T_ISO_t));
843         memset(pDstTuningParaV2->Setting[i].Tuning_ISO, 0x00, iso_len * sizeof(CalibDbV2_UVNR_T_ISO_t));
844         pDstTuningParaV2->Setting[i].Tuning_ISO_len = iso_len;
845     }
846 
847     for(int i = 0; i < setting_len; i++) {
848         iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
849         pDstTuningParaV2->Setting[i].SNR_Mode = strdup(pSrcTuningParaV2->Setting[i].SNR_Mode);
850         pDstTuningParaV2->Setting[i].Sensor_Mode = strdup(pSrcTuningParaV2->Setting[i].Sensor_Mode);
851 
852         for(int j = 0; j < iso_len; j++) {
853             pDstTuningParaV2->Setting[i].Tuning_ISO[j] = pSrcTuningParaV2->Setting[i].Tuning_ISO[j];
854         }
855     }
856 
857     pDstTuningParaV2->Kernel_Coeff = pSrcTuningParaV2->Kernel_Coeff;
858 
859     return res;
860 
861 }
862 
863 
864 
uvnr_calibdbV2_free_v1(CalibDbV2_UVNR_t * pCalibdbV2)865 void uvnr_calibdbV2_free_v1(CalibDbV2_UVNR_t *pCalibdbV2)
866 {
867     if(pCalibdbV2) {
868         if(pCalibdbV2->Version) {
869             free(pCalibdbV2->Version);
870         }
871 
872         if(pCalibdbV2->TuningPara.Setting) {
873             for(int i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
874                 if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode) {
875                     free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode);
876                 }
877                 if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode) {
878                     free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode);
879                 }
880                 if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO) {
881                     free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO);
882                 }
883             }
884             free(pCalibdbV2->TuningPara.Setting);
885         }
886 
887     }
888 }
889 
890 RKAIQ_END_DECLARE
891 
892 
893 
894 
895