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