xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/iq_parser_v2/ynr_xml2json_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "ynr_xml2json_v1.h"
2 
3 #define YNRV1_SETTING_NUM (2)
4 #define YNRV1_ISO_NUM   (13)
5 
ynrV1_calibdb_to_calibdbV2(const CalibDb_YNR_2_t * pCalibdb,CalibDbV2_YnrV1_t * pCalibdbV2,int mode_idx)6 int ynrV1_calibdb_to_calibdbV2(const CalibDb_YNR_2_t *pCalibdb,  CalibDbV2_YnrV1_t *pCalibdbV2, int mode_idx)
7 {
8 
9     CalibDbV2_YnrV1_Calib_t *pCalibParaV2 = NULL;
10     CalibDbV2_YnrV1_Tuning_t *pTuningParaV2 = NULL;
11     CalibDbV2_YnrV1_C_ISO_t *pCalibISOV2 = NULL;
12     CalibDbV2_YnrV1_T_ISO_t *pTuningISOV2 = NULL;
13     CalibDb_YNR_Setting_t *pSetting = NULL;
14     struct CalibDb_YNR_ISO_s *pISO = NULL;
15 
16     if(pCalibdb == NULL) {
17         printf(" pCalibdb is NULL pointer\n");
18         return -1;
19     }
20 
21     if(pCalibdbV2 == NULL) {
22         printf(" pCalibdbV2 is NULL pointer\n");
23         return -1;
24     }
25 
26     if(pCalibdb->mode_num < mode_idx) {
27         printf(" old xml file have no %d mode cell \n", mode_idx);
28         return -1;
29     }
30 
31     pCalibParaV2 = &pCalibdbV2->CalibPara;
32     pTuningParaV2 = &pCalibdbV2->TuningPara;
33 
34     //malloc settting size
35     pCalibParaV2->Setting = (CalibDbV2_YnrV1_Calib_Set_t *)malloc(YNRV1_SETTING_NUM * sizeof(CalibDbV2_YnrV1_Calib_Set_t));
36     memset(pCalibParaV2->Setting,  0x00, YNRV1_SETTING_NUM * sizeof(CalibDbV2_YnrV1_Calib_Set_t));
37     pCalibParaV2->Setting_len = YNRV1_SETTING_NUM;
38     pTuningParaV2->Setting = (CalibDbV2_YnrV1_T_Set_t *)malloc(YNRV1_SETTING_NUM * sizeof(CalibDbV2_YnrV1_T_Set_t));
39     memset(pTuningParaV2->Setting, 0x00, YNRV1_SETTING_NUM * sizeof(CalibDbV2_YnrV1_T_Set_t));
40     pTuningParaV2->Setting_len = YNRV1_SETTING_NUM;
41 
42     //malloc iso size
43     for(int i = 0; i < YNRV1_SETTING_NUM; i++) {
44         pCalibParaV2->Setting[i].Calib_ISO =  (CalibDbV2_YnrV1_C_ISO_t *)malloc(YNRV1_ISO_NUM * sizeof(CalibDbV2_YnrV1_C_ISO_t));
45         memset(pCalibParaV2->Setting[i].Calib_ISO, 0x00, YNRV1_ISO_NUM * sizeof(CalibDbV2_YnrV1_C_ISO_t));
46         pCalibParaV2->Setting[i].Calib_ISO_len = YNRV1_ISO_NUM;
47         pTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_YnrV1_T_ISO_t *)malloc(YNRV1_ISO_NUM * sizeof(CalibDbV2_YnrV1_T_ISO_t));
48         memset(pTuningParaV2->Setting[i].Tuning_ISO, 0x00, YNRV1_ISO_NUM * sizeof(CalibDbV2_YnrV1_T_ISO_t));
49         pTuningParaV2->Setting[i].Tuning_ISO_len = YNRV1_ISO_NUM;
50     }
51 
52     //assign the value
53     pCalibdbV2->Version = strdup(pCalibdb->version);
54     pTuningParaV2->enable = pCalibdb->enable;
55 
56     for(int i = 0; i < YNRV1_SETTING_NUM; i++) {
57         pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
58 
59         pCalibParaV2->Setting[i].SNR_Mode = strdup(pSetting->snr_mode);
60         pCalibParaV2->Setting[i].Sensor_Mode = strdup(pSetting->sensor_mode);
61         pTuningParaV2->Setting[i].SNR_Mode = strdup(pSetting->snr_mode);
62         pTuningParaV2->Setting[i].Sensor_Mode = strdup(pSetting->sensor_mode);
63 
64         for(int j = 0; j < YNRV1_ISO_NUM; j++) {
65             pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
66             pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
67             pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j];
68             pISO = &pSetting->ynr_iso[j];
69 
70             //calib para
71             pCalibISOV2->iso = pISO->iso;
72             for(int k = 0; k < 5; k++) {
73                 pCalibISOV2->sigma_curve[k] = pISO->sigma_curve[k];
74             }
75             for(int k = 0; k < 4; k++) {
76                 pCalibISOV2->ynr_lci[k] = pISO->ynr_lci[k];
77                 pCalibISOV2->ynr_lhci[k] = pISO->ynr_lhci[k];
78                 pCalibISOV2->ynr_hlci[k] = pISO->ynr_hlci[k];
79                 pCalibISOV2->ynr_hhci[k] = pISO->ynr_hhci[k];
80             }
81 
82             //tuning para
83             pTuningISOV2->iso = pISO->iso;
84             pTuningISOV2->lo_bfScale_1 = pISO->lo_bfScale[0];
85             pTuningISOV2->lo_bfScale_2 = pISO->lo_bfScale[1];
86             pTuningISOV2->lo_bfScale_3 = pISO->lo_bfScale[2];
87             pTuningISOV2->lo_bfScale_4 = pISO->lo_bfScale[3];
88 
89             pTuningISOV2->denoise_weight_1 = pISO->denoise_weight[0];
90             pTuningISOV2->denoise_weight_2 = pISO->denoise_weight[1];
91             pTuningISOV2->denoise_weight_3 = pISO->denoise_weight[2];
92             pTuningISOV2->denoise_weight_4 = pISO->denoise_weight[3];
93 
94             pTuningISOV2->imerge_ratio = pISO->imerge_ratio;
95             pTuningISOV2->imerge_bound = pISO->imerge_bound;
96             pTuningISOV2->lo_directionStrength = pISO->lo_directionStrength;
97 
98             pTuningISOV2->hi_bfScale_1 = pISO->hi_bfScale[0];
99             pTuningISOV2->hi_bfScale_2 = pISO->hi_bfScale[1];
100             pTuningISOV2->hi_bfScale_3 = pISO->hi_bfScale[2];
101             pTuningISOV2->hi_bfScale_4 = pISO->hi_bfScale[3];
102 
103             pTuningISOV2->hi_denoiseWeight_1 = pISO->hi_denoiseWeight[0];
104             pTuningISOV2->hi_denoiseWeight_2 = pISO->hi_denoiseWeight[1];
105             pTuningISOV2->hi_denoiseWeight_3 = pISO->hi_denoiseWeight[2];
106             pTuningISOV2->hi_denoiseWeight_4 = pISO->hi_denoiseWeight[3];
107 
108             pTuningISOV2->hi_soft_thresh_scale_1 = pISO->hi_soft_thresh_scale[0];
109             pTuningISOV2->hi_soft_thresh_scale_2 = pISO->hi_soft_thresh_scale[1];
110             pTuningISOV2->hi_soft_thresh_scale_3 = pISO->hi_soft_thresh_scale[2];
111             pTuningISOV2->hi_soft_thresh_scale_4 = pISO->hi_soft_thresh_scale[3];
112 
113             pTuningISOV2->hi_denoiseStrength = pISO->hi_denoiseStrength;
114             pTuningISOV2->hi_detailMinAdjDnW = pISO->hi_detailMinAdjDnW;
115 
116             for(int k = 0; k < 4; k++) {
117                 pTuningISOV2->hwith_d[k] = pISO->hwith_d[k];
118             }
119 
120             //luma para
121             for(int k = 0; k < 6; k++) {
122                 pTuningISOV2->luma_para.lo_lumaPoint[k] = pISO->lo_lumaPoint[k];
123                 pTuningISOV2->luma_para.lo_lumaRatio[k] = pISO->lo_lumaRatio[k];
124                 pTuningISOV2->luma_para.hi_lumaPoint[k] = pISO->hi_lumaPoint[k];
125                 pTuningISOV2->luma_para.hi_lumaRatio[k] = pISO->hi_lumaRatio[k];
126             }
127 
128             //hgrad para
129             for(int k = 0; k < 6; k++) {
130                 pTuningISOV2->hgrad_para.y_luma_point[k] = pISO->y_luma_point[k];
131                 pTuningISOV2->hgrad_para.hgrad_y_level1[k] = pISO->hgrad_y_level1[k];
132                 pTuningISOV2->hgrad_para.hgrad_y_level2[k] = pISO->hgrad_y_level2[k];
133                 pTuningISOV2->hgrad_para.hgrad_y_level3[k] = pISO->hgrad_y_level3[k];
134                 pTuningISOV2->hgrad_para.hgrad_y_level4[k] = pISO->hgrad_y_level4[k];
135             }
136 
137         }
138     }
139 
140     return 0;
141 }
142 
143 
ynrV1_calibdbV2_to_calibdb(CalibDbV2_YnrV1_t * pCalibdbV2,CalibDb_YNR_2_t * pCalibdb,int mode_idx)144 int ynrV1_calibdbV2_to_calibdb(CalibDbV2_YnrV1_t *pCalibdbV2, CalibDb_YNR_2_t *pCalibdb, int mode_idx)
145 {
146 
147     CalibDbV2_YnrV1_Calib_t *pCalibParaV2 = NULL;
148     CalibDbV2_YnrV1_Tuning_t *pTuningParaV2 = NULL;
149     CalibDbV2_YnrV1_C_ISO_t *pCalibISOV2 = NULL;
150     CalibDbV2_YnrV1_T_ISO_t *pTuningISOV2 = NULL;
151     CalibDb_YNR_Setting_t *pSetting = NULL;
152     struct CalibDb_YNR_ISO_s *pISO = NULL;
153 
154     if(pCalibdb == NULL) {
155         printf(" pCalibdb is NULL pointer\n");
156         return -1;
157     }
158 
159     if(pCalibdbV2 == NULL) {
160         printf(" pCalibdbV2 is NULL pointer\n");
161         return -1;
162     }
163 
164     if(pCalibdb->mode_num < mode_idx) {
165         printf(" old xml file have no %d mode cell \n", mode_idx);
166         return -1;
167     }
168 
169     pCalibParaV2 = &pCalibdbV2->CalibPara;
170     pTuningParaV2 = &pCalibdbV2->TuningPara;
171 
172 
173 
174     //assign the value
175     strcpy(pCalibdb->version, pCalibdbV2->Version);
176     pCalibdb->enable = pTuningParaV2->enable;
177 
178     for(int i = 0; i < pTuningParaV2->Setting_len; i++) {
179         pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
180 
181         strcpy(pSetting->snr_mode, pTuningParaV2->Setting[i].SNR_Mode);
182         strcpy(pSetting->sensor_mode, pTuningParaV2->Setting[i].Sensor_Mode);
183 
184         for(int j = 0; j < YNRV1_ISO_NUM; j++) {
185             pSetting = &pCalibdb->mode_cell[mode_idx].setting[i];
186             pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
187             pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j];
188             pISO = &pSetting->ynr_iso[j];
189 
190             //calib para
191             pISO->iso = pCalibISOV2->iso;
192             for(int k = 0; k < 5; k++) {
193                 pISO->sigma_curve[k] = pCalibISOV2->sigma_curve[k];
194             }
195             for(int k = 0; k < 4; k++) {
196                 pISO->ynr_lci[k] = pCalibISOV2->ynr_lci[k];
197                 pISO->ynr_lhci[k] = pCalibISOV2->ynr_lhci[k];
198                 pISO->ynr_hlci[k] = pCalibISOV2->ynr_hlci[k];
199                 pISO->ynr_hhci[k] = pCalibISOV2->ynr_hhci[k];
200             }
201 
202             //tuning para
203             pISO->iso = pTuningISOV2->iso;
204             pISO->lo_bfScale[0] = pTuningISOV2->lo_bfScale_1;
205             pISO->lo_bfScale[1] = pTuningISOV2->lo_bfScale_2;
206             pISO->lo_bfScale[2] = pTuningISOV2->lo_bfScale_3;
207             pISO->lo_bfScale[3] = pTuningISOV2->lo_bfScale_4;
208 
209             pISO->denoise_weight[0] = pTuningISOV2->denoise_weight_1;
210             pISO->denoise_weight[1] = pTuningISOV2->denoise_weight_2;
211             pISO->denoise_weight[2] = pTuningISOV2->denoise_weight_3;
212             pISO->denoise_weight[3] = pTuningISOV2->denoise_weight_4;
213 
214             pISO->imerge_ratio = pTuningISOV2->imerge_ratio;
215             pISO->imerge_bound = pTuningISOV2->imerge_bound;
216             pISO->lo_directionStrength = pTuningISOV2->lo_directionStrength;
217 
218             pISO->hi_bfScale[0] = pTuningISOV2->hi_bfScale_1;
219             pISO->hi_bfScale[1] = pTuningISOV2->hi_bfScale_2;
220             pISO->hi_bfScale[2] = pTuningISOV2->hi_bfScale_3;
221             pISO->hi_bfScale[3] = pTuningISOV2->hi_bfScale_4;
222 
223             pISO->hi_denoiseWeight[0] = pTuningISOV2->hi_denoiseWeight_1;
224             pISO->hi_denoiseWeight[1] = pTuningISOV2->hi_denoiseWeight_2;
225             pISO->hi_denoiseWeight[2] = pTuningISOV2->hi_denoiseWeight_3;
226             pISO->hi_denoiseWeight[3] = pTuningISOV2->hi_denoiseWeight_4;
227 
228             pISO->hi_soft_thresh_scale[0] = pTuningISOV2->hi_soft_thresh_scale_1;
229             pISO->hi_soft_thresh_scale[1] = pTuningISOV2->hi_soft_thresh_scale_2;
230             pISO->hi_soft_thresh_scale[2] = pTuningISOV2->hi_soft_thresh_scale_3;
231             pISO->hi_soft_thresh_scale[3] = pTuningISOV2->hi_soft_thresh_scale_4;
232 
233             pISO->hi_denoiseStrength = pTuningISOV2->hi_denoiseStrength;
234             pISO->hi_detailMinAdjDnW = pTuningISOV2->hi_detailMinAdjDnW;
235 
236             for(int k = 0; k < 4; k++) {
237                 pISO->hwith_d[k] = pTuningISOV2->hwith_d[k];
238             }
239 
240             //luma para
241             for(int k = 0; k < 6; k++) {
242                 pISO->lo_lumaPoint[k] = pTuningISOV2->luma_para.lo_lumaPoint[k];
243                 pISO->lo_lumaRatio[k] = pTuningISOV2->luma_para.lo_lumaRatio[k];
244                 pISO->hi_lumaPoint[k] = pTuningISOV2->luma_para.hi_lumaPoint[k];
245                 pISO->hi_lumaRatio[k] = pTuningISOV2->luma_para.hi_lumaRatio[k];
246             }
247 
248             //hgrad para
249             for(int k = 0; k < 6; k++) {
250                 pISO->y_luma_point[k] = pTuningISOV2->hgrad_para.y_luma_point[k];
251                 pISO->hgrad_y_level1[k] = pTuningISOV2->hgrad_para.hgrad_y_level1[k];
252                 pISO->hgrad_y_level2[k] = pTuningISOV2->hgrad_para.hgrad_y_level2[k];
253                 pISO->hgrad_y_level3[k] = pTuningISOV2->hgrad_para.hgrad_y_level3[k];
254                 pISO->hgrad_y_level4[k] = pTuningISOV2->hgrad_para.hgrad_y_level4[k];
255             }
256 
257         }
258     }
259 
260     return 0;
261 
262 }
263 
264 
ynrV1_calibdbV2_free(CalibDbV2_YnrV1_t * pCalibdbV2)265 void ynrV1_calibdbV2_free(CalibDbV2_YnrV1_t *pCalibdbV2)
266 {
267     if(pCalibdbV2) {
268         if(pCalibdbV2->Version) {
269             free(pCalibdbV2->Version);
270         }
271 
272         if(pCalibdbV2->CalibPara.Setting) {
273             for(int i = 0; i < pCalibdbV2->CalibPara.Setting_len; i++) {
274                 if(pCalibdbV2->CalibPara.Setting[i].SNR_Mode) {
275                     free(pCalibdbV2->CalibPara.Setting[i].SNR_Mode);
276                 }
277                 if(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode) {
278                     free(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode);
279                 }
280                 if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO) {
281                     free(pCalibdbV2->CalibPara.Setting[i].Calib_ISO);
282                 }
283             }
284 
285             free(pCalibdbV2->CalibPara.Setting);
286         }
287 
288         if(pCalibdbV2->TuningPara.Setting) {
289             for(int i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
290                 if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode) {
291                     free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode);
292                 }
293                 if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode) {
294                     free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode);
295                 }
296                 if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO) {
297                     free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO);
298                 }
299             }
300 
301             free(pCalibdbV2->TuningPara.Setting);
302         }
303 
304         free(pCalibdbV2);
305     }
306 }
307 
308