1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
9.2 KiB

/*
* Copyright (c) 2019 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 _CAM_HW_ISP20_PARAMS_H_
#define _CAM_HW_ISP20_PARAMS_H_
#include "rk_aiq_pool.h"
#include "rkisp2-config.h"
#include "rkispp-config.h"
namespace RkCam {
#define ISP20PARAM_SUBM (0x2)
typedef struct AntiTmoFlicker_s {
int preFrameNum;
bool FirstChange;
int FirstChangeNum;
bool FirstChangeDone;
int FirstChangeDoneNum;
} AntiTmoFlicker_t;
enum params_type {
ISP_PARAMS,
ISPP_PARAMS,
};
class IspParamsAssembler {
public:
explicit IspParamsAssembler(const char* name);
virtual ~IspParamsAssembler();
void addReadyCondition(uint32_t cond);
void rmReadyCondition(uint32_t cond);
XCamReturn queue(cam3aResultList& results);
XCamReturn queue(SmartPtr<cam3aResult>& result);
XCamReturn deQueOne(cam3aResultList& results, uint32_t& frame_id);
void forceReady(sint32_t frame_id);
bool ready();
void reset();
XCamReturn start();
void stop();
void setCamPhyId(int phyId) {
mCamPhyId = phyId;
}
protected:
int mCamPhyId;
private:
XCAM_DEAD_COPY(IspParamsAssembler);
XCamReturn queue_locked(SmartPtr<cam3aResult>& result);
void reset_locked();
typedef struct {
bool ready;
uint64_t flags;
cam3aResultList params;
} params_t;
// <frameId, result lists>
std::map<sint32_t, params_t> mParamsMap;
Mutex mParamsMutex;
sint32_t mLatestReadyFrmId;
uint64_t mReadyMask;
uint32_t mReadyNums;
std::string mName;
// <result_type, maskId>
std::map<uint32_t, uint64_t> mCondMaskMap;
uint8_t mCondNum;
static uint32_t MAX_PENDING_PARAMS;
cam3aResultList mInitParamsList;
bool started;
};
class Isp20Params {
public:
explicit Isp20Params() : _last_pp_module_init_ens(0)
, _force_isp_module_ens(0)
, _force_ispp_module_ens(0)
, _force_module_flags(0)
{ AntiTmoFlicker.preFrameNum = 0;
AntiTmoFlicker.FirstChange = false;
AntiTmoFlicker.FirstChangeNum = 0;
AntiTmoFlicker.FirstChangeDone = false;
AntiTmoFlicker.FirstChangeDoneNum = 0;
_working_mode = RK_AIQ_WORKING_MODE_ISP_HDR3;
};
virtual ~Isp20Params() {};
virtual void setCamPhyId(int phyId) {
_CamPhyId = phyId;
}
virtual XCamReturn checkIsp20Params(struct isp2x_isp_params_cfg& isp_cfg);
void set_working_mode(int mode);
void setModuleStatus(rk_aiq_module_id_t mId, bool en);
void getModuleStatus(rk_aiq_module_id_t mId, bool& en);
void hdrtmoGetLumaInfo(rk_aiq_luma_params_t * Next, rk_aiq_luma_params_t *Cur,
s32 frameNum, s32 PixelNumBlock, float blc, float *luma);
void hdrtmoGetAeInfo(RKAiqAecExpInfo_t* Next, RKAiqAecExpInfo_t* Cur, s32 frameNum, float* expo);
s32 hdrtmoPredictK(float* luma, float* expo, s32 frameNum, PredictKPara_t *TmoPara);
bool hdrtmoSceneStable(sint32_t frameId, int IIRMAX, int IIR, int SetWeight, s32 frameNum, float *LumaDeviation, float StableThr);
#if 0
void forceOverwriteAiqIsppCfg(struct rkispp_params_cfg& pp_cfg,
SmartPtr<RkAiqIspParamsProxy> aiq_meas_results,
SmartPtr<RkAiqIspParamsProxy> aiq_other_results);
void forceOverwriteAiqIspCfg(struct isp2x_isp_params_cfg& isp_cfg,
SmartPtr<RkAiqIspParamsProxy> aiq_results,
SmartPtr<RkAiqIspParamsProxy> aiq_other_results);
#endif
template<typename T>
XCamReturn merge_results(cam3aResultList &results, T &isp_cfg);
XCamReturn get_tnr_cfg_params(cam3aResultList &results, struct rkispp_params_tnrcfg &tnr_cfg);
//XCamReturn get_nr_cfg_params(cam3aResultList &results, struct rkispp_params_nrcfg &nr_cfg);
XCamReturn get_fec_cfg_params(cam3aResultList &results, struct rkispp_params_feccfg &fec_cfg);
virtual XCamReturn merge_isp_results(cam3aResultList &results, void* isp_cfg);
protected:
XCAM_DEAD_COPY(Isp20Params);
template<class T>
void convertAiqAeToIsp20Params(T& isp_cfg,
const rk_aiq_isp_aec_meas_t& aec_meas);
template<class T>
void convertAiqHistToIsp20Params(T& isp_cfg,
const rk_aiq_isp_hist_meas_t& hist_meas);
template<class T>
void convertAiqAwbToIsp20Params(T& isp_cfg,
const rk_aiq_awb_stat_cfg_v200_t& awb_meas,
bool awb_cfg_udpate);
template<class T>
void convertAiqAwbGainToIsp20Params(T& isp_cfg,
const rk_aiq_wb_gain_t& awb_gain, const rk_aiq_isp_blc_t &blc,
bool awb_gain_update);
template<class T>
void convertAiqMergeToIsp20Params(T& isp_cfg,
const rk_aiq_isp_merge_t& amerge_data);
template<class T>
void convertAiqTmoToIsp20Params(T& isp_cfg,
const rk_aiq_isp_tmo_t& atmo_data);
template<class T>
void convertAiqAdehazeToIsp20Params(T& isp_cfg,
const rk_aiq_isp_dehaze_t& dhaze );
template<class T>
void convertAiqAgammaToIsp20Params(T& isp_cfg,
const AgammaProcRes_t& gamma_out_cfg);
template<class T>
void convertAiqAdegammaToIsp20Params(T& isp_cfg,
const AdegammaProcRes_t& degamma_cfg);
template<class T>
void convertAiqAdemosaicToIsp20Params(T& isp_cfg, rk_aiq_isp_debayer_t &demosaic);
template<class T>
void convertAiqLscToIsp20Params(T& isp_cfg,
const rk_aiq_lsc_cfg_t& lsc);
template<class T>
void convertAiqBlcToIsp20Params(T& isp_cfg, rk_aiq_isp_blc_t &blc);
template<class T>
void convertAiqDpccToIsp20Params(T& isp_cfg, rk_aiq_isp_dpcc_t &dpcc);
template<class T>
void convertAiqCcmToIsp20Params(T& isp_cfg,
const rk_aiq_ccm_cfg_t& ccm);
template<class T>
void convertAiqA3dlutToIsp20Params(T& isp_cfg,
const rk_aiq_lut3d_cfg_t& lut3d_cfg);
template<class T>
void convertAiqCpToIsp20Params(T& isp_cfg,
const rk_aiq_acp_params_t& lut3d_cfg);
template<class T>
void convertAiqIeToIsp20Params(T& isp_cfg,
const rk_aiq_isp_ie_t& ie_cfg);
template<class T>
void convertAiqRawnrToIsp20Params(T& isp_cfg,
rk_aiq_isp_rawnr_t& rawnr);
template<typename T>
void convertAiqTnrToIsp20Params(T& pp_cfg,
rk_aiq_isp_tnr_t& tnr);
template<typename T>
void convertAiqUvnrToIsp20Params(T& pp_cfg,
rk_aiq_isp_uvnr_t& uvnr);
template<typename T>
void convertAiqYnrToIsp20Params(T& pp_cfg,
rk_aiq_isp_ynr_t& ynr);
template<typename T>
void convertAiqSharpenToIsp20Params(T& pp_cfg,
rk_aiq_isp_sharpen_t& sharp, rk_aiq_isp_edgeflt_t& edgeflt);
template<class T>
void convertAiqAfToIsp20Params(T& isp_cfg,
const rk_aiq_isp_af_meas_t& af_data, bool af_cfg_udpate);
template<class T>
void convertAiqGainToIsp20Params(T& isp_cfg,
rk_aiq_isp_gain_t& gain);
template<class T>
void convertAiqAldchToIsp20Params(T& isp_cfg,
const rk_aiq_isp_ldch_t& ldch_cfg);
template<typename T>
void convertAiqFecToIsp20Params(T& pp_cfg,
rk_aiq_isp_fec_t& fec);
template<class T>
void convertAiqGicToIsp20Params(T& isp_cfg,
const rk_aiq_isp_gic_t& gic_cfg);
template<typename T>
void convertAiqOrbToIsp20Params(T& pp_cfg,
rk_aiq_isp_orb_t& orb);
bool getModuleForceFlag(int module_id);
void setModuleForceFlagInverse(int module_id);
bool getModuleForceEn(int module_id);
void updateIspModuleForceEns(u64 module_ens);
void updateIsppModuleForceEns(u32 module_ens);
uint32_t _last_pp_module_init_ens;
u64 _force_isp_module_ens;
u32 _force_ispp_module_ens;
u64 _force_module_flags;
int _working_mode;
int _CamPhyId;
AntiTmoFlicker_t AntiTmoFlicker;
Mutex _mutex;
virtual bool convert3aResultsToIspCfg(SmartPtr<cam3aResult> &result, void* isp_cfg_p);
SmartPtr<cam3aResult> get_3a_result (cam3aResultList &results, int32_t type);
// std::map<int, std::list<SmartPtr<cam3aResult>>> _cam3aConfig;
SmartPtr<cam3aResult> mBlcResult;
};
};
#endif