From a4579e5867a662b772a90b8a6a086fdd47229840 Mon Sep 17 00:00:00 2001 From: Brian Heng <brian.heng@broadcom.com> Date: Wed, 23 Oct 2019 15:11:06 -0700 Subject: [PATCH] Fix for Ticket #569 - RPR - Disable clipping of unscaled RPR motion vectors. --- source/Lib/CommonLib/InterPrediction.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp index 3d622fdb50..5507916c4e 100644 --- a/source/Lib/CommonLib/InterPrediction.cpp +++ b/source/Lib/CommonLib/InterPrediction.cpp @@ -419,7 +419,10 @@ void InterPrediction::xPredInterUni(const PredictionUnit& pu, const RefPicList& if( !pu.cu->affine ) { - clipMv( mv[0], pu.cu->lumaPos(), pu.cu->lumaSize(), sps, *pu.cs->pps ); + if( pu.cu->slice->getScalingRatio( eRefPicList, iRefIdx ) == SCALE_1X ) + { + clipMv( mv[0], pu.cu->lumaPos(), pu.cu->lumaSize(), sps, *pu.cs->pps ); + } } for( uint32_t comp = COMPONENT_Y; comp < pcYuvPred.bufs.size() && comp <= m_maxCompIDToPred; comp++ ) @@ -998,8 +1001,11 @@ void InterPrediction::xPredAffineBlk( const ComponentID& compID, const Predictio { wrapRef = false; m_storedMv[h / AFFINE_MIN_BLOCK_SIZE * MVBUFFER_SIZE + w / AFFINE_MIN_BLOCK_SIZE].set(iMvScaleTmpHor, iMvScaleTmpVer); - iMvScaleTmpHor = std::min<int>(iHorMax, std::max<int>(iHorMin, iMvScaleTmpHor)); - iMvScaleTmpVer = std::min<int>(iVerMax, std::max<int>(iVerMin, iMvScaleTmpVer)); + if( scalingRatio == SCALE_1X ) + { + iMvScaleTmpHor = std::min<int>(iHorMax, std::max<int>(iHorMin, iMvScaleTmpHor)); + iMvScaleTmpVer = std::min<int>(iVerMax, std::max<int>(iVerMin, iMvScaleTmpVer)); + } } } else @@ -1014,8 +1020,11 @@ void InterPrediction::xPredAffineBlk( const ComponentID& compID, const Predictio else { wrapRef = false; - curMv.hor = std::min<int>(iHorMax, std::max<int>(iHorMin, curMv.hor)); - curMv.ver = std::min<int>(iVerMax, std::max<int>(iVerMin, curMv.ver)); + if( scalingRatio == SCALE_1X ) + { + curMv.hor = std::min<int>(iHorMax, std::max<int>(iHorMin, curMv.hor)); + curMv.ver = std::min<int>(iVerMax, std::max<int>(iVerMin, curMv.ver)); + } } iMvScaleTmpHor = curMv.hor; iMvScaleTmpVer = curMv.ver; -- GitLab