android13/external/camera_engine_rkaiq/include/iq_parser_v2/RkAiqCalibDbV2.h

306 lines
10 KiB
C++

/*
* 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 <list>
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include <unordered_map>
#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<std::list<std::string>> ModuleNameList;
typedef std::shared_ptr<std::list<RkAiqAlgoType_t>> 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<std::string, CamCalibDbProj_t *> 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__*/