/* * Copyright (c) 2021 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef ___RK_AIQ_CALIB_DB_V2_H__ #define ___RK_AIQ_CALIB_DB_V2_H__ #include #include #include #include #include #include #include "RkAiqCalibDbTypesV2.h" #include "RkAiqCalibDbV2Helper.h" #include "ablc_head.h" #include "ablc_head_V32.h" #include "rk_aiq_algo_des.h" #include "sharp_head_v33.h" #include "xcam_log.h" #include "xcam_mutex.h" struct cJSON; namespace RkCam { typedef struct __map_index { void *dst_offset; void *ptr_offset; size_t len; } map_index_t; typedef std::shared_ptr> ModuleNameList; typedef std::shared_ptr> AlgoList; class RkAiqCalibDbV2 { public: explicit RkAiqCalibDbV2() = default; ~RkAiqCalibDbV2() = default; public: class TuningCalib { public: CamCalibDbV2Context_t* calib; ModuleNameList ModuleNames; }; public: static CamCalibDbProj_t *createCalibDbProj(const char *jsfile); static CamCalibDbProj_t *createCalibDbProj(const void *bin_buff, size_t len); static CamCalibDbCamgroup_t* createCalibDbCamgroup(const char *jsfile); static int CamCalibDbCamgroupFree(CamCalibDbCamgroup_t* calib_camgroup); static CamCalibDbProj_t *json2calibproj(const char *jsfile); static CamCalibDbProj_t *json2calibproj(const char *jstr, size_t len); static CamCalibDbProj_t *bin2calibproj(const char *binfile); static CamCalibDbProj_t *bin2calibproj(const void *bin_buff, size_t len); static CamCalibDbV2Context_t *json2calib(const char *jsfile); static CamCalibDbV2Context_t *cjson2calib(cJSON *json); static int calib2json(const char *jsfile, CamCalibDbV2Context_t *calib); static cJSON *calib2cjson(const CamCalibDbV2Context_t *calib); static int calibproj2json(const char *jsfile, CamCalibDbProj_t *calibproj); static void releaseCalibDbProj(); static CamCalibDbV2Context_t toDefaultCalibDb(CamCalibDbProj_t *calibproj); static CamCalibDbProj_t *CamCalibDbProjAlloc(); static CamCalibDbV2Context_t *CalibV2Alloc(); static int CamCalibDbProjFree(CamCalibDbProj_t *calibproj); static int CalibV2Free(CamCalibDbV2Context_t *calibv2); static RkAiqAlgoType_t string2algostype(const char* str); static ModuleNameList analyzChange(cJSON* patch); static cJSON* readIQNode(const CamCalibDbV2Context_t *calib, const char* node_path); static char* readIQNodeStr(const CamCalibDbV2Context_t* calib, const char* node_path); static char* readIQNodeStrFromJstr(const CamCalibDbV2Context_t* calib, const char* json_str); static CamCalibDbV2Context_t *applyPatch(const CamCalibDbV2Context_t *calib, cJSON *patch); static CamCalibDbV2Context_t *applyPatch2(const CamCalibDbV2Context_t *calib, cJSON *patch); static CamCalibDbV2Context_t *applyPatch(const CamCalibDbV2Context_t *calib, const char *patch_str); static CamCalibDbV2Context_t * applyPatchFile(const CamCalibDbV2Context_t *calib, const char *patch_file); static CamCalibDbV2Context_t *applyPatch(const char *jsfile, const char *patch_file); static TuningCalib analyzTuningCalib(const CamCalibDbV2Context_t *calib, cJSON* patch); static TuningCalib analyzTuningCalib(const CamCalibDbV2Context_t *calib, const char* patch_str); static int FreeCalibByJ2S(void* ctx); static void *loadWholeFile(const char *fpath, size_t *fsize); static int parseBinStructMap(uint8_t *data, size_t len); private: static std::map mCalibDbsMap; static CalibDb_Sensor_ParaV2_t mSensorInfo; static std::mutex calib_mutex; // isp20 static int CamCalibDbFreeSceneCtx(void* ctx); static int CamCalibDbFreeSensorCtx(CalibDb_Sensor_ParaV2_t* sensor); static int CamCalibDbFreeModuleCtx(CalibDb_Module_ParaV2_t* module); static int CamCalibDbFreeAeCtx(CalibDb_Aec_ParaV2_t* ae); #if RKAIQ_HAVE_AWB_V20 static int CamCalibDbFreeAwbV20Ctx(CalibDbV2_Wb_Para_V20_t* awb); #endif #if RKAIQ_HAVE_GAMMA_V10 static int CamCalibDbFreeGammaCtx(CalibDbV2_gamma_v10_t* gamma); #endif static int CamCalibDbFreeBlcCtx(CalibDbV2_Ablc_t* blc); static int CamCalibDbFreeDegammaCtx(CalibDbV2_Adegmma_t* degamma); #if RKAIQ_HAVE_GIC_V1 static int CamCalibDbFreeGicV20Ctx(CalibDbV2_Gic_V20_t* gic); #endif static int CamCalibDbFreeDehazeV20Ctx(CalibDbV2_dehaze_v10_t* dehaze); static int CamCalibDbFreeDpccCtx(CalibDbV2_Dpcc_t* dpcc); static int CamCalibDbFreeTmoCtx(CalibDbV2_tmo_t* tmo); #if RKAIQ_HAVE_ORB_V1 static int CamCalibDbFreeOrbCtx(CalibDbV2_Orb_t* orb); #endif #if RKAIQ_HAVE_BAYERNR_V1 static int CamCalibDbFreeBayerNrV1Ctx(CalibDbV2_BayerNrV1_t* bayernr_v1); #endif #if RKAIQ_HAVE_MFNR_V1 static int CamCalibDbFreeMfnrCtx(CalibDbV2_MFNR_t* mfnr_v1); #endif #if RKAIQ_HAVE_UVNR_V1 static int CamCalibDbFreeUvnrCtx(CalibDbV2_UVNR_t* uvnr_v1); #endif #if RKAIQ_HAVE_YNR_V1 static int CamCalibDbFreeYnrV1Ctx(CalibDbV2_YnrV1_t* ynr_v1); #endif #if RKAIQ_HAVE_SHARP_V1 static int CamCalibDbFreeSharpV1Ctx(CalibDbV2_SharpV1_t* sharp_v1); static int CamCalibDbFreeEdgefilterCtx(CalibDbV2_Edgefilter_t* edgefilter_v1); #endif #if RKAIQ_HAVE_DEBAYER_V1 static int CamCalibDbFreeDebayerCtx(CalibDbV2_Debayer_t* debayer_v1); #endif #if RKAIQ_HAVE_ACP_V10 static int CamCalibDbFreeCprocCtx(CalibDbV2_Cproc_t* cproc); #endif #if RKAIQ_HAVE_AIE_V10 static int CamCalibDbFreeIeCtx(CalibDbV2_IE_t* ie); #endif static int CamCalibDbFreeLscCtx(CalibDbV2_LSC_t* lsc); #if RKAIQ_HAVE_EIS_V1 static int CamCalibDbFreeEisCtx(CalibDbV2_Eis_t* eis); #endif static int CamCalibDbFreeColorAsGreyCtx(CalibDbV2_ColorAsGrey_t* colorAsGrey); static int CamCalibDbFreeLumaDetectCtx(CalibDbV2_LUMA_DETECT_t* lumaDetect); #if RKAIQ_HAVE_FEC_V10 static int CamCalibDbFreeFectCtx(CalibDbV2_FEC_t* fec); #endif #if (RKAIQ_HAVE_LDCH_V10 || RKAIQ_HAVE_LDCH_V21) static int CamCalibDbFreeLdchCtx(CalibDbV2_LDCH_t* ldch); #endif #if RKAIQ_HAVE_CCM_V1 static int CamCalibDbFreeCcmV1Ctx(CalibDbV2_Ccm_Para_V2_t* ccm); #endif #if RKAIQ_HAVE_3DLUT_V1 static int CamCalibDbFreeLut3dCtx(CalibDbV2_Lut3D_Para_V2_t* lut3d); #endif #if RKAIQ_HAVE_AF_V20 static int CamCalibDbFreeAfV2xCtx(CalibDbV2_AF_t* af); #endif static int CamCalibDbFreeThumbnailsCtx(CalibDbV2_Thumbnails_t* thumbnails); //isp21 #if RKAIQ_HAVE_AWB_V21 static int CamCalibDbFreeAwbV21Ctx(CalibDbV2_Wb_Para_V21_t* awb); #endif #if RKAIQ_HAVE_GIC_V2 static int CamCalibDbFreeGicV21Ctx(CalibDbV2_Gic_V21_t* gic); #endif #if RKAIQ_HAVE_BAYERNR_V2 static int CamCalibDbFreeBayerNrV2Ctx(CalibDbV2_BayerNrV2_t* bayernr_v1); #endif #if RKAIQ_HAVE_UVNR_V1 static int CamCalibDbFreeCnrCtx(CalibDbV2_CNR_t* cnr); #endif #if RKAIQ_HAVE_YNR_V2 static int CamCalibDbFreeYnrV2Ctx(CalibDbV2_YnrV2_t* ynr_v2); #endif #if RKAIQ_HAVE_SHARP_V3 static int CamCalibDbFreeSharpV3Ctx(CalibDbV2_SharpV3_t* sharp_v3); #endif static int CamCalibDbFreeUapiCtx(RkaiqUapi_t* uapi); static int CamCalibDbFreeSysStaticCtx(CalibDb_SysStaticCfg_ParaV2_t* sys_static); //isp30 #if RKAIQ_HAVE_GAMMA_V11 static int CamCalibDbFreeGammaV2Ctx(CalibDbV2_gamma_v11_t* gamma); #endif #if RKAIQ_HAVE_CAC_V03 static int CamCalibDbFreeCacV03Ctx(CalibDbV2_Cac_V03_t* cac_calib); #endif #if RKAIQ_HAVE_CAC_V10 static int CamCalibDbFreeCacV10Ctx(CalibDbV2_Cac_V10_t* cac_calib); #endif #if RKAIQ_HAVE_CAC_V11 static int CamCalibDbFreeCacV11Ctx(CalibDbV2_Cac_V11_t* cac_calib); #endif #if RKAIQ_HAVE_BAYER2DNR_V2 static int CamCalibDbFreeBayer2dnrV2Ctx(CalibDbV2_Bayer2dnrV2_t* bayer2dnr_v2); #endif #if RKAIQ_HAVE_BAYERTNR_V2 static int CamCalibDbFreeBayertnrV2Ctx(CalibDbV2_BayerTnrV2_t* bayertnr_v2); #endif #if RKAIQ_HAVE_CNR_V2 static int CamCalibDbFreeCnrV2Ctx(CalibDbV2_CNRV2_t* cnr_v2); #endif #if RKAIQ_HAVE_YNR_V3 static int CamCalibDbFreeYnrV3Ctx(CalibDbV2_YnrV3_t* ynr_v3); #endif #if RKAIQ_HAVE_SHARP_V4 static int CamCalibDbFreeSharpV4Ctx(CalibDbV2_SharpV4_t* sharp_v4); #endif #if RKAIQ_HAVE_AF_V30 static int CamCalibDbFreeAfV30Ctx(CalibDbV2_AFV30_t* af); #endif // isp 32 #if RKAIQ_HAVE_AWB_V32 static int CamCalibDbFreeAwbV32Ctx(CalibDbV2_Wb_Para_V32_t* awb); #endif #if RKAIQ_HAVE_BLC_V32 static int CamCalibDbFreeBlcV32Ctx(CalibDbV2_Blc_V32_t* blc_v32); #endif #if RKAIQ_HAVE_DEBAYER_V2 static int CamCalibDbFreeDebayerV2Ctx(CalibDbV2_Debayer_v2_t * debayer_v2); #endif #if RKAIQ_HAVE_DEBAYER_V2_LITE static int CamCalibDbFreeDebayerV2Ctx(CalibDbV2_Debayer_v2_lite_t * debayer_v2); #endif #if RKAIQ_HAVE_CCM_V2 static int CamCalibDbFreeCcmV2Ctx(CalibDbV2_Ccm_Para_V32_t* ccm); #endif #if RKAIQ_HAVE_BAYER2DNR_V23 static int CamCalibDbFreeBayer2dnrV23Ctx(CalibDbV2_Bayer2dnrV23_t* bayer2dnr_v23); #endif #if RKAIQ_HAVE_BAYERTNR_V23 static int CamCalibDbFreeBayertnrV23Ctx(CalibDbV2_BayerTnrV23_t* bayertnr_v23); #endif #if RKAIQ_HAVE_BAYERTNR_V23_LITE static int CamCalibDbFreeBayertnrV23LiteCtx(CalibDbV2_BayerTnrV23Lite_t* bayertnr_v23_lite); #endif #if (RKAIQ_HAVE_CNR_V30 || RKAIQ_HAVE_CNR_V30_LITE) static int CamCalibDbFreeCnrV30Ctx(CalibDbV2_CNRV30_t* cnr_v30); #endif #if RKAIQ_HAVE_YNR_V22 static int CamCalibDbFreeYnrV22Ctx(CalibDbV2_YnrV22_t* ynr_v22); #endif #if RKAIQ_HAVE_SHARP_V33 static int CamCalibDbFreeSharpV33Ctx(CalibDbV2_SharpV33_t* sharp_v33); #endif #if RKAIQ_HAVE_SHARP_V33_LITE static int CamCalibDbFreeSharpV33LiteCtx(CalibDbV2_SharpV33Lite_t* sharp_v33); #endif #if RKAIQ_HAVE_AF_V31 static int CamCalibDbFreeAfV31Ctx(CalibDbV2_AFV31_t* af); #endif #if RKAIQ_HAVE_GAIN_V2 static int CamCalibDbFreeGainV2Ctx(CalibDbV2_GainV2_t* gain_v2); #endif #if RKAIQ_HAVE_AF_V32_LITE static int CamCalibDbFreeAfV32Ctx(CalibDbV2_AFV32_t* af); #endif }; } // namespace RkCam #endif /*___RK_AIQ_CALIB_DB_V2_H__*/