hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
#include "mfnr_xml2json_v1.h"
 
#define MFNRV1_SETTING_NUM (2)
#define MFNRV1_ISO_NUM  (13)
 
 
 
int mfnrV1_calibdb_to_calibdbV2(const CalibDb_MFNR_2_t *pCalibdb,  CalibDbV2_MFNR_t *pCalibdbV2, int mode_idx)
{
    CalibDbV2_MFNR_CalibPara_t *pCalibParaV2 = NULL;
    CalibDbV2_MFNR_TuningPara_t *pTuningParaV2 = NULL;
    CalibDbV2_MFNR_CalibPara_Setting_ISO_t *pCalibISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Motion_ISO_t *pMotionISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Dynamic_t *pDynamicV2 = NULL;
    CalibDb_MFNR_Setting_t *pSetting = NULL;
    CalibDb_MFNR_Dynamic_t *pDynamic = NULL;
    CalibDb_MFNR_Motion_t  *pMotion = NULL;
    struct CalibDb_MFNR_ISO_s *pISO = NULL;
 
    if(pCalibdb == NULL) {
        printf(" pCalibdb is NULL pointer\n");
        return -1;
    }
 
    if(pCalibdbV2 == NULL) {
        printf(" pCalibdbV2 is NULL pointer\n");
        return -1;
    }
 
    if(pCalibdb->mode_num < mode_idx) {
        printf(" old xml file have no %d mode cell \n", mode_idx);
        return -1;
    }
 
    pCalibParaV2 = &pCalibdbV2->CalibPara;
    pTuningParaV2 = &pCalibdbV2->TuningPara;
 
    //malloc settting size
    pCalibParaV2->Setting = (CalibDbV2_MFNR_CalibPara_Setting_t *)malloc(MFNRV1_SETTING_NUM * sizeof(CalibDbV2_MFNR_CalibPara_Setting_t));
    memset(pCalibParaV2->Setting,  0x00, MFNRV1_SETTING_NUM * sizeof(CalibDbV2_MFNR_CalibPara_Setting_t));
    pCalibParaV2->Setting_len = MFNRV1_SETTING_NUM;
    pTuningParaV2->Setting = (CalibDbV2_MFNR_TuningPara_Setting_t *)malloc(MFNRV1_SETTING_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Setting_t));
    memset(pTuningParaV2->Setting, 0x00, MFNRV1_SETTING_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Setting_t));
    pTuningParaV2->Setting_len = MFNRV1_SETTING_NUM;
 
    //malloc iso size
    for(int i = 0; i < pTuningParaV2->Setting_len; i++) {
        pCalibParaV2->Setting[i].Calib_ISO =  (CalibDbV2_MFNR_CalibPara_Setting_ISO_t *)malloc(MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_CalibPara_Setting_ISO_t));
        memset(pCalibParaV2->Setting[i].Calib_ISO, 0x00, MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_CalibPara_Setting_ISO_t));
        pCalibParaV2->Setting[i].Calib_ISO_len = MFNRV1_ISO_NUM;
        pTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_MFNR_TuningPara_Setting_ISO_t *)malloc(MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Setting_ISO_t));
        memset(pTuningParaV2->Setting[i].Tuning_ISO, 0x00, MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Setting_ISO_t));
        pTuningParaV2->Setting[i].Tuning_ISO_len = MFNRV1_ISO_NUM;
    }
    pTuningParaV2->Motion.Motion_ISO = (CalibDbV2_MFNR_TuningPara_Motion_ISO_t *)malloc(MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Motion_ISO_t));
    memset(pTuningParaV2->Motion.Motion_ISO, 0x00, MFNRV1_ISO_NUM * sizeof(CalibDbV2_MFNR_TuningPara_Motion_ISO_t));
    pTuningParaV2->Motion.Motion_ISO_len = MFNRV1_ISO_NUM;
 
    //assign the value
    pCalibdbV2->Version = strdup(pCalibdb->version);
 
    pTuningParaV2->enable = pCalibdb->enable;
    pTuningParaV2->local_gain_en = pCalibdb->local_gain_en;
    pTuningParaV2->mode_3to1 = pCalibdb->mode_3to1;
    pTuningParaV2->motion_detect_en = pCalibdb->motion_detect_en;
 
    for(int i = 0; i < MFNRV1_SETTING_NUM; i++) {
        pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
 
        pCalibParaV2->Setting[i].SNR_Mode = strdup(pSetting->snr_mode);
        pCalibParaV2->Setting[i].Sensor_Mode = strdup(pSetting->sensor_mode);
        pTuningParaV2->Setting[i].SNR_Mode = strdup( pSetting->snr_mode);
        pTuningParaV2->Setting[i].Sensor_Mode = strdup( pSetting->sensor_mode);
 
        for(int j = 0; j < MFNRV1_ISO_NUM; j++) {
            pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
            pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
            pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j];
            pISO = &pSetting->mfnr_iso[j];
 
            //calib
            pCalibISOV2->iso = pISO->iso;
            pCalibISOV2->noise_curve_x00 = pISO->noise_curve_x00;
            for(int k = 0; k < 5; k++) {
                pCalibISOV2->noise_curve[k] = pISO->noise_curve[k];
            }
            for(int k = 0; k < 4; k++) {
                pCalibISOV2->y_lo_noiseprofile[k] = pISO->y_lo_noiseprofile[k];
                pCalibISOV2->y_hi_noiseprofile[k] = pISO->y_hi_noiseprofile[k];
            }
            for(int k = 0; k < 3; k++) {
                pCalibISOV2->uv_lo_noiseprofile[k] = pISO->uv_lo_noiseprofile[k];
                pCalibISOV2->uv_hi_noiseprofile[k] = pISO->uv_hi_noiseprofile[k];
            }
 
            //tuning
            pTuningISOV2->iso = pISO->iso;
            pTuningISOV2->weight_limit_y_0 = pISO->weight_limit_y[0];
            pTuningISOV2->weight_limit_y_1 = pISO->weight_limit_y[1];
            pTuningISOV2->weight_limit_y_2 = pISO->weight_limit_y[2];
            pTuningISOV2->weight_limit_y_3 = pISO->weight_limit_y[3];
 
            pTuningISOV2->weight_limit_uv_0 = pISO->weight_limit_uv[0];
            pTuningISOV2->weight_limit_uv_1 = pISO->weight_limit_uv[1];
            pTuningISOV2->weight_limit_uv_2 = pISO->weight_limit_uv[2];
 
            pTuningISOV2->ratio_frq_y_l = pISO->ratio_frq[0];
            pTuningISOV2->ratio_frq_y_h = pISO->ratio_frq[1];
            pTuningISOV2->ratio_frq_uv_l = pISO->ratio_frq[2];
            pTuningISOV2->ratio_frq_uv_h = pISO->ratio_frq[3];
 
            pTuningISOV2->luma_w_in_chroma_0 = pISO->luma_w_in_chroma[0];
            pTuningISOV2->luma_w_in_chroma_1 = pISO->luma_w_in_chroma[1];
            pTuningISOV2->luma_w_in_chroma_2 = pISO->luma_w_in_chroma[2];
 
            pTuningISOV2->y_lo_bfscale_0 = pISO->y_lo_bfscale[0];
            pTuningISOV2->y_lo_bfscale_1 = pISO->y_lo_bfscale[1];
            pTuningISOV2->y_lo_bfscale_2 = pISO->y_lo_bfscale[2];
            pTuningISOV2->y_lo_bfscale_3 = pISO->y_lo_bfscale[3];
 
            pTuningISOV2->y_hi_bfscale_0 = pISO->y_hi_bfscale[0];
            pTuningISOV2->y_hi_bfscale_1 = pISO->y_hi_bfscale[1];
            pTuningISOV2->y_hi_bfscale_2 = pISO->y_hi_bfscale[2];
            pTuningISOV2->y_hi_bfscale_3 = pISO->y_hi_bfscale[3];
 
            pTuningISOV2->y_denoisestrength = pISO->y_denoisestrength;
 
            pTuningISOV2->uv_lo_bfscale_0 = pISO->uv_lo_bfscale[0];
            pTuningISOV2->uv_lo_bfscale_1 = pISO->uv_lo_bfscale[1];
            pTuningISOV2->uv_lo_bfscale_2 = pISO->uv_lo_bfscale[2];
 
            pTuningISOV2->uv_hi_bfscale_0 = pISO->uv_hi_bfscale[0];
            pTuningISOV2->uv_hi_bfscale_1 = pISO->uv_hi_bfscale[1];
            pTuningISOV2->uv_hi_bfscale_2 = pISO->uv_hi_bfscale[2];
 
            pTuningISOV2->uv_denoisestrength = pISO->uv_denoisestrength;
 
            for(int k = 0; k < 6; k++) {
                pTuningISOV2->luma_para.y_lumanrpoint[k] = pISO->y_lumanrpoint[k];
                pTuningISOV2->luma_para.y_lumanrcurve[k] = pISO->y_lumanrcurve[k];
                pTuningISOV2->luma_para.uv_lumanrpoint[k] = pISO->uv_lumanrpoint[k];
                pTuningISOV2->luma_para.uv_lumanrcurve[k] = pISO->uv_lumanrcurve[k];
            }
 
            for(int k = 0; k < 6; k++) {
                pTuningISOV2->y_gfdelta_para.y_lo_lvl0_gfdelta[k] = pISO->y_lo_lvl0_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_hi_lvl0_gfdelta[k] = pISO->y_hi_lvl0_gfdelta[k];
                pTuningISOV2->uv_gfdelta_para.uv_lo_lvl0_gfdelta[k] = pISO->uv_lo_lvl0_gfdelta[k];
                pTuningISOV2->uv_gfdelta_para.uv_hi_lvl0_gfdelta[k] = pISO->uv_hi_lvl0_gfdelta[k];
                pTuningISOV2->gfsigma_para.lvl0_gfsigma[k] = pISO->lvl0_gfsigma[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pTuningISOV2->y_gfdelta_para.y_lo_lvl1_gfdelta[k] = pISO->y_lo_lvl1_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_hi_lvl1_gfdelta[k] = pISO->y_hi_lvl1_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_lo_lvl2_gfdelta[k] = pISO->y_lo_lvl2_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_hi_lvl2_gfdelta[k] = pISO->y_hi_lvl2_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_lo_lvl3_gfdelta[k] = pISO->y_lo_lvl3_gfdelta[k];
                pTuningISOV2->y_gfdelta_para.y_hi_lvl3_gfdelta[k] = pISO->y_hi_lvl3_gfdelta[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pTuningISOV2->uv_gfdelta_para.uv_lo_lvl1_gfdelta[k] = pISO->uv_lo_lvl1_gfdelta[k];
                pTuningISOV2->uv_gfdelta_para.uv_hi_lvl1_gfdelta[k] = pISO->uv_hi_lvl1_gfdelta[k];
                pTuningISOV2->uv_gfdelta_para.uv_lo_lvl2_gfdelta[k] = pISO->uv_lo_lvl2_gfdelta[k];
                pTuningISOV2->uv_gfdelta_para.uv_hi_lvl2_gfdelta[k] = pISO->uv_hi_lvl2_gfdelta[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pTuningISOV2->gfsigma_para.lvl1_gfsigma[k] = pISO->lvl1_gfsigma[k];
                pTuningISOV2->gfsigma_para.lvl2_gfsigma[k] = pISO->lvl2_gfsigma[k];
                pTuningISOV2->gfsigma_para.lvl3_gfsigma[k] = pISO->lvl3_gfsigma[k];
            }
        }
    }
 
 
    //motion
    pMotion = &pCalibdb->mode_cell[mode_idx].motion;
    for(int i = 0; i < MFNRV1_ISO_NUM; i++) {
        pMotionISOV2 = &pCalibdbV2->TuningPara.Motion.Motion_ISO[i];
        pMotionISOV2->iso = pMotion->iso[i];
        pMotionISOV2->sigmaHScale = pMotion->sigmaHScale[i];
        pMotionISOV2->sigmaLScale = pMotion->sigmaLScale[i];
        pMotionISOV2->lightClp = pMotion->lightClp[i];
        pMotionISOV2->uvWeight = pMotion->uvWeight[i];
        pMotionISOV2->mfnrSigmaScale = pMotion->mfnrSigmaScale[i];
        pMotionISOV2->yuvnrGainScale0 = pMotion->yuvnrGainScale0[i];
        pMotionISOV2->yuvnrGainScale1 = pMotion->yuvnrGainScale1[i];
        pMotionISOV2->yuvnrGainScale2 = pMotion->yuvnrGainScale2[i];
        pMotionISOV2->frame_limit_y = pMotion->frame_limit_y[i];
        pMotionISOV2->frame_limit_uv = pMotion->frame_limit_uv[i];
    }
 
    //dynamic
    pDynamic = &pCalibdb->mode_cell[mode_idx].dynamic;
    pDynamicV2 = &pCalibdbV2->TuningPara.Dynamic;
    pDynamicV2->Enable = pDynamic->enable;
    pDynamicV2->LowTh_iso = pDynamic->lowth_iso;
    pDynamicV2->LowTh_time = pDynamic->lowth_time;
    pDynamicV2->HighTh_iso = pDynamic->highth_iso;
    pDynamicV2->HighTh_time = pDynamic->highth_time;
 
    return 0;
 
}
 
 
 
 
 
int mfnrV1_calibdbV2_to_calibdb(CalibDbV2_MFNR_t *pCalibdbV2,  CalibDb_MFNR_2_t *pCalibdb,  int mode_idx)
{
    CalibDbV2_MFNR_CalibPara_t *pCalibParaV2 = NULL;
    CalibDbV2_MFNR_TuningPara_t *pTuningParaV2 = NULL;
    CalibDbV2_MFNR_CalibPara_Setting_ISO_t *pCalibISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Motion_ISO_t *pMotionISOV2 = NULL;
    CalibDbV2_MFNR_TuningPara_Dynamic_t *pDynamicV2 = NULL;
    CalibDb_MFNR_Setting_t *pSetting = NULL;
    CalibDb_MFNR_Dynamic_t *pDynamic = NULL;
    CalibDb_MFNR_Motion_t  *pMotion = NULL;
    struct CalibDb_MFNR_ISO_s *pISO = NULL;
 
    if(pCalibdb == NULL) {
        printf(" pCalibdb is NULL pointer\n");
        return -1;
    }
 
    if(pCalibdbV2 == NULL) {
        printf(" pCalibdbV2 is NULL pointer\n");
        return -1;
    }
 
    if(pCalibdb->mode_num < mode_idx) {
        printf(" old xml file have no %d mode cell \n", mode_idx);
        return -1;
    }
 
    pCalibParaV2 = &pCalibdbV2->CalibPara;
    pTuningParaV2 = &pCalibdbV2->TuningPara;
 
 
    //assign the value
    strcpy(pCalibdb->version, pCalibdbV2->Version);
 
    pCalibdb->enable = pTuningParaV2->enable;
    pCalibdb->local_gain_en = pTuningParaV2->local_gain_en;
    pCalibdb->mode_3to1 = pTuningParaV2->mode_3to1;
    pCalibdb->motion_detect_en = pTuningParaV2->motion_detect_en;
 
    for(int i = 0; i < pTuningParaV2->Setting_len; i++) {
        pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
 
        strcpy(pSetting->snr_mode, pTuningParaV2->Setting[i].SNR_Mode);
        strcpy( pSetting->sensor_mode, pTuningParaV2->Setting[i].Sensor_Mode);
 
        for(int j = 0; j < MFNRV1_ISO_NUM; j++) {
            pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
            pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
            pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j];
            pISO = &pSetting->mfnr_iso[j];
 
            //calib
            pISO->iso = pCalibISOV2->iso;
            pISO->noise_curve_x00 = pCalibISOV2->noise_curve_x00;
            for(int k = 0; k < 5; k++) {
                pISO->noise_curve[k] = pCalibISOV2->noise_curve[k];
            }
            for(int k = 0; k < 4; k++) {
                pISO->y_lo_noiseprofile[k] = pCalibISOV2->y_lo_noiseprofile[k];
                pISO->y_hi_noiseprofile[k] = pCalibISOV2->y_hi_noiseprofile[k];
            }
            for(int k = 0; k < 3; k++) {
                pISO->uv_lo_noiseprofile[k] = pCalibISOV2->uv_lo_noiseprofile[k];
                pISO->uv_hi_noiseprofile[k] = pCalibISOV2->uv_hi_noiseprofile[k];
            }
 
            //tuning
            pISO->iso = pTuningISOV2->iso;
            pISO->weight_limit_y[0] = pTuningISOV2->weight_limit_y_0;
            pISO->weight_limit_y[1] = pTuningISOV2->weight_limit_y_1;
            pISO->weight_limit_y[2] = pTuningISOV2->weight_limit_y_2;
            pISO->weight_limit_y[3] = pTuningISOV2->weight_limit_y_3;
 
            pISO->weight_limit_uv[0] = pTuningISOV2->weight_limit_uv_0;
            pISO->weight_limit_uv[1] = pTuningISOV2->weight_limit_uv_1;
            pISO->weight_limit_uv[2] = pTuningISOV2->weight_limit_uv_2;
 
            pISO->ratio_frq[0] = pTuningISOV2->ratio_frq_y_l;
            pISO->ratio_frq[1] = pTuningISOV2->ratio_frq_y_h;
            pISO->ratio_frq[2] = pTuningISOV2->ratio_frq_uv_l;
            pISO->ratio_frq[3] = pTuningISOV2->ratio_frq_uv_h;
 
            pISO->luma_w_in_chroma[0] = pTuningISOV2->luma_w_in_chroma_0;
            pISO->luma_w_in_chroma[1] = pTuningISOV2->luma_w_in_chroma_1;
            pISO->luma_w_in_chroma[2] = pTuningISOV2->luma_w_in_chroma_2;
 
            pISO->y_lo_bfscale[0] = pTuningISOV2->y_lo_bfscale_0;
            pISO->y_lo_bfscale[1] = pTuningISOV2->y_lo_bfscale_1;
            pISO->y_lo_bfscale[2] = pTuningISOV2->y_lo_bfscale_2;
            pISO->y_lo_bfscale[3] = pTuningISOV2->y_lo_bfscale_3;
 
            pISO->y_hi_bfscale[0] = pTuningISOV2->y_hi_bfscale_0;
            pISO->y_hi_bfscale[1] = pTuningISOV2->y_hi_bfscale_1;
            pISO->y_hi_bfscale[2] = pTuningISOV2->y_hi_bfscale_2;
            pISO->y_hi_bfscale[3] = pTuningISOV2->y_hi_bfscale_3;
 
            pISO->y_denoisestrength = pTuningISOV2->y_denoisestrength;
 
            pISO->uv_lo_bfscale[0] = pTuningISOV2->uv_lo_bfscale_0;
            pISO->uv_lo_bfscale[1] = pTuningISOV2->uv_lo_bfscale_1;
            pISO->uv_lo_bfscale[2] = pTuningISOV2->uv_lo_bfscale_2;
 
            pISO->uv_hi_bfscale[0] = pTuningISOV2->uv_hi_bfscale_0;
            pISO->uv_hi_bfscale[1] = pTuningISOV2->uv_hi_bfscale_1;
            pISO->uv_hi_bfscale[2] = pTuningISOV2->uv_hi_bfscale_2;
 
            pISO->uv_denoisestrength = pTuningISOV2->uv_denoisestrength;
 
            for(int k = 0; k < 6; k++) {
                pISO->y_lumanrpoint[k] = pTuningISOV2->luma_para.y_lumanrpoint[k];
                pISO->y_lumanrcurve[k] = pTuningISOV2->luma_para.y_lumanrcurve[k];
                pISO->uv_lumanrpoint[k] = pTuningISOV2->luma_para.uv_lumanrpoint[k];
                pISO->uv_lumanrcurve[k] = pTuningISOV2->luma_para.uv_lumanrcurve[k];
            }
 
            for(int k = 0; k < 6; k++) {
                pISO->y_lo_lvl0_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_lo_lvl0_gfdelta[k];
                pISO->y_hi_lvl0_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_hi_lvl0_gfdelta[k];
                pISO->uv_lo_lvl0_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_lo_lvl0_gfdelta[k];
                pISO->uv_hi_lvl0_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_hi_lvl0_gfdelta[k];
                pISO->lvl0_gfsigma[k] = pTuningISOV2->gfsigma_para.lvl0_gfsigma[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pISO->y_lo_lvl1_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_lo_lvl1_gfdelta[k];
                pISO->y_hi_lvl1_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_hi_lvl1_gfdelta[k];
                pISO->y_lo_lvl2_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_lo_lvl2_gfdelta[k];
                pISO->y_hi_lvl2_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_hi_lvl2_gfdelta[k];
                pISO->y_lo_lvl3_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_lo_lvl3_gfdelta[k];
                pISO->y_hi_lvl3_gfdelta[k] = pTuningISOV2->y_gfdelta_para.y_hi_lvl3_gfdelta[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pISO->uv_lo_lvl1_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_lo_lvl1_gfdelta[k];
                pISO->uv_hi_lvl1_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_hi_lvl1_gfdelta[k];
                pISO->uv_lo_lvl2_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_lo_lvl2_gfdelta[k];
                pISO->uv_hi_lvl2_gfdelta[k] = pTuningISOV2->uv_gfdelta_para.uv_hi_lvl2_gfdelta[k];
            }
 
            for(int k = 0; k < 3; k++) {
                pISO->lvl1_gfsigma[k] = pTuningISOV2->gfsigma_para.lvl1_gfsigma[k];
                pISO->lvl2_gfsigma[k] = pTuningISOV2->gfsigma_para.lvl2_gfsigma[k];
                pISO->lvl3_gfsigma[k] = pTuningISOV2->gfsigma_para.lvl3_gfsigma[k];
            }
        }
    }
 
 
    //motion
    pMotion = &pCalibdb->mode_cell[mode_idx].motion;
    pMotion->enable = pTuningParaV2->enable;
    for(int i = 0; i < MFNRV1_ISO_NUM; i++) {
        pMotionISOV2 = &pCalibdbV2->TuningPara.Motion.Motion_ISO[i];
        pMotion->iso[i] = pMotionISOV2->iso;
        pMotion->sigmaHScale[i] = pMotionISOV2->sigmaHScale;
        pMotion->sigmaLScale[i] = pMotionISOV2->sigmaLScale;
        pMotion->lightClp[i] = pMotionISOV2->lightClp;
        pMotion->uvWeight[i] = pMotionISOV2->uvWeight;
        pMotion->mfnrSigmaScale[i] = pMotionISOV2->mfnrSigmaScale;
        pMotion->yuvnrGainScale0[i] = pMotionISOV2->yuvnrGainScale0;
        pMotion->yuvnrGainScale1[i] = pMotionISOV2->yuvnrGainScale1;
        pMotion->yuvnrGainScale2[i] = pMotionISOV2->yuvnrGainScale2;
        pMotion->frame_limit_y[i] = pMotionISOV2->frame_limit_y;
        pMotion->frame_limit_uv[i] = pMotionISOV2->frame_limit_uv;
    }
 
    //dynamic
    pDynamic = &pCalibdb->mode_cell[mode_idx].dynamic;
    pDynamicV2 = &pCalibdbV2->TuningPara.Dynamic;
    pDynamic->enable = pDynamicV2->Enable;
    pDynamic->lowth_iso = pDynamicV2->LowTh_iso;
    pDynamic->lowth_time = pDynamicV2->LowTh_time;
    pDynamic->highth_iso = pDynamicV2->HighTh_iso;
    pDynamic->highth_time = pDynamicV2->HighTh_time;
 
    return 0;
 
}
 
 
void mfnrV1_calibdbV2_free(CalibDbV2_MFNR_t *pCalibdbV2)
{
    if(pCalibdbV2) {
        if(pCalibdbV2->Version) {
            free(pCalibdbV2->Version);
        }
 
        if(pCalibdbV2->CalibPara.Setting) {
            for(int i = 0; i < pCalibdbV2->CalibPara.Setting_len; i++) {
                if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO) {
                    if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO) {
                        free(pCalibdbV2->CalibPara.Setting[i].Calib_ISO);
                    }
                    if(pCalibdbV2->CalibPara.Setting[i].SNR_Mode) {
                        free(pCalibdbV2->CalibPara.Setting[i].SNR_Mode);
                    }
                    if(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode) {
                        free(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode);
                    }
                }
            }
            free(pCalibdbV2->CalibPara.Setting);
        }
 
 
        if(pCalibdbV2->TuningPara.Setting) {
            for(int i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
                if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO) {
                    if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO) {
                        free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO);
                    }
                    if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode) {
                        free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode);
                    }
                    if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode) {
                        free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode);
                    }
                }
            }
            free(pCalibdbV2->TuningPara.Setting);
        }
 
        if(pCalibdbV2->TuningPara.Motion.Motion_ISO) {
            free(pCalibdbV2->TuningPara.Motion.Motion_ISO);
        }
 
        free(pCalibdbV2);
    }
}