xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/iq_parser_v2/bayernr_xml2json_v2.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "bayernr_xml2json_v2.h"
2 #include "RkAiqCalibApi.h"
3 
4 
5 #define BAYERNRV2_SETTING_NUM (2)
6 #define BAYERNRV2_ISO_NUM   (13)
7 
bayernrV2_calibdb_to_calibdbV2(struct list_head * pBayernrList,CalibDbV2_BayerNrV2_t * pCalibdbV2,int mode_idx)8 int bayernrV2_calibdb_to_calibdbV2(struct list_head *pBayernrList,  CalibDbV2_BayerNrV2_t *pCalibdbV2, int mode_idx)
9 {
10     CalibDbV2_BayerNrV2_Calib_t *pCalibParaV2 = NULL;
11     CalibDbV2_BayerNrV2_2d_t *p2dV2 = NULL;
12     CalibDbV2_BayerNrV2_3d_t *p3dV2 = NULL;
13     CalibDbV2_BayerNrV2_C_ISO_t *pCalibISOV2 = NULL;
14     CalibDbV2_BayerNrV2_2d_ISO_t *p2dISOV2 = NULL;
15     CalibDbV2_BayerNrV2_3d_ISO_t *p3dISOV2 = NULL;
16 
17 
18     if(pBayernrList == NULL || pCalibdbV2 == NULL) {
19         printf(" pCalibdb is NULL pointer\n");
20         return -1;
21     }
22 
23     CalibDb_Bayernr_V2_t* pBayenrProfile = NULL;
24     CamCalibdbGetBayernrV2ProfileByIdx(pBayernrList, mode_idx, &pBayenrProfile);
25     if(pBayenrProfile == NULL) {
26         printf(" %s:%d bayernr can't get mode:%d para from calibdbv1\n",
27                __FUNCTION__,
28                __LINE__,
29                mode_idx);
30         return -1;
31     }
32 
33     pCalibParaV2 = &pCalibdbV2->CalibPara;
34     p2dV2 = &pCalibdbV2->Bayernr2D;
35     p3dV2 = &pCalibdbV2->Bayernr3D;
36 
37     //malloc settting size
38     pCalibParaV2->Setting = (CalibDbV2_BayerNrV2_C_Set_t *)malloc(BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_C_Set_t));
39     memset(pCalibParaV2->Setting,  0x00, BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_C_Set_t));
40     pCalibParaV2->Setting_len = BAYERNRV2_SETTING_NUM;
41     p2dV2->Setting = (CalibDbV2_BayerNrV2_2d_Set_t *)malloc(BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_2d_Set_t));
42     memset(p2dV2->Setting, 0x00, BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_2d_Set_t));
43     p2dV2->Setting_len = BAYERNRV2_SETTING_NUM;
44     p3dV2->Setting = (CalibDbV2_BayerNrV2_3d_Set_t *)malloc(BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_3d_Set_t));
45     memset(p3dV2->Setting, 0x00, BAYERNRV2_SETTING_NUM * sizeof(CalibDbV2_BayerNrV2_3d_Set_t));
46     p3dV2->Setting_len = BAYERNRV2_SETTING_NUM;
47 
48     //malloc iso size
49     for(int i = 0; i < BAYERNRV2_SETTING_NUM; i++) {
50         pCalibParaV2->Setting[i].Calib_ISO =  (CalibDbV2_BayerNrV2_CalibPara_Setting_ISO_t *)malloc(BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_CalibPara_Setting_ISO_t));
51         memset(pCalibParaV2->Setting[i].Calib_ISO, 0x00, BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_CalibPara_Setting_ISO_t));
52         pCalibParaV2->Setting[i].Calib_ISO_len = BAYERNRV2_ISO_NUM;
53 
54         p2dV2->Setting[i].Tuning_ISO = (CalibDbV2_BayerNrV2_Bayernr2d_Setting_ISO_t *)malloc(BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_Bayernr2d_Setting_ISO_t));
55         memset(p2dV2->Setting[i].Tuning_ISO, 0x00, BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_Bayernr2d_Setting_ISO_t));
56         p2dV2->Setting[i].Tuning_ISO_len = BAYERNRV2_ISO_NUM;
57 
58         p3dV2->Setting[i].Tuning_ISO = (CalibDbV2_BayerNrV2_Bayernr3d_Setting_ISO_t *)malloc(BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_Bayernr3d_Setting_ISO_t));
59         memset(p3dV2->Setting[i].Tuning_ISO, 0x00, BAYERNRV2_ISO_NUM * sizeof(CalibDbV2_BayerNrV2_Bayernr3d_Setting_ISO_t));
60         p3dV2->Setting[i].Tuning_ISO_len = BAYERNRV2_ISO_NUM;
61     }
62 
63     //assign the value
64     p2dV2->enable = pBayenrProfile->st2DParams.bayernrv2_2dnr_enable;
65     p3dV2->enable = pBayenrProfile->st3DParams.bayernrv2_tnr_enable;
66 
67     for(int i = 0; i < BAYERNRV2_SETTING_NUM; i++) {
68         Calibdb_Bayernr_2Dparams_V2_t *p2dParamCalibV1 = NULL;
69         CamCalibdbGetBayernrV2Setting2DByIdx(&pBayenrProfile->st2DParams.listHead, i, &p2dParamCalibV1);
70         CalibDb_Bayernr_3DParams_V2_t *p3dParamCalibV1 = NULL;
71         CamCalibdbGetBayernrV2Setting3DByIdx(&pBayenrProfile->st3DParams.listHead, i, &p3dParamCalibV1);
72 
73         if(p2dParamCalibV1 == NULL || p3dParamCalibV1 == NULL) {
74             printf("bayernr can't get setting:%d from xml calibdb! \n", i);
75             break;
76         }
77 
78         pCalibParaV2->Setting[i].SNR_Mode = strdup(p2dParamCalibV1->snr_mode);
79         pCalibParaV2->Setting[i].Sensor_Mode = strdup(p2dParamCalibV1->sensor_mode);
80         p2dV2->Setting[i].SNR_Mode = strdup(p2dParamCalibV1->snr_mode);
81         p2dV2->Setting[i].Sensor_Mode = strdup(p2dParamCalibV1->sensor_mode);
82         p3dV2->Setting[i].SNR_Mode = strdup(p3dParamCalibV1->snr_mode);
83         p3dV2->Setting[i].Sensor_Mode = strdup(p3dParamCalibV1->sensor_mode);
84 
85         for(int j = 0; j < BAYERNRV2_ISO_NUM; j++) {
86             pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
87             p2dISOV2 = &p2dV2->Setting[i].Tuning_ISO[j];
88             p3dISOV2 = &p3dV2->Setting[i].Tuning_ISO[j];
89 
90             //calib
91             pCalibISOV2->iso = p2dParamCalibV1->iso[j];
92             for(int k = 0; k < 16; k++) {
93                 pCalibISOV2->lumapoint[k] = p2dParamCalibV1->bayernrv2_filter_lumapoint_r[k];
94                 pCalibISOV2->sigma[k] = p2dParamCalibV1->bayernrv2_filter_sigma_r[j][k];
95             }
96 
97             //2d
98             p2dISOV2->iso = p2dParamCalibV1->iso[j];
99             p2dISOV2->filter_strength = p2dParamCalibV1->bayernrv2_filter_strength_r[j];
100             p2dISOV2->gauss_guide = p2dParamCalibV1->bayernrv2_gauss_guide_r[j];
101             p2dISOV2->edgesofts = p2dParamCalibV1->bayernrv2_filter_edgesofts_r[j];
102             p2dISOV2->ratio = p2dParamCalibV1->bayernrv2_filter_soft_threshold_ratio_r[j];
103             p2dISOV2->weight = p2dParamCalibV1->bayernrv2_filter_out_wgt_r[j];
104 
105             //3d
106             p3dISOV2->iso = p3dParamCalibV1->iso[j];
107             p3dISOV2->filter_strength = p3dParamCalibV1->bayernrv2_tnr_filter_strength_r[j];
108             p3dISOV2->sp_filter_strength = p3dParamCalibV1->bayernrv2_tnr_sp_filter_strength_r[j];
109             p3dISOV2->lo_clipwgt = p3dParamCalibV1->bayernrv2_tnr_lo_clipwgt_r[j];
110             p3dISOV2->hi_clipwgt = p3dParamCalibV1->bayernrv2_tnr_hi_clipwgt_r[j];
111             p3dISOV2->softwgt = p3dParamCalibV1->bayernrv2_tnr_softwgt_r[j];
112 
113 
114         }
115     }
116 
117     return 0;
118 
119 }
120 
121 
122 
bayernrV2_calibdbV2_to_calibdb(CalibDbV2_BayerNrV2_t * pCalibdbV2,struct list_head * pBayernrList,int mode_idx)123 int bayernrV2_calibdbV2_to_calibdb(CalibDbV2_BayerNrV2_t *pCalibdbV2,  struct list_head *pBayernrList,  int mode_idx)
124 {
125     CalibDbV2_BayerNrV2_Calib_t *pCalibParaV2 = NULL;
126     CalibDbV2_BayerNrV2_2d_t *p2dV2 = NULL;
127     CalibDbV2_BayerNrV2_3d_t *p3dV2 = NULL;
128     CalibDbV2_BayerNrV2_C_ISO_t *pCalibISOV2 = NULL;
129     CalibDbV2_BayerNrV2_2d_ISO_t *p2dISOV2 = NULL;
130     CalibDbV2_BayerNrV2_3d_ISO_t *p3dISOV2 = NULL;
131 
132     CalibDb_Bayernr_V2_t* pBayenrProfile = NULL;
133     Calibdb_Bayernr_2Dparams_V2_t *p2dParamCalibV1 = NULL;
134     CalibDb_Bayernr_3DParams_V2_t *p3dParamCalibV1 = NULL;
135 
136 
137     if(pBayernrList == NULL || pCalibdbV2 == NULL) {
138         printf(" pCalibdb is NULL pointer\n");
139         return -1;
140     }
141 
142     CamCalibdbGetBayernrV2ProfileByIdx(pBayernrList, mode_idx, &pBayenrProfile);
143     if(pBayenrProfile == NULL) {
144         printf(" bayernr can't get mode:%d para from calibdbv1\n", mode_idx);
145         return -1;
146     }
147 
148     pCalibParaV2 = &pCalibdbV2->CalibPara;
149     p2dV2 = &pCalibdbV2->Bayernr2D;
150     p3dV2 = &pCalibdbV2->Bayernr3D;
151 
152 
153     //2d assign the value
154     for(int i = 0; i < p2dV2->Setting_len; i++) {
155         p2dParamCalibV1 = NULL;
156         CamCalibdbGetBayernrV2Setting2DByIdx(&pBayenrProfile->st2DParams.listHead, i, &p2dParamCalibV1);
157 
158         if(p2dParamCalibV1 == NULL) {
159             printf("bayernr can't get setting:%d from xml calibdb! \n", i);
160             break;
161         }
162 
163         strcpy(p2dParamCalibV1->snr_mode, p2dV2->Setting[i].SNR_Mode);
164         strcpy(p2dParamCalibV1->sensor_mode, p2dV2->Setting[i].Sensor_Mode);
165 
166         for(int j = 0; j < BAYERNRV2_ISO_NUM && i < p3dV2->Setting[i].Tuning_ISO_len; j++) {
167             pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
168             p2dISOV2 = &p2dV2->Setting[i].Tuning_ISO[j];
169 
170             //calib
171             p2dParamCalibV1->iso[j] = pCalibISOV2->iso;
172             for(int k = 0; k < 16; k++) {
173                 p2dParamCalibV1->bayernrv2_filter_lumapoint_r[k] = pCalibISOV2->lumapoint[k];
174                 p2dParamCalibV1->bayernrv2_filter_sigma_r[j][k] = pCalibISOV2->sigma[k];
175             }
176 
177             //2d
178             p2dParamCalibV1->iso[j] = p2dISOV2->iso;
179             p2dParamCalibV1->bayernrv2_filter_strength_r[j] = p2dISOV2->filter_strength;
180             p2dParamCalibV1->bayernrv2_gauss_guide_r[j] = p2dISOV2->gauss_guide;
181             p2dParamCalibV1->bayernrv2_filter_edgesofts_r[j] = p2dISOV2->edgesofts;
182             p2dParamCalibV1->bayernrv2_filter_soft_threshold_ratio_r[j] = p2dISOV2->ratio;
183             p2dParamCalibV1->bayernrv2_filter_out_wgt_r[j] = p2dISOV2->weight;
184 
185         }
186     }
187 
188     //3d
189     for(int i = 0; i < p3dV2->Setting_len; i++) {
190         p3dParamCalibV1 = NULL;
191         CamCalibdbGetBayernrV2Setting3DByIdx(&pBayenrProfile->st3DParams.listHead, i, &p3dParamCalibV1);
192 
193         if(p3dParamCalibV1 == NULL) {
194             printf("bayernr can't get setting:%d from xml calibdb! \n", i);
195             break;
196         }
197 
198         strcpy(p3dParamCalibV1->snr_mode, p3dV2->Setting[i].SNR_Mode);
199         strcpy(p3dParamCalibV1->sensor_mode, p3dV2->Setting[i].Sensor_Mode);
200 
201         for(int j = 0; j < BAYERNRV2_ISO_NUM && i < p3dV2->Setting[i].Tuning_ISO_len; j++) {
202             pCalibISOV2 = &pCalibParaV2->Setting[i].Calib_ISO[j];
203             p3dISOV2 = &p3dV2->Setting[i].Tuning_ISO[j];
204 
205             //calib
206             for(int k = 0; k < 16; k++) {
207                 p3dParamCalibV1->bayernrv2_lumapoint_r[k] = pCalibISOV2->lumapoint[k];
208                 p3dParamCalibV1->bayernrv2_sigma_r[j][k] = pCalibISOV2->sigma[k];
209             }
210 
211             //3d
212             p3dParamCalibV1->iso[j] = p3dISOV2->iso;
213             p3dParamCalibV1->bayernrv2_tnr_filter_strength_r[j] = p3dISOV2->filter_strength;
214             p3dParamCalibV1->bayernrv2_tnr_sp_filter_strength_r[j] = p3dISOV2->sp_filter_strength;
215             p3dParamCalibV1->bayernrv2_tnr_lo_clipwgt_r[j] = p3dISOV2->lo_clipwgt;
216             p3dParamCalibV1->bayernrv2_tnr_hi_clipwgt_r[j] = p3dISOV2->hi_clipwgt;
217             p3dParamCalibV1->bayernrv2_tnr_softwgt_r[j] = p3dISOV2->softwgt;
218 
219         }
220     }
221     return 0;
222 
223 }
224 
225 
bayernrV2_calibdbV2_free(CalibDbV2_BayerNrV2_t * pCalibdbV2)226 void bayernrV2_calibdbV2_free(CalibDbV2_BayerNrV2_t *pCalibdbV2)
227 {
228     if(pCalibdbV2 != NULL) {
229         if(pCalibdbV2->CalibPara.Setting != NULL) {
230             for(int i = 0; i < pCalibdbV2->CalibPara.Setting_len; i++) {
231                 if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO != NULL) {
232                     free(pCalibdbV2->CalibPara.Setting[i].Calib_ISO );
233                 }
234                 if(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode != NULL) {
235                     free(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode);
236                 }
237                 if(pCalibdbV2->CalibPara.Setting[i].SNR_Mode != NULL) {
238                     free(pCalibdbV2->CalibPara.Setting[i].SNR_Mode);
239                 }
240             }
241             free(pCalibdbV2->CalibPara.Setting);
242         }
243 
244         if(pCalibdbV2->Bayernr2D.Setting != NULL) {
245             for(int i = 0; i < pCalibdbV2->Bayernr2D.Setting_len; i++) {
246                 if(pCalibdbV2->Bayernr2D.Setting[i].Tuning_ISO != NULL) {
247                     free(pCalibdbV2->Bayernr2D.Setting[i].Tuning_ISO );
248                 }
249                 if(pCalibdbV2->Bayernr2D.Setting[i].Sensor_Mode != NULL) {
250                     free(pCalibdbV2->Bayernr2D.Setting[i].Sensor_Mode);
251                 }
252                 if(pCalibdbV2->Bayernr2D.Setting[i].SNR_Mode != NULL) {
253                     free(pCalibdbV2->Bayernr2D.Setting[i].SNR_Mode);
254                 }
255             }
256             free(pCalibdbV2->Bayernr2D.Setting);
257         }
258 
259         if(pCalibdbV2->Bayernr3D.Setting != NULL) {
260             for(int i = 0; i < pCalibdbV2->Bayernr3D.Setting_len; i++) {
261                 if(pCalibdbV2->Bayernr3D.Setting[i].Tuning_ISO != NULL) {
262                     free(pCalibdbV2->Bayernr3D.Setting[i].Tuning_ISO );
263                 }
264                 if(pCalibdbV2->Bayernr3D.Setting[i].Sensor_Mode != NULL) {
265                     free(pCalibdbV2->Bayernr3D.Setting[i].Sensor_Mode);
266                 }
267                 if(pCalibdbV2->Bayernr3D.Setting[i].SNR_Mode != NULL) {
268                     free(pCalibdbV2->Bayernr3D.Setting[i].SNR_Mode);
269                 }
270             }
271             free(pCalibdbV2->Bayernr3D.Setting);
272         }
273 
274         free(pCalibdbV2);
275     }
276 
277 }
278 
279