xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/iq_parser_v2/RkAiqCalibDbV2.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2021 Rockchip Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 #ifndef ___RK_AIQ_CALIB_DB_V2_H__
19 #define ___RK_AIQ_CALIB_DB_V2_H__
20 
21 #include <list>
22 #include <map>
23 #include <memory>
24 #include <mutex>
25 #include <string>
26 #include <unordered_map>
27 
28 #include "RkAiqCalibDbTypesV2.h"
29 #include "RkAiqCalibDbV2Helper.h"
30 #include "ablc_head.h"
31 #include "ablc_head_V32.h"
32 #include "rk_aiq_algo_des.h"
33 #include "sharp_head_v33.h"
34 #include "xcam_log.h"
35 #include "xcam_mutex.h"
36 
37 struct cJSON;
38 
39 namespace RkCam {
40 
41 typedef struct __map_index {
42     void *dst_offset;
43     void *ptr_offset;
44     size_t len;
45 } map_index_t;
46 
47 typedef std::shared_ptr<std::list<std::string>> ModuleNameList;
48 typedef std::shared_ptr<std::list<RkAiqAlgoType_t>> AlgoList;
49 
50 class RkAiqCalibDbV2 {
51 public:
52     explicit RkAiqCalibDbV2() = default;
53     ~RkAiqCalibDbV2() = default;
54 
55 public:
56     class TuningCalib {
57     public:
58         CamCalibDbV2Context_t* calib;
59         ModuleNameList ModuleNames;
60     };
61 
62 public:
63     static CamCalibDbProj_t *createCalibDbProj(const char *jsfile);
64     static CamCalibDbProj_t *createCalibDbProj(const void *bin_buff, size_t len);
65     static CamCalibDbCamgroup_t* createCalibDbCamgroup(const char *jsfile);
66     static int CamCalibDbCamgroupFree(CamCalibDbCamgroup_t* calib_camgroup);
67 
68     static CamCalibDbProj_t *json2calibproj(const char *jsfile);
69     static CamCalibDbProj_t *json2calibproj(const char *jstr, size_t len);
70     static CamCalibDbProj_t *bin2calibproj(const char *binfile);
71     static CamCalibDbProj_t *bin2calibproj(const void *bin_buff, size_t len);
72     static CamCalibDbV2Context_t *json2calib(const char *jsfile);
73     static CamCalibDbV2Context_t *cjson2calib(cJSON *json);
74 
75     static int calib2json(const char *jsfile, CamCalibDbV2Context_t *calib);
76     static cJSON *calib2cjson(const CamCalibDbV2Context_t *calib);
77     static int calibproj2json(const char *jsfile, CamCalibDbProj_t *calibproj);
78 
79     static void releaseCalibDbProj();
80     static CamCalibDbV2Context_t toDefaultCalibDb(CamCalibDbProj_t *calibproj);
81 
82     static CamCalibDbProj_t *CamCalibDbProjAlloc();
83     static CamCalibDbV2Context_t *CalibV2Alloc();
84     static int CamCalibDbProjFree(CamCalibDbProj_t *calibproj);
85     static int CalibV2Free(CamCalibDbV2Context_t *calibv2);
86 
87     static RkAiqAlgoType_t string2algostype(const char* str);
88     static ModuleNameList analyzChange(cJSON* patch);
89 
90     static cJSON* readIQNode(const CamCalibDbV2Context_t *calib,
91                              const char* node_path);
92 
93     static char* readIQNodeStr(const CamCalibDbV2Context_t* calib,
94                                const char* node_path);
95 
96     static char* readIQNodeStrFromJstr(const CamCalibDbV2Context_t* calib,
97                                        const char* json_str);
98 
99     static CamCalibDbV2Context_t *applyPatch(const CamCalibDbV2Context_t *calib,
100             cJSON *patch);
101     static CamCalibDbV2Context_t *applyPatch2(const CamCalibDbV2Context_t *calib,
102             cJSON *patch);
103 
104     static CamCalibDbV2Context_t *applyPatch(const CamCalibDbV2Context_t *calib,
105             const char *patch_str);
106     static CamCalibDbV2Context_t *
107     applyPatchFile(const CamCalibDbV2Context_t *calib, const char *patch_file);
108     static CamCalibDbV2Context_t *applyPatch(const char *jsfile,
109             const char *patch_file);
110 
111     static TuningCalib analyzTuningCalib(const CamCalibDbV2Context_t *calib,
112                                          cJSON* patch);
113     static TuningCalib analyzTuningCalib(const CamCalibDbV2Context_t *calib,
114                                          const char* patch_str);
115 
116     static int FreeCalibByJ2S(void* ctx);
117 
118     static void *loadWholeFile(const char *fpath, size_t *fsize);
119     static int parseBinStructMap(uint8_t *data, size_t len);
120 
121 private:
122     static std::map<std::string, CamCalibDbProj_t *> mCalibDbsMap;
123     static CalibDb_Sensor_ParaV2_t mSensorInfo;
124     static std::mutex calib_mutex;
125     // isp20
126     static int CamCalibDbFreeSceneCtx(void* ctx);
127     static int CamCalibDbFreeSensorCtx(CalibDb_Sensor_ParaV2_t* sensor);
128     static int CamCalibDbFreeModuleCtx(CalibDb_Module_ParaV2_t* module);
129     static int CamCalibDbFreeAeCtx(CalibDb_Aec_ParaV2_t* ae);
130 #if RKAIQ_HAVE_AWB_V20
131     static int CamCalibDbFreeAwbV20Ctx(CalibDbV2_Wb_Para_V20_t* awb);
132 #endif
133 #if RKAIQ_HAVE_GAMMA_V10
134     static int CamCalibDbFreeGammaCtx(CalibDbV2_gamma_v10_t* gamma);
135 #endif
136     static int CamCalibDbFreeBlcCtx(CalibDbV2_Ablc_t* blc);
137     static int CamCalibDbFreeDegammaCtx(CalibDbV2_Adegmma_t* degamma);
138 #if RKAIQ_HAVE_GIC_V1
139     static int CamCalibDbFreeGicV20Ctx(CalibDbV2_Gic_V20_t* gic);
140 #endif
141     static int CamCalibDbFreeDehazeV20Ctx(CalibDbV2_dehaze_v10_t* dehaze);
142     static int CamCalibDbFreeDpccCtx(CalibDbV2_Dpcc_t* dpcc);
143     static int CamCalibDbFreeTmoCtx(CalibDbV2_tmo_t* tmo);
144 #if RKAIQ_HAVE_ORB_V1
145     static int CamCalibDbFreeOrbCtx(CalibDbV2_Orb_t* orb);
146 #endif
147 #if RKAIQ_HAVE_BAYERNR_V1
148     static int CamCalibDbFreeBayerNrV1Ctx(CalibDbV2_BayerNrV1_t* bayernr_v1);
149 #endif
150 #if RKAIQ_HAVE_MFNR_V1
151     static int CamCalibDbFreeMfnrCtx(CalibDbV2_MFNR_t* mfnr_v1);
152 #endif
153 #if RKAIQ_HAVE_UVNR_V1
154     static int CamCalibDbFreeUvnrCtx(CalibDbV2_UVNR_t* uvnr_v1);
155 #endif
156 #if RKAIQ_HAVE_YNR_V1
157     static int CamCalibDbFreeYnrV1Ctx(CalibDbV2_YnrV1_t* ynr_v1);
158 #endif
159 #if RKAIQ_HAVE_SHARP_V1
160     static int CamCalibDbFreeSharpV1Ctx(CalibDbV2_SharpV1_t* sharp_v1);
161     static int CamCalibDbFreeEdgefilterCtx(CalibDbV2_Edgefilter_t* edgefilter_v1);
162 #endif
163 
164 #if RKAIQ_HAVE_DEBAYER_V1
165     static int CamCalibDbFreeDebayerCtx(CalibDbV2_Debayer_t* debayer_v1);
166 #endif
167 #if RKAIQ_HAVE_ACP_V10
168     static int CamCalibDbFreeCprocCtx(CalibDbV2_Cproc_t* cproc);
169 #endif
170 #if RKAIQ_HAVE_AIE_V10
171     static int CamCalibDbFreeIeCtx(CalibDbV2_IE_t* ie);
172 #endif
173     static int CamCalibDbFreeLscCtx(CalibDbV2_LSC_t* lsc);
174 #if RKAIQ_HAVE_EIS_V1
175     static int CamCalibDbFreeEisCtx(CalibDbV2_Eis_t* eis);
176 #endif
177     static int CamCalibDbFreeColorAsGreyCtx(CalibDbV2_ColorAsGrey_t* colorAsGrey);
178     static int CamCalibDbFreeLumaDetectCtx(CalibDbV2_LUMA_DETECT_t* lumaDetect);
179 #if RKAIQ_HAVE_FEC_V10
180     static int CamCalibDbFreeFectCtx(CalibDbV2_FEC_t* fec);
181 #endif
182 #if (RKAIQ_HAVE_LDCH_V10 || RKAIQ_HAVE_LDCH_V21)
183     static int CamCalibDbFreeLdchCtx(CalibDbV2_LDCH_t* ldch);
184 #endif
185 #if RKAIQ_HAVE_CCM_V1
186     static int CamCalibDbFreeCcmV1Ctx(CalibDbV2_Ccm_Para_V2_t* ccm);
187 #endif
188 #if RKAIQ_HAVE_3DLUT_V1
189     static int CamCalibDbFreeLut3dCtx(CalibDbV2_Lut3D_Para_V2_t* lut3d);
190 #endif
191 #if RKAIQ_HAVE_AF_V20
192     static int CamCalibDbFreeAfV2xCtx(CalibDbV2_AF_t* af);
193 #endif
194     static int CamCalibDbFreeThumbnailsCtx(CalibDbV2_Thumbnails_t* thumbnails);
195 
196     //isp21
197 #if RKAIQ_HAVE_AWB_V21
198     static int CamCalibDbFreeAwbV21Ctx(CalibDbV2_Wb_Para_V21_t* awb);
199 #endif
200 #if RKAIQ_HAVE_GIC_V2
201     static int CamCalibDbFreeGicV21Ctx(CalibDbV2_Gic_V21_t* gic);
202 #endif
203 #if RKAIQ_HAVE_BAYERNR_V2
204     static int CamCalibDbFreeBayerNrV2Ctx(CalibDbV2_BayerNrV2_t* bayernr_v1);
205 #endif
206 #if RKAIQ_HAVE_UVNR_V1
207     static int CamCalibDbFreeCnrCtx(CalibDbV2_CNR_t* cnr);
208 #endif
209 #if RKAIQ_HAVE_YNR_V2
210     static int CamCalibDbFreeYnrV2Ctx(CalibDbV2_YnrV2_t* ynr_v2);
211 #endif
212 #if RKAIQ_HAVE_SHARP_V3
213     static int CamCalibDbFreeSharpV3Ctx(CalibDbV2_SharpV3_t* sharp_v3);
214 #endif
215 
216     static int CamCalibDbFreeUapiCtx(RkaiqUapi_t* uapi);
217     static int CamCalibDbFreeSysStaticCtx(CalibDb_SysStaticCfg_ParaV2_t* sys_static);
218 
219     //isp30
220 #if RKAIQ_HAVE_GAMMA_V11
221     static int CamCalibDbFreeGammaV2Ctx(CalibDbV2_gamma_v11_t* gamma);
222 #endif
223 #if RKAIQ_HAVE_CAC_V03
224     static int CamCalibDbFreeCacV03Ctx(CalibDbV2_Cac_V03_t* cac_calib);
225 #endif
226 #if RKAIQ_HAVE_CAC_V10
227     static int CamCalibDbFreeCacV10Ctx(CalibDbV2_Cac_V10_t* cac_calib);
228 #endif
229 #if RKAIQ_HAVE_CAC_V11
230     static int CamCalibDbFreeCacV11Ctx(CalibDbV2_Cac_V11_t* cac_calib);
231 #endif
232 #if RKAIQ_HAVE_BAYER2DNR_V2
233     static int CamCalibDbFreeBayer2dnrV2Ctx(CalibDbV2_Bayer2dnrV2_t* bayer2dnr_v2);
234 #endif
235 #if RKAIQ_HAVE_BAYERTNR_V2
236     static int CamCalibDbFreeBayertnrV2Ctx(CalibDbV2_BayerTnrV2_t* bayertnr_v2);
237 #endif
238 #if RKAIQ_HAVE_CNR_V2
239     static int CamCalibDbFreeCnrV2Ctx(CalibDbV2_CNRV2_t* cnr_v2);
240 #endif
241 #if RKAIQ_HAVE_YNR_V3
242     static int CamCalibDbFreeYnrV3Ctx(CalibDbV2_YnrV3_t* ynr_v3);
243 #endif
244 #if RKAIQ_HAVE_SHARP_V4
245     static int CamCalibDbFreeSharpV4Ctx(CalibDbV2_SharpV4_t* sharp_v4);
246 #endif
247 #if RKAIQ_HAVE_AF_V30
248     static int CamCalibDbFreeAfV30Ctx(CalibDbV2_AFV30_t* af);
249 #endif
250 
251 // isp 32
252 #if RKAIQ_HAVE_AWB_V32
253     static int CamCalibDbFreeAwbV32Ctx(CalibDbV2_Wb_Para_V32_t* awb);
254 #endif
255 #if RKAIQ_HAVE_BLC_V32
256     static int CamCalibDbFreeBlcV32Ctx(CalibDbV2_Blc_V32_t* blc_v32);
257 #endif
258 #if RKAIQ_HAVE_DEBAYER_V2
259     static int CamCalibDbFreeDebayerV2Ctx(CalibDbV2_Debayer_v2_t * debayer_v2);
260 #endif
261 #if RKAIQ_HAVE_DEBAYER_V2_LITE
262     static int CamCalibDbFreeDebayerV2Ctx(CalibDbV2_Debayer_v2_lite_t * debayer_v2);
263 #endif
264 
265 #if RKAIQ_HAVE_CCM_V2
266     static int CamCalibDbFreeCcmV2Ctx(CalibDbV2_Ccm_Para_V32_t* ccm);
267 #endif
268 #if RKAIQ_HAVE_BAYER2DNR_V23
269     static int CamCalibDbFreeBayer2dnrV23Ctx(CalibDbV2_Bayer2dnrV23_t* bayer2dnr_v23);
270 #endif
271 #if RKAIQ_HAVE_BAYERTNR_V23
272     static int CamCalibDbFreeBayertnrV23Ctx(CalibDbV2_BayerTnrV23_t* bayertnr_v23);
273 #endif
274 #if RKAIQ_HAVE_BAYERTNR_V23_LITE
275     static int CamCalibDbFreeBayertnrV23LiteCtx(CalibDbV2_BayerTnrV23Lite_t* bayertnr_v23_lite);
276 #endif
277 #if (RKAIQ_HAVE_CNR_V30 || RKAIQ_HAVE_CNR_V30_LITE)
278     static int CamCalibDbFreeCnrV30Ctx(CalibDbV2_CNRV30_t* cnr_v30);
279 #endif
280 #if RKAIQ_HAVE_YNR_V22
281     static int CamCalibDbFreeYnrV22Ctx(CalibDbV2_YnrV22_t* ynr_v22);
282 #endif
283 #if RKAIQ_HAVE_SHARP_V33
284     static int CamCalibDbFreeSharpV33Ctx(CalibDbV2_SharpV33_t* sharp_v33);
285 #endif
286 #if RKAIQ_HAVE_SHARP_V33_LITE
287     static int CamCalibDbFreeSharpV33LiteCtx(CalibDbV2_SharpV33Lite_t* sharp_v33);
288 #endif
289 
290 #if RKAIQ_HAVE_AF_V31
291     static int CamCalibDbFreeAfV31Ctx(CalibDbV2_AFV31_t* af);
292 #endif
293 #if RKAIQ_HAVE_GAIN_V2
294     static int CamCalibDbFreeGainV2Ctx(CalibDbV2_GainV2_t* gain_v2);
295 #endif
296 
297 #if RKAIQ_HAVE_AF_V32_LITE
298     static int CamCalibDbFreeAfV32Ctx(CalibDbV2_AFV32_t* af);
299 #endif
300 
301 };
302 
303 } // namespace RkCam
304 
305 #endif /*___RK_AIQ_CALIB_DB_V2_H__*/
306