diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h index 9542468dc19803bc20588b1cc52bdd453bcea232..e5048550991b96f292533f33104543a375088acf 100644 --- a/source/Lib/CommonLib/CommonDef.h +++ b/source/Lib/CommonLib/CommonDef.h @@ -1164,7 +1164,6 @@ static const int MAX_RPR_SWITCHING_ORDER_LIST_SIZE = 32; /// max n static const int NTAPS_BILINEAR = 2; ///< Number of taps for bilinear filter #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS static const int NTAPS_LUMA_IBC = 8; ///< Number of taps for IBC luma filter -static const int NTAPS_ALT_LUMA_IBC = 4; ///< Number of taps for alternative IBC luma filter #endif #if INTER_RM_SIZE_CONSTRAINTS diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp index 3fa44dff0c4d63be957e256019748b3403323554..56183d8827f9816e565b2fbc07c9456b33d37413 100644 --- a/source/Lib/CommonLib/InterPrediction.cpp +++ b/source/Lib/CommonLib/InterPrediction.cpp @@ -2391,7 +2391,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS if(pu.cs->sps->getIBCFracFlag() && (xFrac != 0 || yFrac != 0)) { - bvValidType = PU::checkValidBv(pu, compID, dstPic.bufs[compID].width, dstPic.bufs[compID].height, mv, false, filterIdx, useAltHpelIf, true); + bvValidType = PU::checkValidBv(pu, compID, dstPic.bufs[compID].width, dstPic.bufs[compID].height, mv, false, filterIdx, true); } else #endif @@ -2437,7 +2437,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio { xPredIBCBlkPadding(pu, compID, refPic, clpRng , refBuf, offset, xFrac, yFrac - , (int)width, (int)height, filterIdx, useAltHpelIf); + , (int)width, (int)height, filterIdx); } #endif } @@ -2509,7 +2509,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio && !( (xFrac == 8 || yFrac == 8) && useAltHpelIf ) //to avoid (8,12 or 12,8 passes) && dmvrWidth == 0 //seems to conflict with DMVR, not sure //kolya #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - && !(isIBC && pu.cs->sps->getIBCFracFlag() && (filterIdx == 1 || filterIdx == -1 || filterIdx == -2)) // IBC could use non-12-tap filter + && !(isIBC && pu.cs->sps->getIBCFracFlag() && (filterIdx == 1 || filterIdx == -1)) // IBC could use non-12-tap filter #endif ) m_if.filter4x4(clpRng, (Pel*)refBuf.buf, refBuf.stride, dstBuf.buf, dstBuf.stride, xFrac, yFrac, rndRes); @@ -2544,11 +2544,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS if (isLuma(compID) && filterIdx == -1) { - vFilterSize = useAltHpelIf && yFrac == 8 ? 6 : NTAPS_LUMA_IBC; - } - if (isLuma(compID) && filterIdx == -2) - { - vFilterSize = useAltHpelIf && yFrac == 8 ? 6 : NTAPS_ALT_LUMA_IBC; + vFilterSize = NTAPS_LUMA_IBC; } if (isChroma(compID) && filterIdx == 1 && isIBC && pu.cs->sps->getIBCFracFlag()) { @@ -2805,7 +2801,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS void InterPrediction::xPredIBCBlkPadding(const PredictionUnit& pu, ComponentID compID, const Picture* refPic, const ClpRng& clpRng , CPelBuf& refBufBeforePadding, const Position& refOffsetByIntBv, int xFrac, int yFrac - , int width, int height, int filterIdx, bool& useAltHpelIf) + , int width, int height, int filterIdx) { Position offset = refOffsetByIntBv; CPelBuf& refBuf = refBufBeforePadding; @@ -2821,9 +2817,8 @@ void InterPrediction::xPredIBCBlkPadding(const PredictionUnit& pu, ComponentID c if (isLuma(compID)) { int filterTap = filterIdx == 1 ? 2 : NTAPS_LUMA_IBC; - useAltHpelIf &= (filterIdx == 0); - xFilterTap = useAltHpelIf && xFrac == 8 ? 6 : filterTap; - yFilterTap = useAltHpelIf && yFrac == 8 ? 6 : filterTap; + xFilterTap = filterTap; + yFilterTap = filterTap; } else { @@ -7854,7 +7849,7 @@ void InterPrediction::sortIbcMergeMbvdCandidates(PredictionUnit &pu, MergeCtx& #endif #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - uint32_t bvValidType = PU::checkValidBvPU(pu, COMPONENT_Y, pu.mv[0], true, 0, pu.cu->imv == IMV_HPEL); + uint32_t bvValidType = PU::checkValidBvPU(pu, COMPONENT_Y, pu.mv[0], true, 0); if (bvValidType == IBC_BV_INVALID) #else if (!PU::searchBv(pu, cuPelX, cuPelY, roiWidth, roiHeight, picWidth, picHeight, xPred, yPred, lcuWidth)) // not valid bv derived @@ -15706,7 +15701,7 @@ PelBuf TplMatchingCtrl::xGetRefTemplate(const PredictionUnit& curPu, const Pictu tempBv += _mv; int filterIdx = 1; - if (PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, roiHeight, tempBv, false, filterIdx, m_cu.imv == IMV_HPEL, false, true) != IBC_BV_VALID) + if (PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, roiHeight, tempBv, false, filterIdx, false, true) != IBC_BV_VALID) { return PelBuf(); } @@ -15939,7 +15934,6 @@ void TplMatchingCtrl::xRefineMvSearch(int maxSearchRounds, int searchStepShift) #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS const int roiWidth = m_pu.lwidth(); const int roiHeight = m_pu.lheight(); - const bool altIfHPel = m_cu.imv == IMV_HPEL; const int filterIdx = 1; #else const int cuPelX = m_pu.lx(); @@ -15972,9 +15966,9 @@ void TplMatchingCtrl::xRefineMvSearch(int maxSearchRounds, int searchStepShift) if( CU::isIBC(m_cu) ) { #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - if (PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, roiHeight, mvCand, false, 0, altIfHPel, false, true) != IBC_BV_VALID - || (m_curTplAbove.buf != nullptr && PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, tplSize, mvCand - Mv(0, (tplSize << MV_FRACTIONAL_BITS_INTERNAL)), false, filterIdx, altIfHPel, false, true) != IBC_BV_VALID) - || (m_curTplLeft.buf != nullptr && PU::checkValidBv(m_pu, COMPONENT_Y, tplSize, roiHeight, mvCand - Mv((tplSize << MV_FRACTIONAL_BITS_INTERNAL), 0), false, filterIdx, altIfHPel, false, true) != IBC_BV_VALID)) + if (PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, roiHeight, mvCand, false, 0, false, true) != IBC_BV_VALID + || (m_curTplAbove.buf != nullptr && PU::checkValidBv(m_pu, COMPONENT_Y, roiWidth, tplSize, mvCand - Mv(0, (tplSize << MV_FRACTIONAL_BITS_INTERNAL)), false, filterIdx, false, true) != IBC_BV_VALID) + || (m_curTplLeft.buf != nullptr && PU::checkValidBv(m_pu, COMPONENT_Y, tplSize, roiHeight, mvCand - Mv((tplSize << MV_FRACTIONAL_BITS_INTERNAL), 0), false, filterIdx, false, true) != IBC_BV_VALID)) #else Mv tempBv = mvCand; tempBv.changePrecision(MV_PRECISION_INTERNAL, MV_PRECISION_INT); @@ -23482,13 +23476,12 @@ void InterPrediction::deriveMVDcandAffine(const PredictionUnit& pu, RefPicList e bool res = true; #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS int filterIdx = 1; // Aligned with TMP's setting - bool useAltHPleIF = pu.cu->imv == IMV_HPEL; #endif if (doBoundaryCheck) { #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - res = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), (int)pu.lheight(), cMvTest, false, 0, useAltHPleIF, false, true) == IBC_BV_VALID; + res = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), (int)pu.lheight(), cMvTest, false, 0, false, true) == IBC_BV_VALID; #else res = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, pu.lwidth(), pu.lheight(), picWidth, picHeight, xPred, yPred, lcuWidth); #endif @@ -23503,9 +23496,9 @@ void InterPrediction::deriveMVDcandAffine(const PredictionUnit& pu, RefPicList e { #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS Mv cMvTemp(cMvTest.hor, cMvTest.ver - (1 << MV_FRACTIONAL_BITS_INTERNAL)); - useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; cMvTemp.set(cMvTest.hor + (pu.lwidth() << MV_FRACTIONAL_BITS_INTERNAL), cMvTest.ver); - useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; #else useTop = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, pu.lwidth(), 1, picWidth, picHeight, xPred, yPred, lcuWidth); xPred += pu.lwidth(); //at least, template size of 1 should be available @@ -23518,9 +23511,9 @@ void InterPrediction::deriveMVDcandAffine(const PredictionUnit& pu, RefPicList e { #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS Mv cMvTemp(cMvTest.hor - (1 << MV_FRACTIONAL_BITS_INTERNAL), cMvTest.ver); - useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; cMvTemp.set(cMvTest.hor, cMvTest.ver + (pu.lheight() << MV_FRACTIONAL_BITS_INTERNAL)); - useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; #else useLeft = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, 1, pu.lheight(), picWidth, picHeight, xPred, yPred, lcuWidth); yPred += pu.lheight(); //at least, template size of 1 should be available @@ -23531,9 +23524,9 @@ void InterPrediction::deriveMVDcandAffine(const PredictionUnit& pu, RefPicList e { #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS Mv cMvTemp(cMvTest.hor - (1 << MV_FRACTIONAL_BITS_INTERNAL), cMvTest.ver); - useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; cMvTemp.set(cMvTest.hor, cMvTest.ver - (1 << MV_FRACTIONAL_BITS_INTERNAL)); - useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; #else useLeft = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, 1, pu.lheight(), picWidth, picHeight, xPred - 1, yPred, lcuWidth); useTop = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, pu.lwidth(), 1, picWidth, picHeight, xPred, yPred - 1, lcuWidth); @@ -23543,9 +23536,9 @@ void InterPrediction::deriveMVDcandAffine(const PredictionUnit& pu, RefPicList e #else #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS Mv cMvTemp(cMvTest.hor - (1 << MV_FRACTIONAL_BITS_INTERNAL), cMvTest.ver); - useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useLeft = PU::checkValidBv(pu, COMPONENT_Y, 1, (int)pu.lheight(), cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; cMvTemp.set(cMvTest.hor, cMvTest.ver - (1 << MV_FRACTIONAL_BITS_INTERNAL)); - useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, useAltHPleIF, false, true) == IBC_BV_VALID; + useTop = PU::checkValidBv(pu, COMPONENT_Y, (int)pu.lwidth(), 1, cMvTemp, false, filterIdx, false, true) == IBC_BV_VALID; #else useLeft = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, 1, pu.lheight(), picWidth, picHeight, xPred - 1, yPred, lcuWidth); useTop = PU::searchBv(pu, pu.lumaPos().x, pu.lumaPos().y, pu.lwidth(), 1, picWidth, picHeight, xPred, yPred - 1, lcuWidth); diff --git a/source/Lib/CommonLib/InterPrediction.h b/source/Lib/CommonLib/InterPrediction.h index 4c210a07fbb39ad09fce549cac7c79ee27ccec70..f92af79044dc4dc66b0ea500c151e51638dc274b 100644 --- a/source/Lib/CommonLib/InterPrediction.h +++ b/source/Lib/CommonLib/InterPrediction.h @@ -367,7 +367,7 @@ protected: #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS void xPredIBCBlkPadding (const PredictionUnit& pu, ComponentID compID, const Picture* refPic, const ClpRng& clpRng , CPelBuf& refBufBeforePadding, const Position& refOffsetByIntBv, int xFrac, int yFrac - , int width, int height, int filterIdx, bool& useAltHpelIf); + , int width, int height, int filterIdx); #endif void xAddBIOAvg4 (const Pel* src0, int src0Stride, const Pel* src1, int src1Stride, Pel *dst, int dstStride, const Pel *gradX0, const Pel *gradX1, const Pel *gradY0, const Pel*gradY1, int gradStride, int width, int height, int tmpx, int tmpy, int shift, int offset, const ClpRng& clpRng); diff --git a/source/Lib/CommonLib/InterpolationFilter.cpp b/source/Lib/CommonLib/InterpolationFilter.cpp index 9ea4dd65a068588e5c1b3a47e32fda71d6b5af40..04941ec461deb5655b601f0c8a93848be1f22b90 100644 --- a/source/Lib/CommonLib/InterpolationFilter.cpp +++ b/source/Lib/CommonLib/InterpolationFilter.cpp @@ -1144,14 +1144,6 @@ const TFilterCoeff InterpolationFilter::m_bilinearFilterChroma[CHROMA_INTERPOLAT { _ADJIF_( 2), _ADJIF_(62), }, }; -const TFilterCoeff InterpolationFilter::m_lumaIBCFilter[4][NTAPS_ALT_LUMA_IBC] = -{ - { _ADJIF_( 0), _ADJIF_(64), _ADJIF_( 0), _ADJIF_( 0), }, - { _ADJIF_(-4), _ADJIF_(54), _ADJIF_(16), _ADJIF_(-2), }, - { _ADJIF_(-4), _ADJIF_(36), _ADJIF_(36), _ADJIF_(-4), }, - { _ADJIF_(-2), _ADJIF_(16), _ADJIF_(54), _ADJIF_(-4), }, -}; - #undef _ADJIF_ #endif @@ -2016,11 +2008,6 @@ void InterpolationFilter::filterHor(const ComponentID compID, Pel const *src, in { filterHor<NTAPS_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac], biMCForDMVR); } - else if (nFilterIdx == -2) - { - frac >>= MV_FRACTIONAL_BITS_DIFF; - filterHor<NTAPS_ALT_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaIBCFilter[frac], biMCForDMVR); - } #endif #if !AFFINE_RM_CONSTRAINTS_AND_OPT else if ((width == 4 && height == 4) || (width == 4 && height == (4 + NTAPS_LUMA(0) - 1))) @@ -2071,11 +2058,6 @@ void InterpolationFilter::filterHor(const ComponentID compID, Pel const *src, in { filterHor<NTAPS_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac], biMCForDMVR); } - else if (nFilterIdx == -2) - { - frac >>= MV_FRACTIONAL_BITS_DIFF; - filterHor<NTAPS_ALT_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaIBCFilter[frac], biMCForDMVR); - } #endif #if !AFFINE_RM_CONSTRAINTS_AND_OPT else if( ( width == 4 && height == 4 ) || ( width == 4 && height == ( 4 + NTAPS_LUMA - 1 ) ) ) @@ -2210,11 +2192,6 @@ void InterpolationFilter::filterVer(const ComponentID compID, Pel const *src, in { filterVer<NTAPS_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac], biMCForDMVR); } - else if (nFilterIdx == -2) - { - frac >>= MV_FRACTIONAL_BITS_DIFF; - filterVer<NTAPS_ALT_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaIBCFilter[frac], biMCForDMVR); - } #endif #if !AFFINE_RM_CONSTRAINTS_AND_OPT else if (width == 4 && height == 4) @@ -2265,11 +2242,6 @@ void InterpolationFilter::filterVer(const ComponentID compID, Pel const *src, in { filterVer<NTAPS_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac], biMCForDMVR); } - else if (nFilterIdx == -2) - { - frac >>= MV_FRACTIONAL_BITS_DIFF; - filterVer<NTAPS_ALT_LUMA_IBC>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaIBCFilter[frac], biMCForDMVR); - } #endif #if !AFFINE_RM_CONSTRAINTS_AND_OPT else if( width == 4 && height == 4 ) diff --git a/source/Lib/CommonLib/InterpolationFilter.h b/source/Lib/CommonLib/InterpolationFilter.h index acc4570f9d0bc68bea48d8e8eb96206f5ba5f033..59b7619f2dd1ab7c4fc749b7995831c70da535f9 100644 --- a/source/Lib/CommonLib/InterpolationFilter.h +++ b/source/Lib/CommonLib/InterpolationFilter.h @@ -131,7 +131,6 @@ private: #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS public: static const TFilterCoeff m_bilinearFilterChroma[CHROMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS][NTAPS_BILINEAR]; ///< bilinear filter taps for chroma - static const TFilterCoeff m_lumaIBCFilter[4][NTAPS_ALT_LUMA_IBC]; ///< alternative IBC luma filter taps #endif public: template<bool isFirst, bool isLast> diff --git a/source/Lib/CommonLib/IntraPrediction.cpp b/source/Lib/CommonLib/IntraPrediction.cpp index 165b1eed042ad977c21c8e0c17150b77a989ed16..fc6dcf79b9d79e91cbeb019263cdf7f5dfba5061 100644 --- a/source/Lib/CommonLib/IntraPrediction.cpp +++ b/source/Lib/CommonLib/IntraPrediction.cpp @@ -1988,7 +1988,7 @@ Mv IntraPrediction::refineChromaBv(const ComponentID compId, const PredictionUni } #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - int filterIdx = 1; + int filterIdx = 0; std::vector<Mv> chromaBvList; chromaBvList.push_back(pu.cs->sps->getIBCFracFlag() ? pu.mv[0] : Mv((pu.mv[0].hor >> bvShiftHor) << bvShiftHor, (pu.mv[0].ver >> bvShiftVer) << bvShiftVer)); #else diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index 480bd7d0b0b5a5d174a7c45cdb5eaae23b7e8f2b..534516a33baadb9526d7791e74ae22907b4c9ce4 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -3466,7 +3466,7 @@ bool PU::checkIsChromaBvCandidateValid(const PredictionUnit &pu #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS int roiWidth = (isRefTemplate && !isRefAbove) ? DBV_TEMPLATE_SIZE : pu.Cb().width; int roiHeight = (isRefTemplate && isRefAbove ) ? DBV_TEMPLATE_SIZE : pu.Cb().height; - uint32_t validType = checkValidBv(pu, COMPONENT_Cb, roiWidth, roiHeight, mv, true, filterIdx, false); + uint32_t validType = checkValidBv(pu, COMPONENT_Cb, roiWidth, roiHeight, mv, true, filterIdx); return validType != IBC_BV_INVALID; #else const int cuPelX = pu.Cb().x; @@ -4956,7 +4956,7 @@ bool PU::checkIsIBCCandidateValid(const PredictionUnit& pu #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS int roiWidth = (isRefTemplate && !isRefAbove) ? AML_MERGE_TEMPLATE_SIZE : pu.lwidth(); int roiHeight = (isRefTemplate && isRefAbove) ? AML_MERGE_TEMPLATE_SIZE : pu.lheight(); - uint32_t validType = checkValidBv(pu, COMPONENT_Y, roiWidth, roiHeight, miNeighbor.mv[REF_PIC_LIST_0], true, filterIdx, miNeighbor.useAltHpelIf); + uint32_t validType = checkValidBv(pu, COMPONENT_Y, roiWidth, roiHeight, miNeighbor.mv[REF_PIC_LIST_0], true, filterIdx); return validType != IBC_BV_INVALID; #else Mv bv = miNeighbor.mv[REF_PIC_LIST_0]; @@ -4985,12 +4985,12 @@ bool PU::checkIsIBCCandidateValid(const PredictionUnit& pu #if JVET_Y0058_IBC_LIST_MODIFY || JVET_Z0084_IBC_TM #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS -uint32_t PU::checkValidBvPU(const PredictionUnit& pu, ComponentID compID, Mv mv, bool ignoreFracMv, int filterIdx, bool useAltHPelIF) +uint32_t PU::checkValidBvPU(const PredictionUnit& pu, ComponentID compID, Mv mv, bool ignoreFracMv, int filterIdx) { - return PU::checkValidBv(pu, compID, (int)pu.blocks[compID].width, (int)pu.blocks[compID].height, mv, ignoreFracMv, filterIdx, useAltHPelIF); + return PU::checkValidBv(pu, compID, (int)pu.blocks[compID].width, (int)pu.blocks[compID].height, mv, ignoreFracMv, filterIdx); } -uint32_t PU::checkValidBv(const PredictionUnit& pu, ComponentID compID, int compWidth, int compHeight, Mv mv, bool ignoreFracMv, int filterIdx, bool useAltHPelIF +uint32_t PU::checkValidBv(const PredictionUnit& pu, ComponentID compID, int compWidth, int compHeight, Mv mv, bool ignoreFracMv, int filterIdx , bool isFinalMC , bool checkAllRefValid ) @@ -5028,11 +5028,9 @@ uint32_t PU::checkValidBv(const PredictionUnit& pu, ComponentID compID, int comp if (compID == COMPONENT_Y) { - CHECK(useAltHPelIF, "IBC does not support IMV_HPEL"); - int filterTap = filterIdx == 1 ? 2 : NTAPS_LUMA_IBC; - xFilterTap = xFrac == 0 ? 0 : (useAltHPelIF && xFrac == 8 ? 6 : filterTap); - yFilterTap = yFrac == 0 ? 0 : (useAltHPelIF && yFrac == 8 ? 6 : filterTap); + xFilterTap = xFrac == 0 ? 0 : filterTap; + yFilterTap = yFrac == 0 ? 0 : filterTap; } else { diff --git a/source/Lib/CommonLib/UnitTools.h b/source/Lib/CommonLib/UnitTools.h index 6e4e696003d36b8e918631987300eac5fff9c6bc..67e4a331860031ec9b34b3a50b534acfae78e168 100644 --- a/source/Lib/CommonLib/UnitTools.h +++ b/source/Lib/CommonLib/UnitTools.h @@ -285,8 +285,8 @@ namespace PU ); #endif #if JVET_AD0208_IBC_ADAPT_FOR_CAM_CAPTURED_CONTENTS - uint32_t checkValidBvPU (const PredictionUnit& pu, ComponentID compID, Mv mv, bool ignoreFracMv = false, int filterIdx = 0, bool useAltHPelIF = false); - uint32_t checkValidBv (const PredictionUnit& pu, ComponentID compID, int compWidth, int compHeight, Mv mv, bool ignoreFracMv = false, int filterIdx = 0, bool useAltHPelIF = false + uint32_t checkValidBvPU (const PredictionUnit& pu, ComponentID compID, Mv mv, bool ignoreFracMv = false, int filterIdx = 0); + uint32_t checkValidBv (const PredictionUnit& pu, ComponentID compID, int compWidth, int compHeight, Mv mv, bool ignoreFracMv = false, int filterIdx = 0 , bool isFinalMC = false // this flag is for non-normative SW speedup , bool checkAllRefValid = false ); diff --git a/source/Lib/EncoderLib/InterSearch.cpp b/source/Lib/EncoderLib/InterSearch.cpp index f2c1110c090f034bfb4c4650c114c5b82d792090..912cae13b7496f3fc70b34666d623e955b0f3f05 100644 --- a/source/Lib/EncoderLib/InterSearch.cpp +++ b/source/Lib/EncoderLib/InterSearch.cpp @@ -3783,7 +3783,7 @@ Distortion InterSearch::xPredIBCFracPelSearch(PredictionUnit& pu for (int j = 0; j < numOffset; ++j) { pu.mv[0] = centerMv + mvOffset[j]; - uint32_t validType = PU::checkValidBvPU(pu, COMPONENT_Y, pu.mv[0], true, 0, imv == IMV_HPEL); + uint32_t validType = PU::checkValidBvPU(pu, COMPONENT_Y, pu.mv[0], true, 0); if (validType == IBC_BV_INVALID) { continue;