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