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.

178 lines
5.8 KiB

#include "rk_aiq_isp32_modules.h"
bool rk_aiq_btnr32_check_attrib(btnr_api_attrib_t *attr)
{
return true;
}
bool rk_aiq_btnr32_check_param(btnr_param_t *param)
{
return true;
}
void rk_aiq_btnr32_params_cvt(void* attr, struct isp32_isp_params_cfg* isp_cfg, bool bypass)
{
int i;
int tmp;
struct isp32_bay3d_cfg *phwcfg = &isp_params->isp_cfg->others.bay3d_cfg;
btnr_param_t *btnr_param = (btnr_param_t *) attr;
btnr_params_dyn_t *pdyn = &btnr_param->dyn;
btnr_params_static_t *psta = &btnr_param->sta;
if (psta->bwCfg.hw_btnrCfg_bw_mode == bw_compress_mode)
phwcfg->bwsaving_en = 1;
else
phwcfg->bwsaving_en = 0;
phwcfg->bypass_en = bypass;
switch (psta->mdCfg.hw_btnrT_md_mode) {
case loHiMdMix_mode:
phwcfg->hibypass_en = 0;
phwcfg->lobypass_en = 0;
break;
case hiMdOnly_mode:
phwcfg->hibypass_en = 0;
phwcfg->lobypass_en = 1;
break;
case loMdOnly_mode:
phwcfg->hibypass_en = 1;
phwcfg->lobypass_en = 0;
break;
}
phwcfg->himed_bypass_en = !pdyn->hiMd.hw_btnrT_hiMedfilt_en;
phwcfg->lomed_bypass_en = !pdyn->loMd.hw_btnrT_loMedfilt_en;
phwcfg->higaus_bypass_en = !pdyn->hiMd.hw_btnrT_hiFilt_en;
phwcfg->hiabs_possel = pdyn->hiMd.hw_btnrT_hiFiltAbs_mode == abs_filt_mode;
switch (pdyn->hiMd.hw_btnrT_hiFilt_mode) {
case bayerFilt_gaus_mode:
phwcfg->hichncor_en = 0;
phwcfg->higaus3_mode = 0;
phwcfg->hichnsplit_en = 1;
break;
case bayerFilt_gausMean_mode:
phwcfg->hichncor_en = 1;
break;
case lumaFilt_filt3StrgLo_mode:
phwcfg->hichncor_en = 0;
phwcfg->higaus3_mode = 2;
break;
case lumaFilt_filt3StrgHi_mode:
phwcfg->hichncor_en = 0;
phwcfg->higaus3_mode = 1;
break;
case lumaFilt_filt5StrgLo_mode:
phwcfg->hichncor_en = 0;
phwcfg->higaus3_mode = 0;
phwcfg->hichnsplit_en = 0;
phwcfg->higaus5x5_en = 1;
break;
case lumaFilt_filt7StrgLo_mode:
phwcfg->hichncor_en = 0;
phwcfg->higaus3_mode = 0;
phwcfg->hichnsplit_en = 0;
phwcfg->higaus5x5_en = 0;
break;
}
phwcfg->logaus5_bypass_en = !pdyn->loMd.hw_btnrT_loBayerFilt_en;
phwcfg->logaus3_bypass_en = !pdyn->loMd.hw_btnrT_loLumaFilt_en;
phwcfg->glbpk_en = psta->pkCfg.pkSigmaMode.hw_btnrT_pkSigma_mode == btnr_pkSigma_glb_mode;
phwcfg->loswitch_protect = 0;
tmp = (int)(pdyn->frmAlpha.hw_bnrT_softThred_scale * (1 << 10));
phwcfg->softwgt = CLIP(tmp, 0, 0x3ff);
tmp = (int)(pdyn->frmAlphaWgtPk.sw_btnrT_glbPkSigma_scale);
phwcfg->glbpk2 = CLIP(tmp, 0, 0xfffffff);
switch (pdyn->frmAlphaWgtMd.sw_btnrT_wgtMdOpt_mode) {
case loHi_loHiDiff_mode:
phwcfg->hiwgt_opt_en = 0;
phwcfg->wgtmix_opt_en = 0;
break;
case loHi0_hi1_mode:
phwcfg->hiwgt_opt_en = 1;
phwcfg->wgtmix_opt_en = 1;
break;
case loHi0_negHi1_mode:
phwcfg->hiwgt_opt_en = 1;
phwcfg->wgtmix_opt_en = 0;
break;
}
phwcfg->bwopt_gain_dis = 0;
switch (psta->mdCfg.hw_btnrT_loDs_mode) {
case loDs_4x4_mode:
phwcfg->lo4x4_en = 1;
phwcfg->lo4x8_en = 0;
break;
case loDs_8x4_mode:
phwcfg->lo4x4_en = 0;
phwcfg->lo4x8_en = 1;
break;
case loDs_8x8_mode:
phwcfg->lo4x4_en = 0;
phwcfg->lo4x8_en = 0;
break;
}
phwcfg->hisig_ind_sel = pdyn->hiMd.hw_btnrT_hiSigmaIdxPreFilt_en;
phwcfg->pksig_ind_sel = pdyn->frmAlphaWgtPk.hw_btnrT_pkSigmaIdxPreFilt_en;
phwcfg->iirwr_rnd_en = 1;
phwcfg->curds_high_en = 0;
tmp = (int)(((float)1 - pdyn->frmAlphaWgtPk.hw_btnrT_wgtPk_minLimit) * (1 << 10));
phwcfg->wgtlmt = CLIP(tmp, 0, 0x3ff);
if (phwcfg->hibypass_en == 0)
tmp = (int)(pdyn->frmAlphaWgtMd.hw_btnrT_loHi0Diff_scale * (1 << 10));
else
tmp = 0;
phwcfg->wgtratio = CLIP(tmp, 0, 0x3ff);
for (int i = 0; i < ISP3X_BAY3D_XY_NUM; i++) {
tmp = pdyn->frmAlphaWgtPk.hw_btnrC_luma2PkSigma_Curve.idx[i];
phwcfg->sig0_x[i] = CLIP(tmp, 0, 0xffff);
tmp = pdyn->frmAlphaWgtPk.hw_btnrC_luma2PkSigma_Curve.val[i];
phwcfg->sig0_y[i] = CLIP(tmp, 0, 0x3fff);
tmp = pdyn->hiMd.hw_btnrC_luma2HiSigma_Curve.idx[i];
phwcfg->sig1_x[i] = CLIP(tmp, 0, 0xffff);
tmp = pdyn->hiMd.hw_btnrC_luma2HiSigma_Curve.val[i];
phwcfg->sig1_y[i] = CLIP(tmp, 0, 0x3fff);
tmp = pdyn->loMd.hw_btnrC_luma2LoSigma_Curve.idx[i];
phwcfg->sig2_x[i] = CLIP(tmp, 0, 0xffff);
tmp = pdyn->loMd.hw_btnrC_luma2LoSigma_Curve.val[i];
phwcfg->sig2_y[i] = CLIP(tmp, 0, 0x3ff);
}
tmp = (int)(pdyn->hiMd.hw_btnrT_hi0Sigma_scale * (1 << 8));
phwcfg->hisigrat0 = CLIP(tmp, 0, 0xfff);
tmp = (int)(pdyn->hiMd.hw_btnrT_hi1Sigma_scale * (1 << 8));
phwcfg->hisigrat1 = CLIP(tmp, 0, 0xfff);
tmp = (int)(pdyn->hiMd.hw_btnrT_hi0Sigma_offset);
phwcfg->hisigoff0 = CLIP(tmp, 0, 0xfff);
tmp = (int)(pdyn->hiMd.hw_btnrT_hi1Sigma_offset);
phwcfg->hisigoff1 = CLIP(tmp, 0, 0xfff);
tmp = (int)(pdyn->loMd.hw_btnrT_loSigma_offset);
phwcfg->losigoff = CLIP(tmp, 0, 0xfff);
tmp = (int)(pdyn->loMd.hw_btnrT_loSigma_scale * (1 << 8));
phwcfg->losigrat = CLIP(tmp, 0, 0xfff);
phwcfg->rgain_off = 0;
phwcfg->bgain_off = 0;
tmp = (int)(pdyn->hiMd.hw_btnrT_SigmaIdxPreFilt_coeff[0]);
phwcfg->siggaus0 = CLIP(tmp, 0, 0x3f);
tmp = (int)(pdyn->hiMd.hw_btnrT_SigmaIdxPreFilt_coeff[1]);
phwcfg->siggaus1 = CLIP(tmp, 0, 0x3f);
tmp = (int)(pdyn->hiMd.hw_btnrT_SigmaIdxPreFilt_coeff[2]);
phwcfg->siggaus2 = CLIP(tmp, 0, 0x3f);
tmp = (int)(pdyn->hiMd.hw_btnrT_SigmaIdxPreFilt_coeff[3]);
phwcfg->siggaus3 = CLIP(tmp, 0, 0x3f);
phwcfg->hidif_th = 0xffff;
return;
}