hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
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
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
#include "iqconverter.h"
 
#define DEFAULT_MAIN_SCENE  "normal"
#define DEFAULT_SUB_SCENE  "day"
 
#if defined(ISP_HW_V20)
int g_rkaiq_isp_hw_ver = 20;
#elif defined(ISP_HW_V21)
int g_rkaiq_isp_hw_ver = 21;
#else
#error "WRONG ISP_HW_VERSION, ONLY SUPPORT V20 AND V21 NOW !"
#endif
 
namespace RkCam {
 
IQConverter::IQConverter(const char *xml, const char *json)
    : ifile(std::string(xml)), ofile(std::string(json)), calibv1(nullptr) {
    calibv2 = calibdbV2_ctx_new();
    memset(&calibproj, 0, sizeof(CamCalibDbProj_t));
}
 
int IQConverter::convert() {
    calibv1 = RkAiqCalibDb::createCalibDb((char *)ifile.c_str());
    if (!calibv1) {
        printf("[XML]load %s failed!\n", ifile.c_str());
        return -1;
    } else {
        printf("[XML] %s load finished!\n", ifile.c_str());
    }
    doConvert();
 
    calibproj.sensor_calib = *calibv2->sensor_info;
    calibproj.module_calib = *calibv2->module_info;
    calibproj.sys_static_cfg = *calibv2->sys_cfg;
    addToScene(&calibproj, DEFAULT_MAIN_SCENE, DEFAULT_SUB_SCENE, calibv2);
 
    if (0 != RkAiqCalibDbV2::calibproj2json(ofile.c_str(), &calibproj)) {
        printf("convert %s to %s failed!\n", ifile.c_str(), ofile.c_str());
        return -1;
    }
 
    CalibV2AecFree(calibv2);
 
    if (CHECK_ISP_HW_V20())
        CalibV2AwbV20Free(calibv2);
    if (CHECK_ISP_HW_V21())
        CalibV2AwbV21Free(calibv2);
 
    //bayernrV1_calibdbV2_free(calibv2->bayernr_v1);
    //mfnrV1_calibdbV2_free(calibv2->mfnr_v1);
    //uvnrV1_calibdbV2_free(calibv2->uvnr_v1);
    //ynrV1_calibdbV2_free(calibv2->ynr_v1);
 
    CalibV2CCMFree(calibv2);
    CalibV2AfFree(calibv2);
    CalibV2Lut3DFree(calibv2);
    return 0;
}
 
void CalibConverterAE::convert(CamCalibDbV2Context_t *calibv2,
                               CamCalibDbContext_t *calibv1) {
 
    CalibDb_Aec_ParaV2_t* calibv2_ae_calib =
        (CalibDb_Aec_ParaV2_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, ae_calib));
    memset(calibv2_ae_calib, 0, sizeof(CalibDb_Aec_ParaV2_t));
 
    convertAecCalibV1ToCalibV2(calibv1, calibv2);
 
#if 1
    CalibDb_Sensor_ParaV2_t* calibv2_sensor_calib =
        (CalibDb_Sensor_ParaV2_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, sensor_calib));
    convertSensorinfoCalibV1ToCalibV2(calibv1, calibv2_sensor_calib);
 
    CalibDb_Module_ParaV2_t* calibv2_module_calib = 
        (CalibDb_Module_ParaV2_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, module_calib));
    convertModuleinfoCalibV1ToCalibV2(calibv1, calibv2_module_calib);
#endif
}
 
void CalibConverterAWB::convert(CamCalibDbV2Context_t *calibv2,
                                CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        convertCalib2calibV20(calibv1, calibv2);
    }
    if (CHECK_ISP_HW_V21()) {
        convertCalib2calibV21(calibv1, calibv2);
    }
}
 
void CalibConverterAblc::convert(CamCalibDbV2Context_t *calibv2,
                                 CamCalibDbContext_t *calibv1) {
    CalibDb_Blc_t* calib_v1_blc =
        (CalibDb_Blc_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, blc);
    if (!calib_v1_blc)
        return;
 
    CalibDbV2_Ablc_t* calibv2_ablc_calib =
        (CalibDbV2_Ablc_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, ablc_calib));
    if (!calibv2_ablc_calib)
        return;
    //len
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len = 13;
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.R_Channel_len = calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len;
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gr_Channel_len = calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len;
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gb_Channel_len = calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len;
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.B_Channel_len = calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len;
 
    //malloc
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO = (float *) malloc(sizeof(float) * 13);
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.R_Channel = (float *) malloc(sizeof(float) * 13);
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gr_Channel = (float *) malloc(sizeof(float) * 13);
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gb_Channel = (float *) malloc(sizeof(float) * 13);
    calibv2_ablc_calib->BlcTuningPara.BLC_Data.B_Channel = (float *) malloc(sizeof(float) * 13);
 
    calibv2_ablc_calib->BlcTuningPara.enable = calib_v1_blc->enable ? true : false;
    for(int i = 0; i < calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO_len; i++) {
        calibv2_ablc_calib->BlcTuningPara.BLC_Data.ISO[i] = calib_v1_blc->mode_cell[0].iso[i];
        calibv2_ablc_calib->BlcTuningPara.BLC_Data.R_Channel[i] = calib_v1_blc->mode_cell[0].level[0][i];
        calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gr_Channel[i] = calib_v1_blc->mode_cell[0].level[1][i];
        calibv2_ablc_calib->BlcTuningPara.BLC_Data.Gb_Channel[i] = calib_v1_blc->mode_cell[0].level[2][i];
        calibv2_ablc_calib->BlcTuningPara.BLC_Data.B_Channel[i] = calib_v1_blc->mode_cell[0].level[3][i];
    }
}
 
void CalibConverterAdpcc::convert(CamCalibDbV2Context_t *calibv2,
                                  CamCalibDbContext_t *calibv1) {
    CalibDb_Dpcc_t* calibv1_dpcc =
        (CalibDb_Dpcc_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, dpcc);
    if (!calibv1_dpcc)
        return;
 
    CalibDbV2_Dpcc_t* calibv2_adpcc_calib =
        (CalibDbV2_Dpcc_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, adpcc_calib));
    if (!calibv2_adpcc_calib)
        return;
 
    //len
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO_len = 13;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Single_level_len = calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO_len;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Double_level_len = calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO_len;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Triple_level_len = calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO_len;
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO_len = 13;
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_single_len = calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO_len;
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_multiple_len = calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO_len;
 
    //malloc
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO = (float *) malloc(sizeof(float) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Single_level = (int *) malloc(sizeof(int) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Double_level = (int *) malloc(sizeof(int) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Triple_level = (int *) malloc(sizeof(int) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO = (float *) malloc(sizeof(float) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_single = (int *) malloc(sizeof(int) * 13);
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_multiple = (int *) malloc(sizeof(int) * 13);
 
    //enable
    calibv2_adpcc_calib->DpccTuningPara.Enable = calibv1_dpcc->enable ? true : false;
 
    //fast mode
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_mode_en = calibv1_dpcc->fast.fast_mode_double_en ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Single_enable = calibv1_dpcc->fast.fast_mode_single_en ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Double_enable = calibv1_dpcc->fast.fast_mode_double_en ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Triple_enable = calibv1_dpcc->fast.fast_mode_triple_en ? true : false;
    for(int i = 0; i < calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO_len; i++) {
        calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.ISO[i] = calibv1_dpcc->fast.ISO[i];
        calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Single_level[i] = calibv1_dpcc->fast.fast_mode_single_level[i];
        calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Double_level[i] = calibv1_dpcc->fast.fast_mode_double_level[i];
        calibv2_adpcc_calib->DpccTuningPara.Fast_Mode.Fast_Data.Triple_level[i] = calibv1_dpcc->fast.fast_mode_triple_level[i];
    }
 
    //expert mode
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.grayscale_mode = calibv1_dpcc->expert.grayscale_mode ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.stage1_Enable = calibv1_dpcc->expert.stage1_Enable[0] ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.rk_out_sel = calibv1_dpcc->expert.rk_out_sel[0];
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.dpcc_out_sel = calibv1_dpcc->expert.dpcc_out_sel[0] ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.stage1_g_3x3 = calibv1_dpcc->expert.stage1_g_3x3[0] ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.stage1_rb_3x3 = calibv1_dpcc->expert.stage1_rb_3x3[0] ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.stage1_inc_g_center = calibv1_dpcc->expert.stage1_inc_g_center[0] ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.stage1_inc_rb_center = calibv1_dpcc->expert.stage1_inc_rb_center[0] ? true : false;
    for(int i = 0; i < CALIBDB_ADPCC_KNOTS_NUM; i++) {
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.SetEnable.ISO[i] = calibv1_dpcc->expert.iso[i];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.SetEnable.fix_set[i] = calibv1_dpcc->expert.stage1_use_fix_set[i];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.SetEnable.set1[i] = calibv1_dpcc->expert.stage1_use_set1[i];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.SetEnable.set2[i] = calibv1_dpcc->expert.stage1_use_set2[i];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.SetEnable.set3[i] = calibv1_dpcc->expert.stage1_use_set3[i];
    }
    for(int j = 0; j < CALIBDB_ADPCC_KNOTS_NUM; j++) {
        //set1
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RK.RK_enable[j] = calibv1_dpcc->expert.set[0].rk.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RK.rb_sw_mindis[j] = calibv1_dpcc->expert.set[0].rk.rb_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RK.g_sw_mindis[j] = calibv1_dpcc->expert.set[0].rk.g_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RK.sw_dis_scale_min[j] = calibv1_dpcc->expert.set[0].rk.sw_dis_scale_min[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RK.sw_dis_scale_max[j] = calibv1_dpcc->expert.set[0].rk.sw_dis_scale_max[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.LC.LC_enable[j] = calibv1_dpcc->expert.set[0].lc.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.LC.g_line_thr[j] = calibv1_dpcc->expert.set[0].lc.g_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.LC.rb_line_thr[j] = calibv1_dpcc->expert.set[0].lc.rb_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.LC.g_line_mad_fac[j] = calibv1_dpcc->expert.set[0].lc.g_line_mad_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.LC.rb_line_mad_fac[j] = calibv1_dpcc->expert.set[0].lc.rb_line_mad_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.PG.PG_enable[j] = calibv1_dpcc->expert.set[0].pg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.PG.g_pg_fac[j] = calibv1_dpcc->expert.set[0].pg.g_pg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.PG.rb_pg_fac[j] = calibv1_dpcc->expert.set[0].pg.rb_pg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RND.RND_enable[j] = calibv1_dpcc->expert.set[0].rnd.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RND.g_rnd_thr[j] = calibv1_dpcc->expert.set[0].rnd.g_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RND.rb_rnd_thr[j] = calibv1_dpcc->expert.set[0].rnd.rb_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RND.g_rnd_offs[j] = calibv1_dpcc->expert.set[0].rnd.g_rnd_offs[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RND.rb_rnd_offs[j] = calibv1_dpcc->expert.set[0].rnd.rb_rnd_offs[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RG.RG_enable[j] = calibv1_dpcc->expert.set[0].rg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RG.g_rg_fac[j] = calibv1_dpcc->expert.set[0].rg.g_rg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RG.rb_rg_fac[j] = calibv1_dpcc->expert.set[0].rg.rb_rg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RO.RO_enable[j] = calibv1_dpcc->expert.set[0].ro.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RO.rb_ro_lim[j] = calibv1_dpcc->expert.set[0].ro.rb_ro_lim[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set1.RO.g_ro_lim[j] = calibv1_dpcc->expert.set[0].ro.g_ro_lim[j];
        //set2
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RK.RK_enable[j] = calibv1_dpcc->expert.set[1].rk.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RK.rb_sw_mindis[j] = calibv1_dpcc->expert.set[1].rk.rb_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RK.g_sw_mindis[j] = calibv1_dpcc->expert.set[1].rk.g_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RK.sw_dis_scale_min[j] = calibv1_dpcc->expert.set[1].rk.sw_dis_scale_min[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RK.sw_dis_scale_max[j] = calibv1_dpcc->expert.set[1].rk.sw_dis_scale_max[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.LC.LC_enable[j] = calibv1_dpcc->expert.set[1].lc.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.LC.g_line_thr[j] = calibv1_dpcc->expert.set[1].lc.g_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.LC.rb_line_thr[j] = calibv1_dpcc->expert.set[1].lc.rb_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.LC.g_line_mad_fac[j] = calibv1_dpcc->expert.set[1].lc.g_line_mad_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.LC.rb_line_mad_fac[j] = calibv1_dpcc->expert.set[1].lc.rb_line_mad_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.PG.PG_enable[j] = calibv1_dpcc->expert.set[1].pg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.PG.g_pg_fac[j] = calibv1_dpcc->expert.set[1].pg.g_pg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.PG.rb_pg_fac[j] = calibv1_dpcc->expert.set[1].pg.rb_pg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RND.RND_enable[j] = calibv1_dpcc->expert.set[1].rnd.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RND.g_rnd_thr[j] = calibv1_dpcc->expert.set[1].rnd.g_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RND.rb_rnd_thr[j] = calibv1_dpcc->expert.set[1].rnd.rb_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RND.g_rnd_offs[j] = calibv1_dpcc->expert.set[1].rnd.g_rnd_offs[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RND.rb_rnd_offs[j] = calibv1_dpcc->expert.set[1].rnd.rb_rnd_offs[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RG.RG_enable[j] = calibv1_dpcc->expert.set[1].rg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RG.g_rg_fac[j] = calibv1_dpcc->expert.set[1].rg.g_rg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RG.rb_rg_fac[j] = calibv1_dpcc->expert.set[1].rg.rb_rg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RO.RO_enable[j] = calibv1_dpcc->expert.set[1].ro.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RO.rb_ro_lim[j] = calibv1_dpcc->expert.set[1].ro.rb_ro_lim[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set2.RO.g_ro_lim[j] = calibv1_dpcc->expert.set[1].ro.g_ro_lim[j];
        //set3
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RK.RK_enable[j] = calibv1_dpcc->expert.set[2].rk.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RK.rb_sw_mindis[j] = calibv1_dpcc->expert.set[2].rk.rb_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RK.g_sw_mindis[j] = calibv1_dpcc->expert.set[2].rk.g_sw_mindis[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RK.sw_dis_scale_min[j] = calibv1_dpcc->expert.set[2].rk.sw_dis_scale_min[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RK.sw_dis_scale_max[j] = calibv1_dpcc->expert.set[2].rk.sw_dis_scale_max[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.LC.LC_enable[j] = calibv1_dpcc->expert.set[2].lc.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.LC.g_line_thr[j] = calibv1_dpcc->expert.set[2].lc.g_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.LC.rb_line_thr[j] = calibv1_dpcc->expert.set[2].lc.rb_line_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.LC.g_line_mad_fac[j] = calibv1_dpcc->expert.set[2].lc.g_line_mad_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.LC.rb_line_mad_fac[j] = calibv1_dpcc->expert.set[2].lc.rb_line_mad_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.PG.PG_enable[j] = calibv1_dpcc->expert.set[2].pg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.PG.g_pg_fac[j] = calibv1_dpcc->expert.set[2].pg.g_pg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.PG.rb_pg_fac[j] = calibv1_dpcc->expert.set[2].pg.rb_pg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RND.RND_enable[j] = calibv1_dpcc->expert.set[2].rnd.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RND.g_rnd_thr[j] = calibv1_dpcc->expert.set[2].rnd.g_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RND.rb_rnd_thr[j] = calibv1_dpcc->expert.set[2].rnd.rb_rnd_thr[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RND.g_rnd_offs[j] = calibv1_dpcc->expert.set[2].rnd.g_rnd_offs[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RND.rb_rnd_offs[j] = calibv1_dpcc->expert.set[2].rnd.rb_rnd_offs[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RG.RG_enable[j] = calibv1_dpcc->expert.set[2].rg.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RG.g_rg_fac[j] = calibv1_dpcc->expert.set[2].rg.g_rg_fac[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RG.rb_rg_fac[j] = calibv1_dpcc->expert.set[2].rg.rb_rg_fac[j];
 
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RO.RO_enable[j] = calibv1_dpcc->expert.set[2].ro.g_enable[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RO.rb_ro_lim[j] = calibv1_dpcc->expert.set[2].ro.rb_ro_lim[j];
        calibv2_adpcc_calib->DpccTuningPara.Expert_Mode.set3.RO.g_ro_lim[j] = calibv1_dpcc->expert.set[2].ro.g_ro_lim[j];
    }
 
    //pdaf
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.en = calibv1_dpcc->pdaf.en ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.offsetx = calibv1_dpcc->pdaf.offsetx;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.offsety = calibv1_dpcc->pdaf.offsety;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.wrapx = calibv1_dpcc->pdaf.wrapx;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.wrapy = calibv1_dpcc->pdaf.wrapy;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.wrapx_num = calibv1_dpcc->pdaf.wrapx_num;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.wrapy_num = calibv1_dpcc->pdaf.wrapy_num;
    calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.forward_med = calibv1_dpcc->pdaf.forward_med;
    for(int i = 0; i < 16; i++) {
        calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.point_en[i] = calibv1_dpcc->pdaf.point_en[i];
        calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.point_x[i] = calibv1_dpcc->pdaf.point_x[i];
        calibv2_adpcc_calib->DpccTuningPara.Dpcc_pdaf.point_y[i] = calibv1_dpcc->pdaf.point_y[i];
    }
 
    //sensor dpcc
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.sensor_dpcc_auto_en = calibv1_dpcc->sensor_dpcc.en ? true : false;
    calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.max_level = (int)(calibv1_dpcc->sensor_dpcc.max_level);
    for(int i = 0; i < calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO_len; i++) {
        calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.ISO[i] = (int)(calibv1_dpcc->sensor_dpcc.iso[i]);
        calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_single[i] = (int)(calibv1_dpcc->sensor_dpcc.level_single[i]);
        calibv2_adpcc_calib->DpccTuningPara.Sensor_dpcc.SensorDpcc_Data.level_multiple[i] = (int)(calibv1_dpcc->sensor_dpcc.level_multiple[i]);
    }
}
 
void CalibConverterAdegamma::convert(CamCalibDbV2Context_t *calibv2,
                                     CamCalibDbContext_t *calibv1) {
    CalibDb_Degamma_t* calib_v1_degamma =
        (CalibDb_Degamma_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, degamma);
    if (!calib_v1_degamma)
        return;
 
    CalibDbV2_Adegmma_t* calibv2_adegamma_calib =
        (CalibDbV2_Adegmma_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, adegamma_calib));
    if (!calibv2_adegamma_calib)
        return;
 
    calibv2_adegamma_calib->DegammaTuningPara.degamma_en = calib_v1_degamma->degamma_en ? true : false;
    for(int i = 0; i < ADEGAMMA_CRUVE_KNOTS; i++) {
        calibv2_adegamma_calib->DegammaTuningPara.X_axis[i] = (int)(calib_v1_degamma->mode[0].X_axis[i] + 0.5);
        calibv2_adegamma_calib->DegammaTuningPara.curve_R[i] = (int)(calib_v1_degamma->mode[0].curve_R[i] + 0.5);
        calibv2_adegamma_calib->DegammaTuningPara.curve_G[i] = (int)(calib_v1_degamma->mode[0].curve_G[i] + 0.5);
        calibv2_adegamma_calib->DegammaTuningPara.curve_B[i] = (int)(calib_v1_degamma->mode[0].curve_B[i] + 0.5);
    }
}
 
void CalibConverterAgic::convert(CamCalibDbV2Context_t *calibv2,
                                 CamCalibDbContext_t *calibv1) {
    //len
    CalibDbV2_Gic_V20_t* calibv2_agic_calib_V20 =
        (CalibDbV2_Gic_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, agic_calib_v20));
    if (calibv2_agic_calib_V20) {
        calibv2_agic_calib_V20->GicTuningPara.GicData.ISO_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_busy_thre_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr1_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr2_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.gb_thre_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorV_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorVboth_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.dark_thre_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.dark_threHi_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1_dark_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2_dark_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark1_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark2_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_0_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_1_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitLo_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitHi_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.textureStrength_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleHi_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleLo_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.globalStrength_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coea_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coeb_len = 9;
        calibv2_agic_calib_V20->GicTuningPara.GicData.diff_clip_len = 9;
    }
 
    CalibDbV2_Gic_V21_t* calibv2_agic_calib_V21 =
        (CalibDbV2_Gic_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, agic_calib_v21));
    if (calibv2_agic_calib_V21) {
        calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len = 9;
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_busy_thre_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr1_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr2_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.gb_thre_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorV_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorVboth_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.dark_thre_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.dark_threHi_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1_dark_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2_dark_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark1_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark2_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_0_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_1_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseScale_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseBase_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.globalStrength_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
        calibv2_agic_calib_V21->GicTuningPara.GicData.diff_clip_len = calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len;
    }
 
    //malloc
    if (calibv2_agic_calib_V20) {
        calibv2_agic_calib_V20->GicTuningPara.GicData.ISO = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_busy_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.gb_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorV = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorVboth = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.dark_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.dark_threHi = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1_dark = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2_dark = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_0 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitLo = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitHi = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.textureStrength = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleHi = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleLo = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.globalStrength = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coea = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coeb = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V20->GicTuningPara.GicData.diff_clip = (float *) malloc(sizeof(float) * 9);
    }
 
    if (calibv2_agic_calib_V21) {
        calibv2_agic_calib_V21->GicTuningPara.GicData.ISO = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_busy_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.gb_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorV = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorVboth = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.dark_thre = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.dark_threHi = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1_dark = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2_dark = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark2 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_0 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_1 = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseScale = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseBase = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.globalStrength = (float *) malloc(sizeof(float) * 9);
        calibv2_agic_calib_V21->GicTuningPara.GicData.diff_clip = (float *) malloc(sizeof(float) * 9);
    }
    //v20
    if (CHECK_ISP_HW_V20()) {
        CalibDb_Gic_t* calibv1_gic =
            (CalibDb_Gic_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, gic);
        calibv2_agic_calib_V20->GicTuningPara.enable = calibv1_gic->calib_v20[0].gic_en ? true : false;
        calibv2_agic_calib_V20->GicTuningPara.edge_en = calibv1_gic->calib_v20[0].edge_en ? true : false;
        calibv2_agic_calib_V20->GicTuningPara.noise_cut_en = calibv1_gic->calib_v20[0].noise_cut_en ? true : false;
        calibv2_agic_calib_V20->GicTuningPara.gr_ration = calibv1_gic->calib_v20[0].gr_ration;
        for(int i = 0; i < calibv2_agic_calib_V20->GicTuningPara.GicData.ISO_len; i++) {
            calibv2_agic_calib_V20->GicTuningPara.GicData.ISO[i] = calibv1_gic->calib_v20[0].setting.iso[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.min_busy_thre[i] = calibv1_gic->calib_v20[0].setting.min_busy_thre[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr1[i] = calibv1_gic->calib_v20[0].setting.min_grad_thr1[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr2[i] = calibv1_gic->calib_v20[0].setting.min_grad_thr2[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1[i] = calibv1_gic->calib_v20[0].setting.k_grad1[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2[i] = calibv1_gic->calib_v20[0].setting.k_grad2[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.gb_thre[i] = calibv1_gic->calib_v20[0].setting.gb_thre[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorV[i] = calibv1_gic->calib_v20[0].setting.maxCorV[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.maxCorVboth[i] = calibv1_gic->calib_v20[0].setting.maxCorVboth[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.dark_thre[i] = calibv1_gic->calib_v20[0].setting.dark_thre[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.dark_threHi[i] = calibv1_gic->calib_v20[0].setting.dark_threHi[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad1_dark[i] = calibv1_gic->calib_v20[0].setting.k_grad1_dark[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.k_grad2_dark[i] = calibv1_gic->calib_v20[0].setting.k_grad2_dark[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark1[i] = calibv1_gic->calib_v20[0].setting.min_grad_thr_dark1[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.min_grad_thr_dark2[i] = calibv1_gic->calib_v20[0].setting.min_grad_thr_dark2[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_0[i] = calibv1_gic->calib_v20[0].setting.noiseCurve_0[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.noiseCurve_1[i] = calibv1_gic->calib_v20[0].setting.noiseCurve_1[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitLo[i] = calibv1_gic->calib_v20[0].setting.GValueLimitLo[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.GValueLimitHi[i] = calibv1_gic->calib_v20[0].setting.GValueLimitHi[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.textureStrength[i] = calibv1_gic->calib_v20[0].setting.textureStrength[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleLo[i] = calibv1_gic->calib_v20[0].setting.ScaleLo[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.ScaleHi[i] = calibv1_gic->calib_v20[0].setting.ScaleHi[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.globalStrength[i] = calibv1_gic->calib_v20[0].setting.globalStrength[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coea[i] = calibv1_gic->calib_v20[0].setting.noise_coea[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.noise_coeb[i] = calibv1_gic->calib_v20[0].setting.noise_coeb[i];
            calibv2_agic_calib_V20->GicTuningPara.GicData.diff_clip[i] = calibv1_gic->calib_v20[0].setting.diff_clip[i];
        }
    }
 
    //v21
    if (CHECK_ISP_HW_V21()) {
        CalibDb_Gic_Isp21_t* calibv1_gic_isp21 =
            (CalibDb_Gic_Isp21_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, gic);
        calibv2_agic_calib_V21->GicTuningPara.enable = calibv1_gic_isp21->calib_v21[0].gic_en ? true : false;
        calibv2_agic_calib_V21->GicTuningPara.gr_ration = calibv1_gic_isp21->calib_v21[0].gr_ration;
        for(int i = 0; i < calibv2_agic_calib_V21->GicTuningPara.GicData.ISO_len; i++) {
            calibv2_agic_calib_V21->GicTuningPara.GicData.ISO[i] = calibv1_gic_isp21->calib_v21[0].setting.iso[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.min_busy_thre[i] = calibv1_gic_isp21->calib_v21[0].setting.min_busy_thre[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr1[i] = calibv1_gic_isp21->calib_v21[0].setting.min_grad_thr1[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr2[i] = calibv1_gic_isp21->calib_v21[0].setting.min_grad_thr2[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1[i] = calibv1_gic_isp21->calib_v21[0].setting.k_grad1[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2[i] = calibv1_gic_isp21->calib_v21[0].setting.k_grad2[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.gb_thre[i] = calibv1_gic_isp21->calib_v21[0].setting.gb_thre[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorV[i] = calibv1_gic_isp21->calib_v21[0].setting.maxCorV[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.maxCorVboth[i] = calibv1_gic_isp21->calib_v21[0].setting.maxCorVboth[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.dark_thre[i] = calibv1_gic_isp21->calib_v21[0].setting.dark_thre[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.dark_threHi[i] = calibv1_gic_isp21->calib_v21[0].setting.dark_threHi[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad1_dark[i] = calibv1_gic_isp21->calib_v21[0].setting.k_grad1_dark[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.k_grad2_dark[i] = calibv1_gic_isp21->calib_v21[0].setting.k_grad2_dark[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark1[i] = calibv1_gic_isp21->calib_v21[0].setting.min_grad_thr_dark1[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.min_grad_thr_dark2[i] = calibv1_gic_isp21->calib_v21[0].setting.min_grad_thr_dark2[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_0[i] = calibv1_gic_isp21->calib_v21[0].setting.noiseCurve_0[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.noiseCurve_1[i] = calibv1_gic_isp21->calib_v21[0].setting.noiseCurve_1[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.globalStrength[i] = calibv1_gic_isp21->calib_v21[0].setting.globalStrength[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseBase[i] = calibv1_gic_isp21->calib_v21[0].setting.NoiseBase[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.NoiseScale[i] = calibv1_gic_isp21->calib_v21[0].setting.NoiseScale[i];
            calibv2_agic_calib_V21->GicTuningPara.GicData.diff_clip[i] = calibv1_gic_isp21->calib_v21[0].setting.diff_clip[i];
        }
    }
}
 
void CalibConverterAdehaze::convert(CamCalibDbV2Context_t *calibv2,
                                    CamCalibDbContext_t *calibv1) {
    convertDehazeCalib2CalibV2(calibv1, calibv2);
}
 
void CalibConverterAmerge::convert(CamCalibDbV2Context_t *calibv2,
                                   CamCalibDbContext_t *calibv1) {
    CalibDb_Amerge_Para_t* calibv1_amerge =
        (CalibDb_Amerge_Para_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, amerge);
    if (!calibv1_amerge)
        return;
 
    CalibDbV2_merge_t* calibv2_amerge_calib =
        (CalibDbV2_merge_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, amerge_calib));
    if (!calibv2_amerge_calib)
        return;
 
    //len
    calibv2_amerge_calib->MergeTuningPara.OECurve.EnvLv_len = 13;
    calibv2_amerge_calib->MergeTuningPara.OECurve.Smooth_len = calibv2_amerge_calib->MergeTuningPara.OECurve.EnvLv_len;
    calibv2_amerge_calib->MergeTuningPara.OECurve.Offset_len = calibv2_amerge_calib->MergeTuningPara.OECurve.EnvLv_len;
 
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef_len = 13;
    calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_smooth_len = calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef_len;
    calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_offset_len = calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef_len;
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_smooth_len = calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef_len;
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_offset_len = calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef_len;
 
    //malloc
    calibv2_amerge_calib->MergeTuningPara.OECurve.EnvLv = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.OECurve.Smooth = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.OECurve.Offset = (float *) malloc(sizeof(float) * 13);
 
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_smooth = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_offset = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_smooth = (float *) malloc(sizeof(float) * 13);
    calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_offset = (float *) malloc(sizeof(float) * 13);
 
    for(int i = 0; i < 13; i++) {
        calibv2_amerge_calib->MergeTuningPara.OECurve.EnvLv[i] = calibv1_amerge->envLevel[i];
        calibv2_amerge_calib->MergeTuningPara.OECurve.Smooth[i] = calibv1_amerge->oeCurve_smooth[i];
        calibv2_amerge_calib->MergeTuningPara.OECurve.Offset[i] = calibv1_amerge->oeCurve_offset[i];
        calibv2_amerge_calib->MergeTuningPara.MDCurve.MoveCoef[i] = calibv1_amerge->moveCoef[i];
        calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_smooth[i] = calibv1_amerge->mdCurveLm_smooth[i];
        calibv2_amerge_calib->MergeTuningPara.MDCurve.LM_offset[i] = calibv1_amerge->mdCurveLm_offset[i];
        calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_smooth[i] = calibv1_amerge->mdCurveMs_smooth[i];
        calibv2_amerge_calib->MergeTuningPara.MDCurve.MS_offset[i] = calibv1_amerge->mdCurveMs_offset[i];
    }
    calibv2_amerge_calib->MergeTuningPara.ByPassThr = 0;
    calibv2_amerge_calib->MergeTuningPara.OECurve_damp = calibv1_amerge->oeCurve_damp;
    calibv2_amerge_calib->MergeTuningPara.MDCurveLM_damp = calibv1_amerge->mdCurveLm_damp;
    calibv2_amerge_calib->MergeTuningPara.MDCurveMS_damp = calibv1_amerge->mdCurveMs_damp;
}
 
void CalibConverterAtmo::convert(CamCalibDbV2Context_t *calibv2,
                                 CamCalibDbContext_t *calibv1) {
    CalibDb_Atmo_Para_t* calibv1_atmo =
        (CalibDb_Atmo_Para_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, atmo);
    if (!calibv1_atmo )
        return;
 
    CalibDbV2_tmo_t* calibv2_atmo_calib =
        (CalibDbV2_tmo_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, atmo_calib));
    if (!calibv2_atmo_calib)
        return;
 
    //len
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len = 13;
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.Strength_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.ISO_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.Strength_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.Strength_len = calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
 
    //malloc
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.Strength = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.ISO = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.Strength = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv = (float *) malloc(sizeof(float) * 13);
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.Strength = (float *) malloc(sizeof(float) * 13);
 
 
    calibv2_atmo_calib->TmoTuningPara.Enable = calibv1_atmo->en[0].en;
    //global luma
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.Mode = calibv1_atmo->luma[0].GlobalLumaMode ? GLOBALLUMAMODE_ISO : GLOBALLUMAMODE_ENVLV;
    for(int i = 0; i < 13; i++) {
        calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv[i] = calibv1_atmo->luma[0].envLevel[i];
        calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO[i] = calibv1_atmo->luma[0].ISO[i];
        calibv2_atmo_calib->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength[i] = calibv1_atmo->luma[0].globalLuma[i];
    }
    calibv2_atmo_calib->TmoTuningPara.GlobalLuma.Tolerance = calibv1_atmo->luma[0].Tolerance;
    //details high light
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.Mode = calibv1_atmo->HighLight[0].DetailsHighLightMode ? DETAILSHIGHLIGHTMODE_ENVLV : DETAILSHIGHLIGHTMODE_OEPDF;
    for(int i = 0; i < 13; i++) {
 
        calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf[i] = calibv1_atmo->HighLight[0].OEPdf[i];
        calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv[i] = calibv1_atmo->HighLight[0].EnvLv[i];
        calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.HighLightData.Strength[i] = calibv1_atmo->HighLight[0].detailsHighLight[i];
    }
    calibv2_atmo_calib->TmoTuningPara.DetailsHighLight.Tolerance = calibv1_atmo->HighLight[0].Tolerance;
    //details low light
    if(calibv1_atmo->LowLight[0].DetailsLowLightMode == 0)
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_FOCUSLUMA;
    else if(calibv1_atmo->LowLight[0].DetailsLowLightMode > 0 && calibv1_atmo->LowLight[0].DetailsLowLightMode < 2)
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_DARKPDF;
    else if(calibv1_atmo->LowLight[0].DetailsLowLightMode >= 2)
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_ISO;
    for(int i = 0; i < 13; i++) {
 
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma[i] = calibv1_atmo->LowLight[0].FocusLuma[i];
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf[i] = calibv1_atmo->LowLight[0].DarkPdf[i];
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.ISO[i] = calibv1_atmo->LowLight[0].ISO[i];
        calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.LowLightData.Strength[i] = calibv1_atmo->LowLight[0].detailsLowLight[i];
    }
    calibv2_atmo_calib->TmoTuningPara.DetailsLowLight.Tolerance = calibv1_atmo->LowLight[0].Tolerance;
    //global tmo
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.Enable = calibv1_atmo->GlobaTMO[0].en ? true : false;
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.IIR = calibv1_atmo->GlobaTMO[0].iir;
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.Mode = calibv1_atmo->GlobaTMO[0].mode ? TMOTYPEMODE_ENVLV : TMOTYPEMODE_DYNAMICRANGE;
    for(int i = 0; i < 13; i++) {
 
        calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange[i] = calibv1_atmo->GlobaTMO[0].DynamicRange[i];
        calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv[i] = calibv1_atmo->GlobaTMO[0].EnvLv[i];
        calibv2_atmo_calib->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength[i] = calibv1_atmo->GlobaTMO[0].Strength[i];
    }
    calibv2_atmo_calib->TmoTuningPara.GlobaTMO.Tolerance = calibv1_atmo->GlobaTMO[0].Tolerance;
    //local tmo
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.Mode = calibv1_atmo->LocalTMO[0].LocalTMOMode ? TMOTYPEMODE_ENVLV : TMOTYPEMODE_DYNAMICRANGE;
    for(int i = 0; i < 13; i++) {
 
        calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange[i] = calibv1_atmo->LocalTMO[0].DynamicRange[i];
        calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv[i] = calibv1_atmo->LocalTMO[0].EnvLv[i];
        calibv2_atmo_calib->TmoTuningPara.LocalTMO.LocalTmoData.Strength[i] = calibv1_atmo->LocalTMO[0].Strength[i];
    }
    calibv2_atmo_calib->TmoTuningPara.LocalTMO.Tolerance = calibv1_atmo->LocalTMO[0].Tolerance;
    calibv2_atmo_calib->TmoTuningPara.damp = calibv1_atmo->damp;
}
 
void CalibConverterCpsl::convert(CamCalibDbV2Context_t* calibv2,
                                 CamCalibDbContext_t* calibv1) {
    CalibDb_Cpsl_t* calibv1_cpsl =
        (CalibDb_Cpsl_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, cpsl);
    if (!calibv1_cpsl)
        return;
 
    CalibDbV2_Cpsl_t* calibv2_cpsl_db =
        (CalibDbV2_Cpsl_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, cpsl));
    if (!calibv2_cpsl_db)
        return;
    CalibDbV2_Cpsl_Param_t* calibv2_cpsl_calib = &calibv2_cpsl_db->param;
 
    calibv2_cpsl_calib->enable = !!calibv1_cpsl->support_en;
    if (calibv1_cpsl->mode == 0) {
        calibv2_cpsl_calib->mode = RK_AIQ_OP_MODE_AUTO;
    } else if (calibv1_cpsl->mode == 1) {
        calibv2_cpsl_calib->mode = RK_AIQ_OP_MODE_MANUAL;
    } else {
        calibv2_cpsl_calib->mode = RK_AIQ_OP_MODE_INVALID;
    }
 
    calibv2_cpsl_calib->force_gray = !!calibv1_cpsl->gray;
    if (calibv1_cpsl->lght_src == 0) {
        calibv2_cpsl_calib->light_src = LED;
    } else if (calibv1_cpsl->lght_src == 1) {
        calibv2_cpsl_calib->light_src = IR;
    } else if (calibv1_cpsl->lght_src == 2) {
        calibv2_cpsl_calib->light_src = MIX;
    } else {
        calibv2_cpsl_calib->light_src = INVALID;
    }
    calibv2_cpsl_calib->auto_adjust_sens = calibv1_cpsl->ajust_sens;
    calibv2_cpsl_calib->auto_on2off_th = calibv1_cpsl->on2off_th;
    calibv2_cpsl_calib->auto_off2on_th = calibv1_cpsl->off2on_th;
    calibv2_cpsl_calib->manual_on = !!calibv1_cpsl->cpsl_on;
    calibv2_cpsl_calib->manual_strength = calibv1_cpsl->strength;
}
 
void CalibConverterAgamma::convert(CamCalibDbV2Context_t *calibv2,
                                   CamCalibDbContext_t *calibv1) {
    CalibDb_Gamma_t* calibv1_gamma =
        (CalibDb_Gamma_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, gamma);
    if (!calibv1_gamma)
        return;
 
    CalibDbV2_gamma_t* calibv2_agamma_calib =
        (CalibDbV2_gamma_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, agamma_calib));
    if (!calibv2_agamma_calib)
        return;
 
    calibv2_agamma_calib->GammaTuningPara.Gamma_en = calibv1_gamma->gamma_en ? true : false;
    calibv2_agamma_calib->GammaTuningPara.Gamma_out_segnum = calibv1_gamma->gamma_out_segnum ? GAMMATYPE_EQU : GAMMATYPE_LOG;
    calibv2_agamma_calib->GammaTuningPara.Gamma_out_offset = calibv1_gamma->gamma_out_offset;
    for(int i = 0; i < 45; i++)
        calibv2_agamma_calib->GammaTuningPara.Gamma_curve[i] = (int)(calibv1_gamma->curve_normal[i] + 0.5);
}
 
void CalibConverterBAYERNRV1::convert(CamCalibDbV2Context_t *calibv2,
                                      CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_BayerNr_2_t* calibv1_bayerNr =
            (CalibDb_BayerNr_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, bayerNr);
        if (!calibv1_bayerNr)
            return;
 
        CalibDbV2_BayerNrV1_t* calibv2_bayernr_v1 =
            (CalibDbV2_BayerNrV1_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, bayernr_v1));
        if (!calibv2_bayernr_v1)
            return;
 
        // TODO:
        bayernrV1_calibdb_to_calibdbV2(calibv1_bayerNr, calibv2_bayernr_v1, 0);
    }
 
}
 
void CalibConverterMFNRV1::convert(CamCalibDbV2Context_t *calibv2,
                                   CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_MFNR_2_t* calibv1_mfnr =
            (CalibDb_MFNR_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, mfnr);
        if (!calibv1_mfnr)
            return;
 
        CalibDbV2_MFNR_t* calibv2_mfnr_v1 =
            (CalibDbV2_MFNR_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, mfnr_v1));
        if (!calibv2_mfnr_v1)
            return;
 
        // TODO:
        mfnrV1_calibdb_to_calibdbV2(calibv1_mfnr, calibv2_mfnr_v1, 0);
    }
 
}
 
void CalibConverterUVNRV1::convert(CamCalibDbV2Context_t *calibv2,
                                   CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_UVNR_2_t* calibv1_uvnr =
            (CalibDb_UVNR_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, uvnr);
        if (!calibv1_uvnr)
            return;
 
        CalibDbV2_UVNR_t* calibv2_uvnr_v1 =
            (CalibDbV2_UVNR_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, uvnr_v1));
        if (!calibv2_uvnr_v1)
            return;
 
        // TODO:
        uvnrV1_calibdb_to_calibdbV2(calibv1_uvnr, calibv2_uvnr_v1, 0);
    }
 
}
 
void CalibConverterYNRV1::convert(CamCalibDbV2Context_t *calibv2,
                                  CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_YNR_2_t* calibv1_ynr =
            (CalibDb_YNR_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, ynr);
        if (!calibv1_ynr)
            return;
 
        CalibDbV2_YnrV1_t* calibv2_ynr_v1 =
            (CalibDbV2_YnrV1_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, ynr_v1));
        if (!calibv2_ynr_v1)
            return;
 
        // TODO:
        ynrV1_calibdb_to_calibdbV2(calibv1_ynr, calibv2_ynr_v1, 0);
    }
 
}
 
void CalibConverterSHARPV1::convert(CamCalibDbV2Context_t *calibv2,
                                    CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_Sharp_2_t* calibv1_sharp =
            (CalibDb_Sharp_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, sharp);
        if (!calibv1_sharp)
            return;
 
        CalibDbV2_SharpV1_t* calibv2_sharp_v1 =
            (CalibDbV2_SharpV1_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, sharp_v1));
        if (!calibv2_sharp_v1)
            return;
 
        // TODO:
        sharpV1_calibdb_to_calibdbV2(calibv1_sharp, calibv2_sharp_v1, 0);
    }
 
}
 
void CalibConverterEDGEFILTERV1::convert(CamCalibDbV2Context_t *calibv2,
        CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V20()) {
        CalibDb_EdgeFilter_2_t* calibv1_edgeFilter =
            (CalibDb_EdgeFilter_2_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, edgeFilter);
        if (!calibv1_edgeFilter)
            return;
 
        CalibDbV2_Edgefilter_t* calibv2_edgefilter_v1 =
            (CalibDbV2_Edgefilter_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, edgefilter_v1));
        if (!calibv2_edgefilter_v1)
            return;
 
        // TODO:
        edgefilterV1_calibdb_to_calibdbV2(calibv1_edgeFilter, calibv2_edgefilter_v1, 0);
    }
 
}
 
void CalibConverterDebayer::convert(CamCalibDbV2Context_t* calibv2,
                                    CamCalibDbContext_t* calibv1) {
    CalibDb_RKDM_t* calibv1_dm =
        (CalibDb_RKDM_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, dm);
    if (!calibv1_dm)
        return;
 
    CalibDbV2_Debayer_t* calibv2_debayer =
        (CalibDbV2_Debayer_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, debayer));
    if (!calibv2_debayer)
        return;
 
    calibv2_debayer->param.debayer_en = !!calibv1_dm->debayer_en;
    for (int i = 0; i < 5; i++) {
        calibv2_debayer->param.debayer_filter1[i] = calibv1_dm->debayer_filter1[i];
        calibv2_debayer->param.debayer_filter2[i] = calibv1_dm->debayer_filter2[i];
    }
    calibv2_debayer->param.debayer_gain_offset = calibv1_dm->debayer_gain_offset;
    for (int i = 0; i < 9; i++) {
        calibv2_debayer->param.array.ISO[i] = calibv1_dm->ISO[i];
        calibv2_debayer->param.array.sharp_strength[i] = calibv1_dm->sharp_strength[i];
        calibv2_debayer->param.array.debayer_hf_offset[i] = calibv1_dm->debayer_hf_offset[i];
 
    }
    calibv2_debayer->param.debayer_gain_offset = calibv1_dm->debayer_gain_offset;
    for (int i = 0; i < 9; i++) {
        calibv2_debayer->param.array.ISO[i] = calibv1_dm->ISO[i];
        calibv2_debayer->param.array.sharp_strength[i] = calibv1_dm->sharp_strength[i];
        calibv2_debayer->param.array.debayer_hf_offset[i] = calibv1_dm->debayer_hf_offset[i];
    }
    calibv2_debayer->param.debayer_offset = calibv1_dm->debayer_offset;
    calibv2_debayer->param.debayer_clip_en = !!calibv1_dm->debayer_clip_en;
    calibv2_debayer->param.debayer_filter_g_en = !!calibv1_dm->debayer_filter_g_en;
    calibv2_debayer->param.debayer_filter_c_en = !!calibv1_dm->debayer_filter_c_en;
    calibv2_debayer->param.debayer_thed0 = calibv1_dm->debayer_thed0;
    calibv2_debayer->param.debayer_thed1 = calibv1_dm->debayer_thed1;
    calibv2_debayer->param.debayer_dist_scale = calibv1_dm->debayer_dist_scale;
    calibv2_debayer->param.debayer_cnr_strength = calibv1_dm->debayer_cnr_strength;
    calibv2_debayer->param.debayer_shift_num = calibv1_dm->debayer_shift_num;
}
 
void CalibConverterCproc::convert(CamCalibDbV2Context_t* calibv2,
                                  CamCalibDbContext_t* calibv1) {
    CalibDb_cProc_t* calibv1_cProc =
        (CalibDb_cProc_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, cProc);
    if (!calibv1_cProc)
        return;
 
    CalibDbV2_Cproc_t* calibv2_cproc =
        (CalibDbV2_Cproc_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, cproc));
    if (!calibv2_cproc)
        return;
 
    calibv2_cproc->param.enable = !!calibv1_cProc->enable;
    calibv2_cproc->param.brightness = calibv1_cProc->brightness;
    calibv2_cproc->param.contrast = calibv1_cProc->contrast;
    calibv2_cproc->param.saturation = calibv1_cProc->saturation;
    calibv2_cproc->param.hue = calibv1_cProc->hue;
}
 
void CalibConverterIE::convert(CamCalibDbV2Context_t* calibv2,
                               CamCalibDbContext_t* calibv1) {
    CalibDb_IE_t* calibv1_ie =
        (CalibDb_IE_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, ie);
    if (!calibv1_ie)
        return;
 
    CalibDbV2_IE_t* calibv2_ie =
        (CalibDbV2_IE_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, ie));
    if (!calibv2_ie)
        return;
 
    calibv2_ie->param.enable = !!calibv1_ie->enable;
    calibv2_ie->param.mode = calibv1_ie->mode;
}
 
void CalibConverterCCM::convert(CamCalibDbV2Context_t *calibv2,
                                CamCalibDbContext_t *calibv1) {
 
    convertCCMCalib2CalibV2(calibv1, calibv2);
}
 
void CalibConverterLUT3D::convert(CamCalibDbV2Context_t *calibv2,
                                  CamCalibDbContext_t *calibv1) {
    convertLut3DCalib2CalibV2(calibv1, calibv2);
}
 
void CalibConverterAdrc::convert(CamCalibDbV2Context_t *calibv2,
                                 CamCalibDbContext_t *calibv1) {
 
    convertAdrcCalibV1ToCalibV2(calibv1, calibv2);
}
 
/*
 
   void CalibConverterAF::convert(CamCalibDbV2Context_t* calibv2,
   CamCalibDbContext_t* calibv1)
   {
 
   }
 
   void CalibConverterASD::convert(CamCalibDbV2Context_t* calibv2,
   CamCalibDbContext_t* calibv1)
   {
 
   }
 
   .
   .
   .
 
*/
 
int IQConverter::addToScene(CamCalibDbProj_t *calibpj, const char *main_scene,
                            const char *sub_scene,
                            CamCalibDbV2Context_t *calibv2) {
    auto sub_vector = new CamCalibSubSceneList_t();
    auto main_vector = new CamCalibMainSceneList_t();
 
    sub_vector[0].name = strdup(sub_scene);
    memcpy(calibdbv2_get_scene_ptr(&sub_vector[0]),
           calibv2->calib_scene, calibdbV2_scene_ctx_size(calibv2));
 
    main_vector[0].name = strdup(main_scene);
    main_vector[0].sub_scene = sub_vector;
    main_vector[0].sub_scene_len = 1;
 
    calibpj->main_scene = main_vector;
    calibpj->main_scene_len = 1;
 
    return 0;
}
 
void CalibConverterALSC::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDb_Lsc_t* calibv1_lsc =
        (CalibDb_Lsc_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, lsc);
    if (!calibv1_lsc)
        return;
 
    CalibDbV2_LSC_t* calibv2_lsc_v2 =
        (CalibDbV2_LSC_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, lsc_v2));
    if (!calibv2_lsc_v2)
        return;
 
    CalibDb_LscTableProfile_t* tableV1;
    CalibDbV2_LscTableProfile_t* tableV2;
 
    CalibDbV2_LSC_t& lsc_v2 = *calibv2_lsc_v2;
    CalibDbV2_Lsc_Common_t& common = lsc_v2.common;
 
    common.enable = calibv1_lsc->enable;
    common.resolutionAll_len = calibv1_lsc->aLscCof.lscResNum;
    common.resolutionAll = (CalibDbV2_Lsc_Resolution_t*)
                           malloc(common.resolutionAll_len * sizeof(CalibDbV2_Lsc_Resolution_t));
    memset(common.resolutionAll, '\0', common.resolutionAll_len * sizeof(CalibDbV2_Lsc_Resolution_t));
    for (int i = 0; i < common.resolutionAll_len; i++) {
        strcpy(common.resolutionAll[i].name, calibv1_lsc->aLscCof.lscResName[i]);
    }
 
    lsc_v2.alscCoef.damp_enable = calibv1_lsc->damp_enable;
 
    int illuNumTotal = 0;
    CalibDb_AlscCof_t& pAlscCof = calibv1_lsc->aLscCof;
    for (int i = 0; i < USED_FOR_CASE_MAX; i++) {
        illuNumTotal += pAlscCof.illuNum[i];
    }
    lsc_v2.alscCoef.illAll_len = illuNumTotal;
    lsc_v2.alscCoef.illAll = (CalibDbV2_AlscCof_ill_t*)
                             malloc(illuNumTotal * sizeof(CalibDbV2_AlscCof_ill_t));
    CalibDbV2_AlscCof_ill_t* ill_v2 = lsc_v2.alscCoef.illAll;
 
    for (int ucase = 0; ucase < USED_FOR_CASE_MAX; ucase++) {
        int illuNum = pAlscCof.illuNum[ucase];
        for (int i = 0; i < illuNum; i++) {
            ill_v2->usedForCase = ucase;
            CalibDb_AlscCof_ill_t& ill_v1 = pAlscCof.illAll[ucase][i];
            strcpy(ill_v2->name, ill_v1.illuName);
            ill_v2->wbGain[0] = ill_v1.awbGain[0];
            ill_v2->wbGain[1] = ill_v1.awbGain[1];
            ill_v2->tableUsed_len = ill_v1.tableUsedNO;
            ill_v2->tableUsed = (lsc_name_t*)malloc(ill_v2->tableUsed_len * sizeof(lsc_name_t));
            for (int t = 0; t < ill_v2->tableUsed_len; t++) {
                strcpy(ill_v2->tableUsed[t].name, ill_v1.tableUsed[t]);
            }
            ill_v2->gains_len = ill_v1.vignettingCurve.arraySize;
            ill_v2->vig_len = ill_v1.vignettingCurve.arraySize;
            ill_v2->gains = (float*)malloc(ill_v2->gains_len * sizeof(float));
            ill_v2->vig   = (float*)malloc(ill_v2->vig_len * sizeof(float));
            for (int gains_id = 0; gains_id < ill_v2->gains_len; gains_id++) {
                ill_v2->gains[gains_id] = ill_v1.vignettingCurve.pSensorGain[gains_id];
            }
            for (int vig_id = 0; vig_id < ill_v2->vig_len; vig_id++) {
                ill_v2->vig[vig_id] = ill_v1.vignettingCurve.pVignetting[vig_id];
            }
 
            ill_v2++;
        }
    }
 
    lsc_v2.tbl.tableAll_len = calibv1_lsc->tableAllNum;
    lsc_v2.tbl.tableAll = (CalibDbV2_LscTableProfile_t*)
                          malloc(lsc_v2.tbl.tableAll_len * sizeof(CalibDbV2_LscTableProfile_t));
 
    for (int i = 0; i < lsc_v2.tbl.tableAll_len; i++) {
        tableV1 = calibv1_lsc->tableAll + i;
        tableV2 = lsc_v2.tbl.tableAll + i;
 
        memset(tableV2->name, '\0', sizeof(tableV2->name));
        strcpy(tableV2->name, tableV1->name);
        strcpy(tableV2->resolution, tableV1->resolution);
        strcpy(tableV2->illumination, tableV1->illumination);
        tableV2->vignetting = tableV1->vignetting;
 
        for (int j = 0; j < lsc_v2.common.resolutionAll_len; j++) {
            int ret = strcmp(lsc_v2.common.resolutionAll[j].name, tableV2->resolution);
            if(0 == ret) {
                memcpy(lsc_v2.common.resolutionAll[j].lsc_sect_size_x, tableV1->LscXSizeTbl, sizeof(tableV1->LscXSizeTbl));
                memcpy(lsc_v2.common.resolutionAll[j].lsc_sect_size_y, tableV1->LscYSizeTbl, sizeof(tableV1->LscYSizeTbl));
            }
        }
 
        memcpy(&tableV2->lsc_samples_red,    &tableV1->LscMatrix[CAM_4CH_COLOR_COMPONENT_RED],    sizeof(Cam17x17UShortMatrix_t));
        memcpy(&tableV2->lsc_samples_greenR, &tableV1->LscMatrix[CAM_4CH_COLOR_COMPONENT_GREENR], sizeof(Cam17x17UShortMatrix_t));
        memcpy(&tableV2->lsc_samples_greenB, &tableV1->LscMatrix[CAM_4CH_COLOR_COMPONENT_GREENB], sizeof(Cam17x17UShortMatrix_t));
        memcpy(&tableV2->lsc_samples_blue,   &tableV1->LscMatrix[CAM_4CH_COLOR_COMPONENT_BLUE],   sizeof(Cam17x17UShortMatrix_t));
    }
}
 
void CalibConverterAfec::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDb_FEC_t* calibv1_fec =
        (CalibDb_FEC_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, afec);
    if (!calibv1_fec)
        return;
 
    CalibDbV2_FEC_t* calibv2_fec_db =
        (CalibDbV2_FEC_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, afec));
    if (!calibv2_fec_db)
        return;
    CalibDbV2_Fec_Param_t* calibv2_fec = &calibv2_fec_db->param;
 
    memcpy(calibv2_fec, calibv1_fec, sizeof(*calibv1_fec));
}
 
void CalibConverterAldch::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDb_LDCH_t* calibv1_ldch =
        (CalibDb_LDCH_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, aldch);
    if (!calibv1_ldch)
        return;
 
    CalibDbV2_LDCH_t* calibv2_ldch_db =
        (CalibDbV2_LDCH_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, aldch));
    if (!calibv2_ldch_db)
        return;
    CalibDbV2_Ldch_Param_t* calibv2_ldch = &calibv2_ldch_db->param;
 
    calibv2_ldch->ldch_en           = calibv1_ldch->ldch_en;
    calibv2_ldch->correct_level     = calibv1_ldch->correct_level;
    calibv2_ldch->correct_level_max = calibv1_ldch->correct_level_max;
    memcpy(calibv2_ldch->meshfile, calibv1_ldch->meshfile, strlen(calibv1_ldch->meshfile));
    memcpy(calibv2_ldch->light_center, calibv1_ldch->light_center, sizeof(double) * 2);
    memcpy(calibv2_ldch->coefficient, calibv1_ldch->coefficient, sizeof(double) * 4);
}
 
void CalibConverterColorAsGrey::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDb_ColorAsGrey_t* calibv1_colorAsGrey =
        (CalibDb_ColorAsGrey_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, colorAsGrey);
    if (!calibv1_colorAsGrey)
        return;
 
    CalibDbV2_ColorAsGrey_t* calibv2_colorAsGrey =
        (CalibDbV2_ColorAsGrey_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, colorAsGrey));
    if (!calibv2_colorAsGrey)
        return;
 
    memcpy(calibv2_colorAsGrey, calibv1_colorAsGrey, sizeof(*calibv1_colorAsGrey));
}
 
void CalibConverterLumaDetect::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDb_LUMA_DETECT_t* calibv1_lumaDetect =
        (CalibDb_LUMA_DETECT_t*)CALIBDB_GET_MODULE_PTR((void*)calibv1, lumaDetect);
    if (!calibv1_lumaDetect)
        return;
 
    CalibDbV2_LUMA_DETECT_t* calibv2_lumaDetect =
        (CalibDbV2_LUMA_DETECT_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, lumaDetect));
    if (!calibv2_lumaDetect)
        return;
 
    memcpy(calibv2_lumaDetect, calibv1_lumaDetect, sizeof(*calibv1_lumaDetect));
}
 
void CalibConverterAf::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    convertAfCalibV1ToCalibV2(calibv1, calibv2);
}
 
void CalibConverterThumbnails::convert(
    CamCalibDbV2Context_t *calibv2, CamCalibDbContext_t *calibv1)
{
    CalibDbV2_Thumbnails_t* calibv2_thumbnails_db =
        (CalibDbV2_Thumbnails_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, thumbnails));
    if (!calibv2_thumbnails_db)
        return;
 
    CalibDbV2_Thumbnails_Param_t* calibv2_thumbnails = &calibv2_thumbnails_db->param;
    calibv2_thumbnails->thumbnail_configs_len = 3;
 
    calibv2_thumbnails->thumbnail_configs = reinterpret_cast<rkaiq_thumbnails_config_t*>(calloc(
            calibv2_thumbnails->thumbnail_configs_len, sizeof(*calibv2_thumbnails->thumbnail_configs)));
    if (NULL == calibv2_thumbnails->thumbnail_configs) {
        goto failure;
        return;
    }
 
    for (uint32_t i = 0; i < calibv2_thumbnails->thumbnail_configs_len; i++) {
        auto* config = &calibv2_thumbnails->thumbnail_configs[i];
        config->owner_cookies = i;
        config->stream_type = 0;
        config->format[0] = 'N';
        config->format[1] = 'V';
        config->format[2] = '1';
        config->format[3] = '2';
        config->width_intfactor = 1 << (i + 1);
        config->height_intfactor = 1 << (i + 1);
    }
 
    return;
 
failure:
    if (calibv2_thumbnails->thumbnail_configs != NULL) {
        free(calibv2_thumbnails->thumbnail_configs);
    }
 
}
 
 
void CalibConverterBAYERNRV2::convert(CamCalibDbV2Context_t *calibv2,
                                      CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V21()) {
        struct list_head* bayernrV2_list =
            (struct list_head*)CALIBDB_GET_MODULE_PTR((void*)calibv1, list_bayernr_v2);
        if (!bayernrV2_list)
            return;
 
        CalibDbV2_BayerNrV2_t* calibv2_bayernr_v2 =
            (CalibDbV2_BayerNrV2_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, bayernr_v2));
        if (!calibv2_bayernr_v2)
            return;
 
        // TODO:
        bayernrV2_calibdb_to_calibdbV2(bayernrV2_list, calibv2_bayernr_v2, 0);
    }
 
}
 
void CalibConverterCNRV1::convert(CamCalibDbV2Context_t *calibv2,
                                  CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V21()) {
        struct list_head* calibv1_cnr_list =
            (struct list_head*)CALIBDB_GET_MODULE_PTR((void*)calibv1, list_cnr_v1);
        if (!calibv1_cnr_list)
            return;
 
        CalibDbV2_CNR_t* calibv2_cnr_v1 =
            (CalibDbV2_CNR_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, cnr_v1));
        if (!calibv2_cnr_v1)
            return;
 
        // TODO:
        cnrV1_calibdb_to_calibdbV2(calibv1_cnr_list, calibv2_cnr_v1, 0);
    }
 
}
 
void CalibConverterYNRV2::convert(CamCalibDbV2Context_t *calibv2,
                                  CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V21()) {
        struct list_head* calibv1_ynr_list =
            (struct list_head*)CALIBDB_GET_MODULE_PTR((void*)calibv1, list_ynr_v2);
        if (!calibv1_ynr_list)
            return;
 
        CalibDbV2_YnrV2_t* calibv2_ynr_v2 =
            (CalibDbV2_YnrV2_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, ynr_v2));
        if (!calibv2_ynr_v2)
            return;
 
        // TODO:
        ynrV2_calibdb_to_calibdbV2(calibv1_ynr_list, calibv2_ynr_v2, 0);
    }
 
}
 
void CalibConverterSHARPV3::convert(CamCalibDbV2Context_t *calibv2,
                                    CamCalibDbContext_t *calibv1) {
    if (CHECK_ISP_HW_V21()) {
        struct list_head* calibv1_sharp_list =
            (struct list_head*)CALIBDB_GET_MODULE_PTR((void*)calibv1, list_sharp_v3);
        if (!calibv1_sharp_list)
            return;
 
        CalibDbV2_SharpV3_t* calibv2_sharp_v2 =
            (CalibDbV2_SharpV3_t*)(CALIBDBV2_GET_MODULE_PTR(calibv2, sharp_v3));
        if (!calibv2_sharp_v2)
            return;
 
        // TODO:
        sharpV3_calibdb_to_calibdbV2(calibv1_sharp_list, calibv2_sharp_v2, 0);
    }
}
 
} // namespace RkCam