From 0783ed2d06991e440c1754283c4778dedf1d5da8 Mon Sep 17 00:00:00 2001 From: Xiang Li <xlxiangli@tencent.com> Date: Mon, 24 Dec 2018 15:29:22 -0800 Subject: [PATCH] Use coan to remove REMOVE_MV_ADAPT_PREC --- source/App/EncoderApp/EncApp.cpp | 3 - source/App/EncoderApp/EncAppCfg.cpp | 16 -- source/App/EncoderApp/EncAppCfg.h | 3 - source/Lib/CommonLib/ContextModelling.cpp | 65 ------- source/Lib/CommonLib/InterPrediction.cpp | 17 -- source/Lib/CommonLib/LoopFilter.cpp | 20 -- source/Lib/CommonLib/Mv.cpp | 9 - source/Lib/CommonLib/Mv.h | 104 ---------- source/Lib/CommonLib/RdCost.h | 6 - source/Lib/CommonLib/Slice.cpp | 3 - source/Lib/CommonLib/Slice.h | 7 - source/Lib/CommonLib/TypeDef.h | 1 - source/Lib/CommonLib/UnitTools.cpp | 178 ------------------ source/Lib/CommonLib/UnitTools.h | 2 - .../Lib/CommonLib/dtrace_blockstatistics.cpp | 56 ------ source/Lib/DecoderLib/DecCu.cpp | 16 -- source/Lib/DecoderLib/VLCReader.cpp | 3 - source/Lib/EncoderLib/CABACWriter.cpp | 9 - source/Lib/EncoderLib/EncCfg.h | 7 - source/Lib/EncoderLib/EncLib.cpp | 3 - source/Lib/EncoderLib/InterSearch.cpp | 161 ---------------- source/Lib/EncoderLib/VLCWriter.cpp | 3 - 22 files changed, 692 deletions(-) diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index ceddaf7db..297cd18ad 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -225,9 +225,6 @@ void EncApp::xInitLibCfg() #endif m_cEncLib.setAffine ( m_Affine ); m_cEncLib.setAffineType ( m_AffineType ); -#if !REMOVE_MV_ADAPT_PREC - m_cEncLib.setHighPrecisionMv (m_highPrecisionMv); -#endif #if JVET_L0256_BIO m_cEncLib.setBIO (m_BIO); #endif diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index bf8b61851..4a9b98357 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -817,12 +817,6 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) ("SubPuMvp", m_SubPuMvpMode, 0, "Enable Sub-PU temporal motion vector prediction (0:off, 1:ATMVP, 2:STMVP, 3:ATMVP+STMVP) [default: off]") #if !JVET_L0198_L0468_L0104_ATMVP_8x8SUB_BLOCK ("SubPuMvpLog2Size", m_SubPuMvpLog2Size, 2u, "Sub-PU TMVP size index: 2^n") -#endif -#if !REMOVE_MV_ADAPT_PREC - ("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]") -#endif -#if !REMOVE_MV_ADAPT_PREC - ("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]") #endif ("Affine", m_Affine, false, "Enable affine prediction (0:off, 1:on) [default: off]") ("AffineType", m_AffineType, true, "Enable affine type prediction (0:off, 1:on) [default: on]" ) @@ -1941,10 +1935,6 @@ bool EncAppCfg::xCheckParameter() xConfirmPara( m_LMChroma, "LMChroma only allowed with NEXT profile" ); xConfirmPara( m_LargeCTU, "Large CTU is only allowed with NEXT profile" ); xConfirmPara( m_SubPuMvpMode != 0, "Sub-PU motion vector prediction is only allowed with NEXT profile" ); -#if !REMOVE_MV_ADAPT_PREC - xConfirmPara( m_highPrecisionMv, "High precision MV for temporal merging can only be used with NEXT profile" ); - xConfirmPara( m_Affine, "Affine is only allowed with NEXT profile" ); -#endif #if JVET_L0256_BIO xConfirmPara( m_BIO, "BIO only allowed with NEXT profile" ); #endif @@ -1984,9 +1974,6 @@ bool EncAppCfg::xCheckParameter() #endif } -#if !REMOVE_MV_ADAPT_PREC - xConfirmPara(m_Affine && !m_highPrecisionMv, "Affine is not yet implemented for HighPrecMv off."); -#endif } #if JVET_L0231_WRAPAROUND @@ -3147,9 +3134,6 @@ void EncAppCfg::xPrintParameter() msg( VERBOSE, "DualITree:%d ", m_dualTree ); msg( VERBOSE, "LargeCTU:%d ", m_LargeCTU ); msg( VERBOSE, "IMV:%d ", m_ImvMode ); -#if !REMOVE_MV_ADAPT_PREC - msg(VERBOSE, "HighPrecMv:%d ", m_highPrecisionMv); -#endif #if JVET_L0256_BIO msg( VERBOSE, "BIO:%d ", m_BIO ); #endif diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 6737b1356..dc36ab66c 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -212,9 +212,6 @@ protected: #endif bool m_Affine; bool m_AffineType; -#if !REMOVE_MV_ADAPT_PREC - bool m_highPrecisionMv; -#endif #if JVET_L0256_BIO bool m_BIO; #endif diff --git a/source/Lib/CommonLib/ContextModelling.cpp b/source/Lib/CommonLib/ContextModelling.cpp index f61b32e7d..6acb2c27c 100644 --- a/source/Lib/CommonLib/ContextModelling.cpp +++ b/source/Lib/CommonLib/ContextModelling.cpp @@ -403,10 +403,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) fPosPosition = tempIdx - fPosStep * (4); const int offset = refMvdCands[fPosStep]; -#if !REMOVE_MV_ADAPT_PREC - const int highPrecList0 = mmvdBaseMv[fPosBaseIdx][0].mv.highPrec; - const int highPrecList1 = mmvdBaseMv[fPosBaseIdx][1].mv.highPrec; -#endif const int refList0 = mmvdBaseMv[fPosBaseIdx][0].refIdx; const int refList1 = mmvdBaseMv[fPosBaseIdx][1].refIdx; @@ -421,7 +417,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) { refSign = -1; } -#if REMOVE_MV_ADAPT_PREC if (fPosPosition == 0) { tempMv[0] = Mv(offset, 0); @@ -442,28 +437,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) tempMv[0] = Mv(0, -offset); tempMv[1] = Mv(0, -offset * refSign); } -#else - if (fPosPosition == 0) - { - tempMv[0] = Mv(offset, 0, highPrecList0); - tempMv[1] = Mv(offset * refSign, 0, highPrecList1); - } - else if (fPosPosition == 1) - { - tempMv[0] = Mv(-offset, 0, highPrecList0); - tempMv[1] = Mv(-offset * refSign, 0, highPrecList1); - } - else if (fPosPosition == 2) - { - tempMv[0] = Mv(0, offset, highPrecList0); - tempMv[1] = Mv(0, offset * refSign, highPrecList1); - } - else - { - tempMv[0] = Mv(0, -offset, highPrecList0); - tempMv[1] = Mv(0, -offset * refSign, highPrecList1); - } -#endif if (abs(poc1 - currPoc) > abs(poc0 - currPoc)) { const int scale = PU::getDistScaleFactor(currPoc, poc0, currPoc, poc1); @@ -489,7 +462,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) } else if (refList0 != -1) { -#if REMOVE_MV_ADAPT_PREC if (fPosPosition == 0) { tempMv[0] = Mv(offset, 0); @@ -506,24 +478,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) { tempMv[0] = Mv(0, -offset); } -#else - if (fPosPosition == 0) - { - tempMv[0] = Mv(offset, 0, highPrecList0); - } - else if (fPosPosition == 1) - { - tempMv[0] = Mv(-offset, 0, highPrecList0); - } - else if (fPosPosition == 2) - { - tempMv[0] = Mv(0, offset, highPrecList0); - } - else - { - tempMv[0] = Mv(0, -offset, highPrecList0); - } -#endif pu.interDir = 1; pu.mv[REF_PIC_LIST_0] = mmvdBaseMv[fPosBaseIdx][0].mv + tempMv[0]; pu.refIdx[REF_PIC_LIST_0] = refList0; @@ -532,7 +486,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) } else if (refList1 != -1) { -#if REMOVE_MV_ADAPT_PREC if (fPosPosition == 0) { tempMv[1] = Mv(offset, 0); @@ -549,24 +502,6 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx) { tempMv[1] = Mv(0, -offset); } -#else - if (fPosPosition == 0) - { - tempMv[1] = Mv(offset, 0, highPrecList1); - } - else if (fPosPosition == 1) - { - tempMv[1] = Mv(-offset, 0, highPrecList1); - } - else if (fPosPosition == 2) - { - tempMv[1] = Mv(0, offset, highPrecList1); - } - else - { - tempMv[1] = Mv(0, -offset, highPrecList1); - } -#endif pu.interDir = 2; pu.mv[REF_PIC_LIST_0] = Mv(0, 0); pu.refIdx[REF_PIC_LIST_0] = -1; diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp index aecfc905c..7f8908134 100644 --- a/source/Lib/CommonLib/InterPrediction.cpp +++ b/source/Lib/CommonLib/InterPrediction.cpp @@ -639,15 +639,7 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio int iAddPrecShift = 0; -#if !REMOVE_MV_ADAPT_PREC - if (_mv.highPrec) - { - CHECKD(!pu.cs->sps->getSpsNext().getUseHighPrecMv(), "Found a high-precision motion vector, but the high-precision MV extension is disabled!"); -#endif iAddPrecShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#if !REMOVE_MV_ADAPT_PREC - } -#endif int shiftHor = 2 + iAddPrecShift + ::getComponentScaleX(compID, chFmt); int shiftVer = 2 + iAddPrecShift + ::getComponentScaleY(compID, chFmt); @@ -663,10 +655,6 @@ void InterPrediction::xPredInterBlk ( const ComponentID& compID, const Predictio #endif xFrac <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE - iAddPrecShift; yFrac <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE - iAddPrecShift; -#if !REMOVE_MV_ADAPT_PREC - CHECKD(!pu.cs->sps->getSpsNext().getUseHighPrecMv() && ((xFrac & 3) != 0), "Invalid fraction"); - CHECKD(!pu.cs->sps->getSpsNext().getUseHighPrecMv() && ((yFrac & 3) != 0), "Invalid fraction"); -#endif PelBuf &dstBuf = dstPic.bufs[compID]; unsigned width = dstBuf.width; @@ -781,11 +769,6 @@ void InterPrediction::xPredAffineBlk( const ComponentID& compID, const Predictio Mv mvRT =_mv[1]; Mv mvLB =_mv[2]; -#if !REMOVE_MV_ADAPT_PREC - mvLT.setHighPrec(); - mvRT.setHighPrec(); - mvLB.setHighPrec(); -#endif // get affine sub-block width and height const int width = pu.Y().width; diff --git a/source/Lib/CommonLib/LoopFilter.cpp b/source/Lib/CommonLib/LoopFilter.cpp index d9ed51017..70c9316b3 100644 --- a/source/Lib/CommonLib/LoopFilter.cpp +++ b/source/Lib/CommonLib/LoopFilter.cpp @@ -486,18 +486,7 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De if( 0 <= miQ.refIdx[1] ) { mvQ1 = miQ.mv[1]; } int nThreshold = 4; -#if !REMOVE_MV_ADAPT_PREC - if (cu.cs->sps->getSpsNext().getUseHighPrecMv()) - { - mvP0.setHighPrec(); - mvP1.setHighPrec(); - mvQ0.setHighPrec(); - mvQ1.setHighPrec(); -#endif nThreshold = 4 << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#if !REMOVE_MV_ADAPT_PREC - } -#endif unsigned uiBs = 0; //th can be optimized @@ -551,16 +540,7 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De Mv mvQ0 = miQ.mv[0]; int nThreshold = 4; -#if !REMOVE_MV_ADAPT_PREC - if (cu.cs->sps->getSpsNext().getUseHighPrecMv()) - { - mvP0.setHighPrec(); - mvQ0.setHighPrec(); -#endif nThreshold = 4 << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#if !REMOVE_MV_ADAPT_PREC - } -#endif return ( ( abs( mvQ0.getHor() - mvP0.getHor() ) >= nThreshold ) || ( abs( mvQ0.getVer() - mvP0.getVer() ) >= nThreshold ) ) ? 1 : 0; } diff --git a/source/Lib/CommonLib/Mv.cpp b/source/Lib/CommonLib/Mv.cpp index 81e262407..413815b13 100644 --- a/source/Lib/CommonLib/Mv.cpp +++ b/source/Lib/CommonLib/Mv.cpp @@ -43,9 +43,6 @@ void roundMV( Mv & rMV, unsigned imvShift ) { CHECK( imvShift == 0, "roundMV called for imvShift=0" ); -#if !REMOVE_MV_ADAPT_PREC - if (rMV.highPrec) imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif int offset = 1 << ( imvShift - 1 ); #if JVET_L0377_AMVR_ROUNDING_ALIGN rMV.setHor(rMV.getHor() >= 0 ? ((rMV.getHor() + offset) >> imvShift) << imvShift : -(((-rMV.getHor() + offset) >> imvShift)) << imvShift); @@ -69,14 +66,8 @@ void clipMv( Mv& rcMv, const Position& pos, #endif const SPS& sps ) { -#if !REMOVE_MV_ADAPT_PREC - int iMvShift = 2 + (rcMv.highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0); -#else int iMvShift = 2; -#endif -#if REMOVE_MV_ADAPT_PREC iMvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif int iOffset = 8; int iHorMax = ( sps.getPicWidthInLumaSamples() + iOffset - ( int ) pos.x - 1 ) << iMvShift; int iHorMin = ( -( int ) sps.getMaxCUWidth() - iOffset - ( int ) pos.x + 1 ) << iMvShift; diff --git a/source/Lib/CommonLib/Mv.h b/source/Lib/CommonLib/Mv.h index a1525ddc7..ec0146e4a 100644 --- a/source/Lib/CommonLib/Mv.h +++ b/source/Lib/CommonLib/Mv.h @@ -53,21 +53,13 @@ class Mv public: int hor; ///< horizontal component of motion vector int ver; ///< vertical component of motion vector -#if !REMOVE_MV_ADAPT_PREC - bool highPrec;///< true if the vector is high precision -#endif // ------------------------------------------------------------------------------------------------------------------ // constructors // ------------------------------------------------------------------------------------------------------------------ -#if !REMOVE_MV_ADAPT_PREC - Mv( ) : hor( 0 ), ver( 0 ), highPrec( false ) {} - Mv( int iHor, int iVer, bool _highPrec = false ) : hor( iHor ), ver( iVer ), highPrec( _highPrec ) {} -#else Mv( ) : hor( 0 ), ver( 0 ) {} Mv( int iHor, int iVer ) : hor( iHor ), ver( iVer ) {} -#endif // ------------------------------------------------------------------------------------------------------------------ // set @@ -93,21 +85,9 @@ public: const Mv& operator += (const Mv& _rcMv) { -#if !REMOVE_MV_ADAPT_PREC - if( highPrec == _rcMv.highPrec ) - { - hor += _rcMv.hor; - ver += _rcMv.ver; - } - else -#endif { Mv rcMv = _rcMv; -#if !REMOVE_MV_ADAPT_PREC - if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec(); - if( !highPrec && rcMv.highPrec ) setHighPrec(); -#endif hor += rcMv.hor; ver += rcMv.ver; } @@ -116,21 +96,9 @@ public: const Mv& operator-= (const Mv& _rcMv) { -#if !REMOVE_MV_ADAPT_PREC - if( highPrec == _rcMv.highPrec ) - { - hor -= _rcMv.hor; - ver -= _rcMv.ver; - } - else -#endif { Mv rcMv = _rcMv; -#if !REMOVE_MV_ADAPT_PREC - if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec(); - if( !highPrec && rcMv.highPrec ) setHighPrec(); -#endif hor -= rcMv.hor; ver -= rcMv.ver; } @@ -166,60 +134,17 @@ public: const Mv operator - ( const Mv& rcMv ) const { -#if !REMOVE_MV_ADAPT_PREC - if( rcMv.highPrec == highPrec ) - { - return Mv( hor - rcMv.hor, ver - rcMv.ver, highPrec ); - } - else - { - Mv self = *this; self.setHighPrec(); - Mv other = rcMv; other.setHighPrec(); - - return self - other; - } -#else return Mv( hor - rcMv.hor, ver - rcMv.ver ); -#endif } const Mv operator + ( const Mv& rcMv ) const { -#if !REMOVE_MV_ADAPT_PREC - if( rcMv.highPrec == highPrec ) - { - return Mv( hor + rcMv.hor, ver + rcMv.ver, highPrec ); - } - else - { - Mv self = *this; self.setHighPrec(); - Mv other = rcMv; other.setHighPrec(); - - return self + other; - } -#else return Mv( hor + rcMv.hor, ver + rcMv.ver ); -#endif } bool operator== ( const Mv& rcMv ) const { -#if !REMOVE_MV_ADAPT_PREC - if( rcMv.highPrec == highPrec ) - { - return ( hor == rcMv.hor && ver == rcMv.ver ); - } - else if( rcMv.highPrec ) - { - return ( ( hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ) == rcMv.hor && ( ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ) == rcMv.ver ); - } - else - { - return ( ( rcMv.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ) == hor && ( rcMv.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ) == ver ); - } -#else return ( hor == rcMv.hor && ver == rcMv.ver ); -#endif } bool operator!= ( const Mv& rcMv ) const @@ -231,47 +156,18 @@ public: { const int mvx = Clip3( -32768, 32767, (iScale * getHor() + 127 + (iScale * getHor() < 0)) >> 8 ); const int mvy = Clip3( -32768, 32767, (iScale * getVer() + 127 + (iScale * getVer() < 0)) >> 8 ); -#if !REMOVE_MV_ADAPT_PREC - return Mv( mvx, mvy, highPrec ); -#else return Mv( mvx, mvy ); -#endif } void roundMV2SignalPrecision() { -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); hor = hor >= 0 ? (hor + nOffset) >> nShift : -((-hor + nOffset) >> nShift); ver = ver >= 0 ? (ver + nOffset) >> nShift : -((-ver + nOffset) >> nShift); hor = hor >= 0 ? (hor) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : -((-hor) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE); ver = ver >= 0 ? (ver) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : -((-ver) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE); -#else - const bool isHP = highPrec; - setLowPrec(); - if( isHP ) setHighPrec(); -#endif - } -#if !REMOVE_MV_ADAPT_PREC - void setLowPrec() - { - if( !highPrec ) return; - const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; - const int nOffset = 1 << ( nShift - 1 ); - hor = hor >= 0 ? ( hor + nOffset ) >> nShift : -( ( -hor + nOffset ) >> nShift ); - ver = ver >= 0 ? ( ver + nOffset ) >> nShift : -( ( -ver + nOffset ) >> nShift ); - highPrec = false; } - - void setHighPrec() - { - if( highPrec ) return; - hor = hor >= 0 ? ( hor ) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : -( ( -hor ) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ); - ver = ver >= 0 ? ( ver ) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : -( ( -ver ) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE ); - highPrec = true; - } -#endif };// END CLASS DEFINITION MV #if JVET_L0293_CPR namespace std diff --git a/source/Lib/CommonLib/RdCost.h b/source/Lib/CommonLib/RdCost.h index 8e9a96bb3..129d530ca 100644 --- a/source/Lib/CommonLib/RdCost.h +++ b/source/Lib/CommonLib/RdCost.h @@ -167,12 +167,6 @@ public: void setPredictor ( const Mv& rcMv ) { m_mvPredictor = rcMv; -#if !REMOVE_MV_ADAPT_PREC - if( m_mvPredictor.highPrec ) - { - m_mvPredictor = Mv( m_mvPredictor.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE, m_mvPredictor.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE, false ); - } -#endif } void setCostScale ( int iCostScale ) { m_iCostScale = iCostScale; } Distortion getCost ( uint32_t b ) { return Distortion( m_motionLambda * b ); } diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 67a1aa130..73a819f5c 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -1779,9 +1779,6 @@ SPSNext::SPSNext( SPS& sps ) , m_LargeCTU ( false ) , m_SubPuMvp ( false ) , m_IMV ( false ) -#if !REMOVE_MV_ADAPT_PREC - , m_highPrecMv ( false ) -#endif #if JVET_L0256_BIO , m_BIO ( false ) #endif diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 71359f0f6..11674fb6c 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -803,9 +803,6 @@ private: bool m_LargeCTU; // 5 bool m_SubPuMvp; bool m_IMV; // 9 -#if !REMOVE_MV_ADAPT_PREC - bool m_highPrecMv; -#endif #if JVET_L0256_BIO bool m_BIO; #endif @@ -892,10 +889,6 @@ public: bool getUseAffine () const { return m_Affine; } void setUseAffineType ( bool b ) { m_AffineType = b; } bool getUseAffineType () const { return m_AffineType; } -#if !REMOVE_MV_ADAPT_PREC - void setUseHighPrecMv(bool b) { m_highPrecMv = b; } - bool getUseHighPrecMv() const { return m_highPrecMv; } -#endif #if JVET_L0256_BIO void setUseBIO(bool b) { m_BIO = b; } bool getUseBIO() const { return m_BIO; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 0589e0dc1..448e59a6a 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -130,7 +130,6 @@ #define REUSE_CU_RESULTS 1 -#define REMOVE_MV_ADAPT_PREC 1 // remove the high precision flag in the MV class #define JVET_L0093_SIMP_PRUNE 1 diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index fee9892d7..942d98aa4 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -1664,12 +1664,6 @@ void PU::getInterMergeCandidates( const PredictionUnit &pu, MergeCtx& mrgCtx, // average two MVs Mv avgMv = MvI; -#if !REMOVE_MV_ADAPT_PREC - if( pu.cs->sps->getSpsNext().getUseHighPrecMv() ) - { - avgMv.setHighPrec(); - } -#endif avgMv += MvJ; avgMv.setHor( avgMv.getHor() / 2 ); avgMv.setVer( avgMv.getVer() / 2 ); @@ -1691,23 +1685,11 @@ void PU::getInterMergeCandidates( const PredictionUnit &pu, MergeCtx& mrgCtx, else if( refIdxI != NOT_VALID ) { Mv singleMv = mrgCtx.mvFieldNeighbours[i * 2 + refListId].mv; -#if !REMOVE_MV_ADAPT_PREC - if( pu.cs->sps->getSpsNext().getUseHighPrecMv() ) - { - singleMv.setHighPrec(); - } -#endif mrgCtx.mvFieldNeighbours[cnt * 2 + refListId].setMvField( singleMv, refIdxI ); } else if( refIdxJ != NOT_VALID ) { Mv singleMv = mrgCtx.mvFieldNeighbours[j * 2 + refListId].mv; -#if !REMOVE_MV_ADAPT_PREC - if( pu.cs->sps->getSpsNext().getUseHighPrecMv() ) - { - singleMv.setHighPrec(); - } -#endif mrgCtx.mvFieldNeighbours[cnt * 2 + refListId].setMvField( singleMv, refIdxJ ); } } @@ -1918,25 +1900,6 @@ void PU::getInterMMVDMergeCandidates(const PredictionUnit &pu, MergeCtx& mrgCtx, int currBaseNum = 0; const uint16_t maxNumMergeCand = mrgCtx.numValidMergeCand; -#if !REMOVE_MV_ADAPT_PREC - if (pu.cu->slice->getSPS()->getSpsNext().getUseHighPrecMv()) - { - for (k = 0; k < maxNumMergeCand; k++) - { - if (mrgCtx.mrgTypeNeighbours[k] == MRG_TYPE_DEFAULT_N) - { - if ((mrgCtx.mvFieldNeighbours[(k << 1)].mv.highPrec == false) && (mrgCtx.mvFieldNeighbours[(k << 1)].refIdx >= 0)) - { - mrgCtx.mvFieldNeighbours[(k << 1)].mv.setHighPrec(); - } - if ((mrgCtx.mvFieldNeighbours[(k << 1) + 1].mv.highPrec == false) && (mrgCtx.mvFieldNeighbours[(k << 1) + 1].refIdx >= 0)) - { - mrgCtx.mvFieldNeighbours[(k << 1) + 1].mv.setHighPrec(); - } - } - } - } -#endif for (k = 0; k < maxNumMergeCand; k++) { if (mrgCtx.mrgTypeNeighbours[k] == MRG_TYPE_DEFAULT_N) @@ -2067,13 +2030,6 @@ bool PU::getColocatedMVP(const PredictionUnit &pu, const RefPicList &eRefPicList } else { -#if !REMOVE_MV_ADAPT_PREC - if( pu.cs->sps->getSpsNext().getUseHighPrecMv() ) - { - // allow extended precision for temporal scaling - cColMv.setHighPrec(); - } -#endif rcMv = cColMv.scaleMv(distscale); } } @@ -2295,9 +2251,7 @@ void PU::fillMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, const in if( pu.cu->imv != 0) { unsigned imvShift = pu.cu->imv << 1; -#if REMOVE_MV_ADAPT_PREC imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif for( int i = 0; i < pInfo->numCand; i++ ) { roundMV( pInfo->mvCand[i], imvShift ); @@ -2360,9 +2314,7 @@ void PU::fillMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, const in if (pu.cu->imv != 0) { unsigned imvShift = pu.cu->imv << 1; -#if REMOVE_MV_ADAPT_PREC imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif roundMV(cColMv, imvShift); } int i = 0; @@ -2397,32 +2349,16 @@ void PU::fillMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, const in while (pInfo->numCand < AMVP_MAX_NUM_CANDS) { -#if !REMOVE_MV_ADAPT_PREC - const bool prec = pInfo->mvCand[pInfo->numCand].highPrec; - pInfo->mvCand[pInfo->numCand] = Mv( 0, 0, prec ); -#else pInfo->mvCand[pInfo->numCand] = Mv( 0, 0 ); -#endif pInfo->numCand++; } -#if !REMOVE_MV_ADAPT_PREC - if (pu.cs->sps->getSpsNext().getUseHighPrecMv()) - { -#endif for (Mv &mv : pInfo->mvCand) { -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); mv.hor = mv.hor >= 0 ? (mv.hor + nOffset) >> nShift : -((-mv.hor + nOffset) >> nShift); mv.ver = mv.ver >= 0 ? (mv.ver + nOffset) >> nShift : -((-mv.ver + nOffset) >> nShift); -#else - if (mv.highPrec) mv.setLowPrec(); -#endif } -#if !REMOVE_MV_ADAPT_PREC - } -#endif if (pu.cu->imv != 0) { unsigned imvShift = pu.cu->imv << 1; @@ -2431,15 +2367,6 @@ void PU::fillMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, const in roundMV(pInfo->mvCand[i], imvShift); } } -#if !REMOVE_MV_ADAPT_PREC - if (pu.cs->sps->getSpsNext().getUseHighPrecMv()) - { - for (Mv &mv : pInfo->mvCand) - { - if (mv.highPrec) mv.setLowPrec(); - } - } -#endif } #if JVET_L0271_AFFINE_AMVP_SIMPLIFY @@ -2648,23 +2575,15 @@ void PU::xInheritedAffineMv( const PredictionUnit &pu, const PredictionUnit* puN horTmp = iMvScaleHor + iDMvHorX * (posCurX - posNeiX) + iDMvVerX * (posCurY - posNeiY); verTmp = iMvScaleVer + iDMvHorY * (posCurX - posNeiX) + iDMvVerY * (posCurY - posNeiY); roundAffineMv( horTmp, verTmp, shift ); -#if REMOVE_MV_ADAPT_PREC rcMv[0].hor = horTmp; rcMv[0].ver = verTmp; -#else - rcMv[0] = Mv(horTmp, verTmp, true); -#endif // v1 horTmp = iMvScaleHor + iDMvHorX * (posCurX + curW - posNeiX) + iDMvVerX * (posCurY - posNeiY); verTmp = iMvScaleVer + iDMvHorY * (posCurX + curW - posNeiX) + iDMvVerY * (posCurY - posNeiY); roundAffineMv( horTmp, verTmp, shift ); -#if REMOVE_MV_ADAPT_PREC rcMv[1].hor = horTmp; rcMv[1].ver = verTmp; -#else - rcMv[1] = Mv(horTmp, verTmp, true); -#endif // v2 if ( pu.cu->affineType == AFFINEMODEL_6PARAM ) @@ -2672,22 +2591,16 @@ void PU::xInheritedAffineMv( const PredictionUnit &pu, const PredictionUnit* puN horTmp = iMvScaleHor + iDMvHorX * (posCurX - posNeiX) + iDMvVerX * (posCurY + curH - posNeiY); verTmp = iMvScaleVer + iDMvHorY * (posCurX - posNeiX) + iDMvVerY * (posCurY + curH - posNeiY); roundAffineMv( horTmp, verTmp, shift ); -#if REMOVE_MV_ADAPT_PREC rcMv[2].hor = horTmp; rcMv[2].ver = verTmp; -#else - rcMv[2] = Mv(horTmp, verTmp, true); -#endif } } void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, const int &refIdx, AffineAMVPInfo &affiAMVPInfo) { -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); -#endif affiAMVPInfo.numCand = 0; if (refIdx < 0) @@ -2765,7 +2678,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co if ( affiAMVPInfo.numCand >= AMVP_MAX_NUM_CANDS ) { -#if REMOVE_MV_ADAPT_PREC for (int i = 0; i < affiAMVPInfo.numCand; i++) { affiAMVPInfo.mvCandLT[i].hor = affiAMVPInfo.mvCandLT[i].hor >= 0 ? (affiAMVPInfo.mvCandLT[i].hor + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLT[i].hor + nOffset) >> nShift); @@ -2775,7 +2687,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co affiAMVPInfo.mvCandLB[i].hor = affiAMVPInfo.mvCandLB[i].hor >= 0 ? (affiAMVPInfo.mvCandLB[i].hor + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLB[i].hor + nOffset) >> nShift); affiAMVPInfo.mvCandLB[i].ver = affiAMVPInfo.mvCandLB[i].ver >= 0 ? (affiAMVPInfo.mvCandLB[i].ver + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLB[i].ver + nOffset) >> nShift); } -#endif return; } @@ -2831,11 +2742,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co outputAffineMv[1] = amvpInfo1.mvCand[0]; outputAffineMv[2] = amvpInfo2.mvCand[0]; -#if !REMOVE_MV_ADAPT_PREC - outputAffineMv[0].setHighPrec(); - outputAffineMv[1].setHighPrec(); - outputAffineMv[2].setHighPrec(); -#endif outputAffineMv[0].roundMV2SignalPrecision(); outputAffineMv[1].roundMV2SignalPrecision(); @@ -2944,9 +2850,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co if ( (C0Avail && getColocatedMVP( pu, eRefPicList, posC0, cColMv, refIdxCol )) || getColocatedMVP( pu, eRefPicList, posC1, cColMv, refIdxCol ) ) { -#if !REMOVE_MV_ADAPT_PREC - cColMv.setHighPrec(); -#endif cColMv.roundMV2SignalPrecision(); affiAMVPInfo.mvCandLT[affiAMVPInfo.numCand] = cColMv; affiAMVPInfo.mvCandRT[affiAMVPInfo.numCand] = cColMv; @@ -2963,18 +2866,12 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co affiAMVPInfo.mvCandLT[affiAMVPInfo.numCand].setZero(); affiAMVPInfo.mvCandRT[affiAMVPInfo.numCand].setZero(); affiAMVPInfo.mvCandLB[affiAMVPInfo.numCand].setZero(); -#if !REMOVE_MV_ADAPT_PREC - affiAMVPInfo.mvCandLT[affiAMVPInfo.numCand].setHighPrec(); - affiAMVPInfo.mvCandRT[affiAMVPInfo.numCand].setHighPrec(); - affiAMVPInfo.mvCandLB[affiAMVPInfo.numCand].setHighPrec(); -#endif affiAMVPInfo.numCand++; } } } #endif -#if REMOVE_MV_ADAPT_PREC for (int i = 0; i < affiAMVPInfo.numCand; i++) { affiAMVPInfo.mvCandLT[i].hor = affiAMVPInfo.mvCandLT[i].hor >= 0 ? (affiAMVPInfo.mvCandLT[i].hor + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLT[i].hor + nOffset) >> nShift); @@ -2984,7 +2881,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co affiAMVPInfo.mvCandLB[i].hor = affiAMVPInfo.mvCandLB[i].hor >= 0 ? (affiAMVPInfo.mvCandLB[i].hor + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLB[i].hor + nOffset) >> nShift); affiAMVPInfo.mvCandLB[i].ver = affiAMVPInfo.mvCandLB[i].ver >= 0 ? (affiAMVPInfo.mvCandLB[i].ver + nOffset) >> nShift : -((-affiAMVPInfo.mvCandLB[i].ver + nOffset) >> nShift); } -#endif #if !JVET_L0271_AFFINE_AMVP_SIMPLIFY @@ -2996,9 +2892,6 @@ void PU::fillAffineMvpCand(PredictionUnit &pu, const RefPicList &eRefPicList, co int iAdd = amvpInfo.numCand - affiAMVPInfo.numCand; for ( int i = 0; i < iAdd; i++ ) { -#if !REMOVE_MV_ADAPT_PREC - amvpInfo.mvCand[i].setHighPrec(); -#endif affiAMVPInfo.mvCandLT[affiAMVPInfo.numCand] = amvpInfo.mvCand[i]; affiAMVPInfo.mvCandRT[affiAMVPInfo.numCand] = amvpInfo.mvCand[i]; affiAMVPInfo.mvCandLB[affiAMVPInfo.numCand] = amvpInfo.mvCand[i]; @@ -3133,12 +3026,6 @@ bool PU::addMVPCandWithScaling( const PredictionUnit &pu, const RefPicList &eRef if( scale != 4096 ) { -#if !REMOVE_MV_ADAPT_PREC - if( slice.getSPS()->getSpsNext().getUseHighPrecMv() ) - { - cMv.setHighPrec(); - } -#endif cMv = cMv.scaleMv( scale ); } } @@ -3160,9 +3047,7 @@ void PU::addAMVPHMVPCand(const PredictionUnit &pu, const RefPicList eRefPicList, MotionInfo neibMi; int i = 0; unsigned imvShift = imv << 1; -#if REMOVE_MV_ADAPT_PREC imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif int num_avai_candInLUT = slice.getAvailableLUTMrgNum(); int num_allowedCand = std::min(MAX_NUM_HMVP_AVMPCANDS, num_avai_candInLUT); @@ -3281,15 +3166,6 @@ void PU::getAffineControlPointCand( const PredictionUnit &pu, MotionInfo mi[4], return; } -#if !REMOVE_MV_ADAPT_PREC - for ( int l = 0; l < 2; l++ ) - { - for ( int i = 0; i < 4; i++ ) - { - cMv[l][i].highPrec = true; - } - } -#endif for ( int l = 0; l < 2; l++ ) { @@ -3710,10 +3586,6 @@ void PU::getAffineMergeCand( const PredictionUnit &pu, AffineMergeCtx& affMrgCtx { isAvailable[0] = true; mi[0] = puNeigh->getMotionInfo( pos ); -#if !REMOVE_MV_ADAPT_PREC - mi[0].mv[0].setHighPrec(); - mi[0].mv[1].setHighPrec(); -#endif break; } } @@ -3734,10 +3606,6 @@ void PU::getAffineMergeCand( const PredictionUnit &pu, AffineMergeCtx& affMrgCtx { isAvailable[1] = true; mi[1] = puNeigh->getMotionInfo( pos ); -#if !REMOVE_MV_ADAPT_PREC - mi[1].mv[0].setHighPrec(); - mi[1].mv[1].setHighPrec(); -#endif break; } } @@ -3758,10 +3626,6 @@ void PU::getAffineMergeCand( const PredictionUnit &pu, AffineMergeCtx& affMrgCtx { isAvailable[2] = true; mi[2] = puNeigh->getMotionInfo( pos ); -#if !REMOVE_MV_ADAPT_PREC - mi[2].mv[0].setHighPrec(); - mi[2].mv[1].setHighPrec(); -#endif break; } } @@ -3810,9 +3674,6 @@ void PU::getAffineMergeCand( const PredictionUnit &pu, AffineMergeCtx& affMrgCtx if ( bExistMV ) { mi[3].mv[0] = cColMv; -#if !REMOVE_MV_ADAPT_PREC - mi[3].mv[0].setHighPrec(); -#endif mi[3].refIdx[0] = refIdx; mi[3].interDir = 1; isAvailable[3] = true; @@ -3824,9 +3685,6 @@ void PU::getAffineMergeCand( const PredictionUnit &pu, AffineMergeCtx& affMrgCtx if ( bExistMV ) { mi[3].mv[1] = cColMv; -#if !REMOVE_MV_ADAPT_PREC - mi[3].mv[1].setHighPrec(); -#endif mi[3].refIdx[1] = refIdx; mi[3].interDir |= 2; isAvailable[3] = true; @@ -4014,14 +3872,11 @@ void PU::setAllAffineMvField( PredictionUnit &pu, MvField *mvField, RefPicList e } void PU::setAllAffineMv( PredictionUnit& pu, Mv affLT, Mv affRT, Mv affLB, RefPicList eRefList -#if REMOVE_MV_ADAPT_PREC , bool setHighPrec -#endif ) { int width = pu.Y().width; int shift = MAX_CU_DEPTH; -#if REMOVE_MV_ADAPT_PREC if (setHighPrec) { affLT.hor = affLT.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; @@ -4031,11 +3886,6 @@ void PU::setAllAffineMv( PredictionUnit& pu, Mv affLT, Mv affRT, Mv affLB, RefPi affLB.hor = affLB.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; affLB.ver = affLB.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; } -#else - affLT.setHighPrec(); - affRT.setHighPrec(); - affLB.setHighPrec(); -#endif int deltaMvHorX, deltaMvHorY, deltaMvVerX, deltaMvVerY; deltaMvHorX = (affRT - affLT).getHor() << (shift - g_aucLog2[width]); deltaMvHorY = (affRT - affLT).getVer() << (shift - g_aucLog2[width]); @@ -4073,12 +3923,8 @@ void PU::setAllAffineMv( PredictionUnit& pu, Mv affLT, Mv affRT, Mv affLB, RefPi { for ( int x = (w >> MIN_CU_LOG2); x < ((w + blockWidth) >> MIN_CU_LOG2); x++ ) { -#if REMOVE_MV_ADAPT_PREC mb.at(x, y).mv[eRefList].hor = mvScaleTmpHor; mb.at(x, y).mv[eRefList].ver = mvScaleTmpVer; -#else - mb.at(x, y).mv[eRefList] = Mv(mvScaleTmpHor, mvScaleTmpVer, true); -#endif } } } @@ -4169,12 +4015,6 @@ static bool deriveScaledMotionTemporal( const Slice& slice, if (iScale != 4096) { -#if !REMOVE_MV_ADAPT_PREC - if (slice.getSPS()->getSpsNext().getUseHighPrecMv()) - { - cColMv.setHighPrec(); - } -#endif cColMv = cColMv.scaleMv(iScale); } @@ -4298,15 +4138,7 @@ bool PU::getInterMergeSubPuMvpCand(const PredictionUnit &pu, MergeCtx& mrgCtx, b //////// GET Initial Temporal Vector //////// /////////////////////////////////////////////////////////////////////// int mvPrec = 2; -#if !REMOVE_MV_ADAPT_PREC - if (pu.cs->sps->getSpsNext().getUseHighPrecMv()) - { - cTMv.setHighPrec(); -#endif mvPrec += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#if !REMOVE_MV_ADAPT_PREC - } -#endif #if !JVET_L0257_ATMVP_COLBLK_CLIP int mvRndOffs = (1 << mvPrec) >> 1; #endif @@ -4580,9 +4412,6 @@ void PU::applyImv( PredictionUnit& pu, MergeCtx &mrgCtx, InterPrediction *interP { if (pu.cu->imv) { -#if !REMOVE_MV_ADAPT_PREC - CHECK(pu.mvd[0].highPrec, "Motion vector difference should never be high precision"); -#endif pu.mvd[0] = Mv( pu.mvd[0].hor << imvShift, pu.mvd[0].ver << imvShift ); } unsigned mvp_idx = pu.mvpIdx[0]; @@ -4591,10 +4420,8 @@ void PU::applyImv( PredictionUnit& pu, MergeCtx &mrgCtx, InterPrediction *interP pu.mvpNum[0] = amvpInfo.numCand; pu.mvpIdx[0] = mvp_idx; pu.mv [0] = amvpInfo.mvCand[mvp_idx] + pu.mvd[0]; -#if REMOVE_MV_ADAPT_PREC pu.mv[0].hor = pu.mv[0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[0].ver = pu.mv[0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif #if JVET_L0293_CPR if (pu.interDir == 1 && pu.cs->slice->getRefPic(REF_PIC_LIST_0, pu.refIdx[REF_PIC_LIST_0])->getPOC() == pu.cs->slice->getPOC()) { @@ -4607,9 +4434,6 @@ void PU::applyImv( PredictionUnit& pu, MergeCtx &mrgCtx, InterPrediction *interP { if( !( pu.cu->cs->slice->getMvdL1ZeroFlag() && pu.interDir == 3 ) && pu.cu->imv )/* PRED_BI */ { -#if !REMOVE_MV_ADAPT_PREC - CHECK(pu.mvd[1].highPrec, "Motion vector difference should never be high precision"); -#endif pu.mvd[1] = Mv( pu.mvd[1].hor << imvShift, pu.mvd[1].ver << imvShift ); } unsigned mvp_idx = pu.mvpIdx[1]; @@ -4618,10 +4442,8 @@ void PU::applyImv( PredictionUnit& pu, MergeCtx &mrgCtx, InterPrediction *interP pu.mvpNum[1] = amvpInfo.numCand; pu.mvpIdx[1] = mvp_idx; pu.mv [1] = amvpInfo.mvCand[mvp_idx] + pu.mvd[1]; -#if REMOVE_MV_ADAPT_PREC pu.mv[1].hor = pu.mv[1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[1].ver = pu.mv[1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif } } else diff --git a/source/Lib/CommonLib/UnitTools.h b/source/Lib/CommonLib/UnitTools.h index e111b0ba0..5d2c20535 100644 --- a/source/Lib/CommonLib/UnitTools.h +++ b/source/Lib/CommonLib/UnitTools.h @@ -162,9 +162,7 @@ namespace PU #endif void setAllAffineMvField ( PredictionUnit &pu, MvField *mvField, RefPicList eRefList ); void setAllAffineMv ( PredictionUnit &pu, Mv affLT, Mv affRT, Mv affLB, RefPicList eRefList -#if REMOVE_MV_ADAPT_PREC , bool setHighPrec = false -#endif ); bool getInterMergeSubPuMvpCand(const PredictionUnit &pu, MergeCtx &mrgCtx, bool& LICFlag, const int count #if JVET_L0054_MMVD diff --git a/source/Lib/CommonLib/dtrace_blockstatistics.cpp b/source/Lib/CommonLib/dtrace_blockstatistics.cpp index c93f33a21..310c3e151 100644 --- a/source/Lib/CommonLib/dtrace_blockstatistics.cpp +++ b/source/Lib/CommonLib/dtrace_blockstatistics.cpp @@ -409,10 +409,8 @@ void getAndStoreBlockStatistics(const CodingStructure& cs, const UnitArea& ctuAr void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) { const int maxNumChannelType = cs.pcv->chrFormat != CHROMA_400 && CS::isDualITree( cs ) ? 2 : 1; -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); -#endif for( int ch = 0; ch < maxNumChannelType; ch++ ) { const ChannelType chType = ChannelType( ch ); @@ -527,15 +525,10 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) { Mv mv = pu.mv[REF_PIC_LIST_0]; Mv mvd = pu.mvd[REF_PIC_LIST_0]; -#if REMOVE_MV_ADAPT_PREC mv.hor = mv.hor >= 0 ? (mv.hor + nOffset) >> nShift : -((-mv.hor + nOffset) >> nShift); mv.ver = mv.ver >= 0 ? (mv.ver + nOffset) >> nShift : -((-mv.ver + nOffset) >> nShift); mvd.hor = mvd.hor >= 0 ? (mvd.hor + nOffset) >> nShift : -((-mvd.hor + nOffset) >> nShift); mvd.ver = mvd.ver >= 0 ? (mvd.ver + nOffset) >> nShift : -((-mvd.ver + nOffset) >> nShift); -#else - mv.setLowPrec(); - mvd.setLowPrec(); -#endif DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::MVDL0), mvd.hor, mvd.ver); DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::MVL0), mv.hor, mv.ver); } @@ -543,15 +536,10 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) { Mv mv = pu.mv[REF_PIC_LIST_1]; Mv mvd = pu.mvd[REF_PIC_LIST_1]; -#if REMOVE_MV_ADAPT_PREC mv.hor = mv.hor >= 0 ? (mv.hor + nOffset) >> nShift : -((-mv.hor + nOffset) >> nShift); mv.ver = mv.ver >= 0 ? (mv.ver + nOffset) >> nShift : -((-mv.ver + nOffset) >> nShift); mvd.hor = mvd.hor >= 0 ? (mvd.hor + nOffset) >> nShift : -((-mvd.hor + nOffset) >> nShift); mvd.ver = mvd.ver >= 0 ? (mvd.ver + nOffset) >> nShift : -((-mvd.ver + nOffset) >> nShift); -#else - mv.setLowPrec(); - mvd.setLowPrec(); -#endif DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::MVDL1), mvd.hor, mvd.ver); DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::MVL1), mv.hor, mv.ver); } @@ -569,12 +557,8 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) { for (int refIdx = 0; refIdx < 2; refIdx++) { -#if REMOVE_MV_ADAPT_PREC mi[triangleIdx].mv[refIdx].hor = mi[triangleIdx].mv[refIdx].hor >= 0 ? (mi[triangleIdx].mv[refIdx].hor + nOffset) >> nShift : -((-mi[triangleIdx].mv[refIdx].hor + nOffset) >> nShift); mi[triangleIdx].mv[refIdx].ver = mi[triangleIdx].mv[refIdx].ver >= 0 ? (mi[triangleIdx].mv[refIdx].ver + nOffset) >> nShift : -((-mi[triangleIdx].mv[refIdx].ver + nOffset) >> nShift); -#else - mv[triangleIdx].setLowPrec(); -#endif if (mi[triangleIdx].refIdx[refIdx] != -1) { DTRACE_POLYGON_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu.cu->slice->getPOC(), triangleCorners[triangleIdx], GetBlockStatisticName(refIdx==0?BlockStatistic::TriangleMVL0:BlockStatistic::TriangleMVL1), mi[triangleIdx].mv[refIdx].hor, mi[triangleIdx].mv[refIdx].ver); @@ -593,18 +577,12 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) mv[1] = mb.at(mb.width - 1, 0).mv[REF_PIC_LIST_0]; mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_0]; // motion vectors should use low precision or they will appear to large -#if REMOVE_MV_ADAPT_PREC mv[0].hor = mv[0].hor >= 0 ? (mv[0].hor + nOffset) >> nShift : -((-mv[0].hor + nOffset) >> nShift); mv[0].ver = mv[0].ver >= 0 ? (mv[0].ver + nOffset) >> nShift : -((-mv[0].ver + nOffset) >> nShift); mv[1].hor = mv[1].hor >= 0 ? (mv[1].hor + nOffset) >> nShift : -((-mv[1].hor + nOffset) >> nShift); mv[1].ver = mv[1].ver >= 0 ? (mv[1].ver + nOffset) >> nShift : -((-mv[1].ver + nOffset) >> nShift); mv[2].hor = mv[2].hor >= 0 ? (mv[2].hor + nOffset) >> nShift : -((-mv[2].hor + nOffset) >> nShift); mv[2].ver = mv[2].ver >= 0 ? (mv[2].ver + nOffset) >> nShift : -((-mv[2].ver + nOffset) >> nShift); -#else - mv[0].setLowPrec(); - mv[1].setLowPrec(); - mv[2].setLowPrec(); -#endif DTRACE_BLOCK_AFFINETF(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::AffineMVL0), mv[0].hor, mv[0].ver, mv[1].hor, mv[1].ver, mv[2].hor, mv[2].ver); } if (pu.interDir != 1 /* PRED_L1 */) @@ -615,18 +593,12 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) mv[1] = mb.at(mb.width - 1, 0).mv[REF_PIC_LIST_1]; mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_1]; // motion vectors should use low precision or they will appear to large -#if REMOVE_MV_ADAPT_PREC mv[0].hor = mv[0].hor >= 0 ? (mv[0].hor + nOffset) >> nShift : -((-mv[0].hor + nOffset) >> nShift); mv[0].ver = mv[0].ver >= 0 ? (mv[0].ver + nOffset) >> nShift : -((-mv[0].ver + nOffset) >> nShift); mv[1].hor = mv[1].hor >= 0 ? (mv[1].hor + nOffset) >> nShift : -((-mv[1].hor + nOffset) >> nShift); mv[1].ver = mv[1].ver >= 0 ? (mv[1].ver + nOffset) >> nShift : -((-mv[1].ver + nOffset) >> nShift); mv[2].hor = mv[2].hor >= 0 ? (mv[2].hor + nOffset) >> nShift : -((-mv[2].hor + nOffset) >> nShift); mv[2].ver = mv[2].ver >= 0 ? (mv[2].ver + nOffset) >> nShift : -((-mv[2].ver + nOffset) >> nShift); -#else - mv[0].setLowPrec(); - mv[1].setLowPrec(); - mv[2].setLowPrec(); -#endif DTRACE_BLOCK_AFFINETF(g_trace_ctx, D_BLOCK_STATISTICS_ALL, pu, GetBlockStatisticName(BlockStatistic::AffineMVL1), mv[0].hor, mv[0].ver, mv[1].hor, mv[1].ver, mv[2].hor, mv[2].ver); } } @@ -710,10 +682,8 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea) void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) { -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); -#endif const int maxNumChannelType = cs.pcv->chrFormat != CHROMA_400 && CS::isDualITree(cs) ? 2 : 1; for (int ch = 0; ch < maxNumChannelType; ch++) @@ -906,15 +876,10 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) { Mv mv = pu.mv[REF_PIC_LIST_0]; Mv mvd = pu.mvd[REF_PIC_LIST_0]; -#if REMOVE_MV_ADAPT_PREC mv.hor = mv.hor >= 0 ? (mv.hor + nOffset) >> nShift : -((-mv.hor + nOffset) >> nShift); mv.ver = mv.ver >= 0 ? (mv.ver + nOffset) >> nShift : -((-mv.ver + nOffset) >> nShift); mvd.hor = mvd.hor >= 0 ? (mvd.hor + nOffset) >> nShift : -((-mvd.hor + nOffset) >> nShift); mvd.ver = mvd.ver >= 0 ? (mvd.ver + nOffset) >> nShift : -((-mvd.ver + nOffset) >> nShift); -#else - mv.setLowPrec(); - mvd.setLowPrec(); -#endif DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::MVDL0), mvd.hor, mvd.ver); DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::MVL0), mv.hor, mv.ver); } @@ -922,15 +887,10 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) { Mv mv = pu.mv[REF_PIC_LIST_1]; Mv mvd = pu.mvd[REF_PIC_LIST_1]; -#if REMOVE_MV_ADAPT_PREC mv.hor = mv.hor >= 0 ? (mv.hor + nOffset) >> nShift : -((-mv.hor + nOffset) >> nShift); mv.ver = mv.ver >= 0 ? (mv.ver + nOffset) >> nShift : -((-mv.ver + nOffset) >> nShift); mvd.hor = mvd.hor >= 0 ? (mvd.hor + nOffset) >> nShift : -((-mvd.hor + nOffset) >> nShift); mvd.ver = mvd.ver >= 0 ? (mvd.ver + nOffset) >> nShift : -((-mvd.ver + nOffset) >> nShift); -#else - mv.setLowPrec(); - mvd.setLowPrec(); -#endif DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::MVDL1), mvd.hor, mvd.ver); DTRACE_BLOCK_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::MVL1), mv.hor, mv.ver); } @@ -948,12 +908,8 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) { for (int refIdx = 0; refIdx < 2; refIdx++) { -#if REMOVE_MV_ADAPT_PREC mi[triangleIdx].mv[refIdx].hor = mi[triangleIdx].mv[refIdx].hor >= 0 ? (mi[triangleIdx].mv[refIdx].hor + nOffset) >> nShift : -((-mi[triangleIdx].mv[refIdx].hor + nOffset) >> nShift); mi[triangleIdx].mv[refIdx].ver = mi[triangleIdx].mv[refIdx].ver >= 0 ? (mi[triangleIdx].mv[refIdx].ver + nOffset) >> nShift : -((-mi[triangleIdx].mv[refIdx].ver + nOffset) >> nShift); -#else - mv[triangleIdx].setLowPrec(); -#endif if (mi[triangleIdx].refIdx[refIdx] != -1) { DTRACE_POLYGON_VECTOR(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu.cu->slice->getPOC(), triangleCorners[triangleIdx], GetBlockStatisticName(refIdx==0?BlockStatistic::TriangleMVL0:BlockStatistic::TriangleMVL1), mi[triangleIdx].mv[refIdx].hor, mi[triangleIdx].mv[refIdx].ver); @@ -972,18 +928,12 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) mv[1] = mb.at(mb.width - 1, 0).mv[REF_PIC_LIST_0]; mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_0]; // motion vectors should use low precision or they will appear to large -#if REMOVE_MV_ADAPT_PREC mv[0].hor = mv[0].hor >= 0 ? (mv[0].hor + nOffset) >> nShift : -((-mv[0].hor + nOffset) >> nShift); mv[0].ver = mv[0].ver >= 0 ? (mv[0].ver + nOffset) >> nShift : -((-mv[0].ver + nOffset) >> nShift); mv[1].hor = mv[1].hor >= 0 ? (mv[1].hor + nOffset) >> nShift : -((-mv[1].hor + nOffset) >> nShift); mv[1].ver = mv[1].ver >= 0 ? (mv[1].ver + nOffset) >> nShift : -((-mv[1].ver + nOffset) >> nShift); mv[2].hor = mv[2].hor >= 0 ? (mv[2].hor + nOffset) >> nShift : -((-mv[2].hor + nOffset) >> nShift); mv[2].ver = mv[2].ver >= 0 ? (mv[2].ver + nOffset) >> nShift : -((-mv[2].ver + nOffset) >> nShift); -#else - mv[0].setLowPrec(); - mv[1].setLowPrec(); - mv[2].setLowPrec(); -#endif DTRACE_BLOCK_AFFINETF(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::AffineMVL0), mv[0].hor, mv[0].ver, mv[1].hor, mv[1].ver, mv[2].hor, mv[2].ver); } if (pu.interDir != 1 /* PRED_L1 */) @@ -994,18 +944,12 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea) mv[1] = mb.at(mb.width - 1, 0).mv[REF_PIC_LIST_1]; mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_1]; // motion vectors should use low precision or they will appear to large -#if REMOVE_MV_ADAPT_PREC mv[0].hor = mv[0].hor >= 0 ? (mv[0].hor + nOffset) >> nShift : -((-mv[0].hor + nOffset) >> nShift); mv[0].ver = mv[0].ver >= 0 ? (mv[0].ver + nOffset) >> nShift : -((-mv[0].ver + nOffset) >> nShift); mv[1].hor = mv[1].hor >= 0 ? (mv[1].hor + nOffset) >> nShift : -((-mv[1].hor + nOffset) >> nShift); mv[1].ver = mv[1].ver >= 0 ? (mv[1].ver + nOffset) >> nShift : -((-mv[1].ver + nOffset) >> nShift); mv[2].hor = mv[2].hor >= 0 ? (mv[2].hor + nOffset) >> nShift : -((-mv[2].hor + nOffset) >> nShift); mv[2].ver = mv[2].ver >= 0 ? (mv[2].ver + nOffset) >> nShift : -((-mv[2].ver + nOffset) >> nShift); -#else - mv[0].setLowPrec(); - mv[1].setLowPrec(); - mv[2].setLowPrec(); -#endif DTRACE_BLOCK_AFFINETF(g_trace_ctx, D_BLOCK_STATISTICS_CODED, pu, GetBlockStatisticName(BlockStatistic::AffineMVL1), mv[0].hor, mv[0].ver, mv[1].hor, mv[1].ver, mv[2].hor, mv[2].ver); } } diff --git a/source/Lib/DecoderLib/DecCu.cpp b/source/Lib/DecoderLib/DecCu.cpp index c90d2b52b..5de6917ae 100644 --- a/source/Lib/DecoderLib/DecCu.cpp +++ b/source/Lib/DecoderLib/DecCu.cpp @@ -656,27 +656,18 @@ void DecCu::xDeriveCUMV( CodingUnit &cu ) Mv mvLT = affineAMVPInfo.mvCandLT[mvp_idx] + pu.mvdAffi[eRefList][0]; Mv mvRT = affineAMVPInfo.mvCandRT[mvp_idx] + pu.mvdAffi[eRefList][1]; mvRT += pu.mvdAffi[eRefList][0]; -#if REMOVE_MV_ADAPT_PREC mvLT.hor = mvLT.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvLT.ver = mvLT.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvRT.hor = mvRT.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvRT.ver = mvRT.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - CHECK(!mvLT.highPrec, "unexpected lp mv"); - CHECK(!mvRT.highPrec, "unexpected lp mv"); -#endif Mv mvLB; if ( cu.affineType == AFFINEMODEL_6PARAM ) { mvLB = affineAMVPInfo.mvCandLB[mvp_idx] + pu.mvdAffi[eRefList][2]; mvLB += pu.mvdAffi[eRefList][0]; -#if REMOVE_MV_ADAPT_PREC mvLB.hor = mvLB.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvLB.ver = mvLB.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - CHECK(!mvLB.highPrec, "unexpected lp mv"); -#endif } PU::setAllAffineMv( pu, mvLT, mvRT, mvLB, eRefList ); } @@ -707,15 +698,8 @@ void DecCu::xDeriveCUMV( CodingUnit &cu ) pu.mv [eRefList] = amvpInfo.mvCand[pu.mvpIdx [eRefList]] + pu.mvd[eRefList]; #endif -#if REMOVE_MV_ADAPT_PREC pu.mv[eRefList].hor = pu.mv[eRefList].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[eRefList].ver = pu.mv[eRefList].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - if( pu.cs->sps->getSpsNext().getUseAffine() ) - { - pu.mv[eRefList].setHighPrec(); - } -#endif } } } diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 80a65890e..bc7101518 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -791,9 +791,6 @@ void HLSyntaxReader::parseSPSNext( SPSNext& spsNext, const bool usePCM ) READ_FLAG( symbol, "large_ctu_flag" ); spsNext.setUseLargeCTU ( symbol != 0 ); READ_FLAG( symbol, "subpu_tmvp_flag" ); spsNext.setSubPuMvpMode (symbol); READ_FLAG( symbol, "imv_enable_flag" ); spsNext.setUseIMV ( symbol != 0 ); -#if !REMOVE_MV_ADAPT_PREC - READ_FLAG( symbol, "high_precision_motion_vectors" ); spsNext.setUseHighPrecMv(symbol != 0); -#endif #if JVET_L0256_BIO READ_FLAG( symbol, "bio_enable_flag" ); spsNext.setUseBIO ( symbol != 0 ); #endif diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index 6197f1f9f..e8906d401 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -1996,15 +1996,6 @@ void CABACWriter::mvd_coding( const Mv &rMvd, uint8_t imv ) unsigned horAbs = unsigned( horMvd < 0 ? -horMvd : horMvd ); unsigned verAbs = unsigned( verMvd < 0 ? -verMvd : verMvd ); -#if !REMOVE_MV_ADAPT_PREC - if (rMvd.highPrec) - { - CHECK(horAbs & ((1 << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE) - 1), "mvd-x has high precision fractional part."); - CHECK(verAbs & ((1 << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE) - 1), "mvd-y has high precision fractional part."); - horAbs >>= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; - verAbs >>= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; - } -#endif // abs_mvd_greater0_flag[ 0 | 1 ] m_BinEncoder.encodeBin( (horAbs > 0), Ctx::Mvd() ); diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index bf5375dd2..2941d09bb 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -217,9 +217,6 @@ protected: #endif bool m_Affine; bool m_AffineType; -#if !REMOVE_MV_ADAPT_PREC - bool m_highPrecMv; -#endif #if JVET_L0256_BIO bool m_BIO; #endif @@ -714,10 +711,6 @@ public: bool getAffine () const { return m_Affine; } void setAffineType( bool b ) { m_AffineType = b; } bool getAffineType() const { return m_AffineType; } -#if !REMOVE_MV_ADAPT_PREC - void setHighPrecisionMv ( bool b ) { m_highPrecMv = b; } - bool getHighPrecisionMv () { return m_highPrecMv; } -#endif #if JVET_L0256_BIO void setBIO(bool b) { m_BIO = b; } bool getBIO() const { return m_BIO; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index 4949777b1..42aca557f 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -868,9 +868,6 @@ void EncLib::xInitSPS(SPS &sps) #endif sps.getSpsNext().setImvMode ( ImvMode(m_ImvMode) ); sps.getSpsNext().setUseIMV ( m_ImvMode != IMV_OFF ); -#if !REMOVE_MV_ADAPT_PREC - sps.getSpsNext().setUseHighPrecMv ( m_highPrecMv ); -#endif #if JVET_L0256_BIO sps.getSpsNext().setUseBIO ( m_BIO ); #endif diff --git a/source/Lib/EncoderLib/InterSearch.cpp b/source/Lib/EncoderLib/InterSearch.cpp index 35afb9845..6323700a0 100644 --- a/source/Lib/EncoderLib/InterSearch.cpp +++ b/source/Lib/EncoderLib/InterSearch.cpp @@ -1419,10 +1419,8 @@ bool InterSearch::predCPRSearch(CodingUnit& cu, Partitioner& partitioner, const pu.refIdx[REF_PIC_LIST_0] = pu.cs->slice->getNumRefIdx(REF_PIC_LIST_0) - 1; -#if REMOVE_MV_ADAPT_PREC pu.mv[REF_PIC_LIST_0].hor = pu.mv[REF_PIC_LIST_0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[REF_PIC_LIST_0].ver = pu.mv[REF_PIC_LIST_0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif m_ctuRecord[cu.lumaPos()][cu.lumaSize()].bvRecord[pu.bv] = cost; } @@ -1734,10 +1732,8 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) cMvBi [1] = cMvPredBi[1][bestBiPRefIdxL1]; iRefIdxBi[1] = bestBiPRefIdxL1; pu.mv [REF_PIC_LIST_1] = cMvBi[1]; -#if REMOVE_MV_ADAPT_PREC pu.mv[REF_PIC_LIST_1].hor = pu.mv[REF_PIC_LIST_1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[REF_PIC_LIST_1].ver = pu.mv[REF_PIC_LIST_1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.refIdx[REF_PIC_LIST_1] = iRefIdxBi[1]; pu.mvpIdx[REF_PIC_LIST_1] = bestBiPMvpL1; @@ -1809,10 +1805,8 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) if ( iIter == 0 && !cs.slice->getMvdL1ZeroFlag()) { pu.mv [1 - iRefList] = cMv [1 - iRefList]; -#if REMOVE_MV_ADAPT_PREC pu.mv[1 - iRefList].hor = pu.mv[1 - iRefList].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[1 - iRefList].ver = pu.mv[1 - iRefList].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.refIdx[1 - iRefList] = iRefIdx[1 - iRefList]; PelUnitBuf predBufTmp = m_tmpPredStorage[1 - iRefList].getBuf( UnitAreaRelative(cu, pu) ); @@ -1883,10 +1877,8 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) { // Set motion pu.mv [eRefPicList] = cMvBi [iRefList]; -#if REMOVE_MV_ADAPT_PREC pu.mv[eRefPicList].hor = pu.mv[eRefPicList].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[eRefPicList].ver = pu.mv[eRefPicList].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.refIdx[eRefPicList] = iRefIdxBi[iRefList]; PelUnitBuf predBufTmp = m_tmpPredStorage[iRefList].getBuf( UnitAreaRelative(cu, pu) ); @@ -1955,12 +1947,10 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) uiLastMode = 2; pu.mv [REF_PIC_LIST_0] = cMvBi[0]; pu.mv [REF_PIC_LIST_1] = cMvBi[1]; -#if REMOVE_MV_ADAPT_PREC pu.mv[REF_PIC_LIST_0].hor = pu.mv[REF_PIC_LIST_0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[REF_PIC_LIST_0].ver = pu.mv[REF_PIC_LIST_0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[REF_PIC_LIST_1].hor = pu.mv[REF_PIC_LIST_1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv[REF_PIC_LIST_1].ver = pu.mv[REF_PIC_LIST_1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.mvd [REF_PIC_LIST_0] = cMvBi[0] - cMvPredBi[0][iRefIdxBi[0]]; pu.mvd [REF_PIC_LIST_1] = cMvBi[1] - cMvPredBi[1][iRefIdxBi[1]]; pu.refIdx[REF_PIC_LIST_0] = iRefIdxBi[0]; @@ -1975,10 +1965,8 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) { uiLastMode = 0; pu.mv [REF_PIC_LIST_0] = cMv[0]; -#if REMOVE_MV_ADAPT_PREC pu.mv [REF_PIC_LIST_0].hor = pu.mv[REF_PIC_LIST_0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv [REF_PIC_LIST_0].ver = pu.mv[REF_PIC_LIST_0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.mvd [REF_PIC_LIST_0] = cMv[0] - cMvPred[0][iRefIdx[0]]; pu.refIdx[REF_PIC_LIST_0] = iRefIdx[0]; pu.mvpIdx[REF_PIC_LIST_0] = aaiMvpIdx[0][iRefIdx[0]]; @@ -1989,10 +1977,8 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) { uiLastMode = 1; pu.mv [REF_PIC_LIST_1] = cMv[1]; -#if REMOVE_MV_ADAPT_PREC pu.mv [REF_PIC_LIST_1].hor = pu.mv[REF_PIC_LIST_1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; pu.mv [REF_PIC_LIST_1].ver = pu.mv[REF_PIC_LIST_1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif pu.mvd [REF_PIC_LIST_1] = cMv[1] - cMvPred[1][iRefIdx[1]]; pu.refIdx[REF_PIC_LIST_1] = iRefIdx[1]; pu.mvpIdx[REF_PIC_LIST_1] = aaiMvpIdx[1][iRefIdx[1]]; @@ -2113,14 +2099,10 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) } PU::setAllAffineMv( pu, bestMv[0][0], bestMv[0][1], bestMv[0][2], REF_PIC_LIST_0 -#if REMOVE_MV_ADAPT_PREC , false -#endif ); PU::setAllAffineMv( pu, bestMv[1][0], bestMv[1][1], bestMv[1][2], REF_PIC_LIST_1 -#if REMOVE_MV_ADAPT_PREC , false -#endif ); } else @@ -2342,10 +2324,8 @@ Distortion InterSearch::xGetTemplateCost( const PredictionUnit& pu, Distortion uiCost = std::numeric_limits<Distortion>::max(); const Picture* picRef = pu.cu->slice->getRefPic( eRefPicList, iRefIdx ); -#if REMOVE_MV_ADAPT_PREC cMvCand.hor = cMvCand.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; cMvCand.ver = cMvCand.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( cMvCand, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), @@ -2387,7 +2367,6 @@ Distortion InterSearch::xGetAffineTemplateCost( PredictionUnit& pu, PelUnitBuf& // prediction pattern const bool bi = pu.cu->slice->testWeightPred() && pu.cu->slice->getSliceType()==P_SLICE; -#if REMOVE_MV_ADAPT_PREC Mv mv[3]; mv[0].hor = acMvCand[0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mv[0].ver = acMvCand[0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; @@ -2396,9 +2375,6 @@ Distortion InterSearch::xGetAffineTemplateCost( PredictionUnit& pu, PelUnitBuf& mv[2].hor = acMvCand[2].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mv[2].ver = acMvCand[2].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; xPredAffineBlk(COMPONENT_Y, pu, picRef, mv, predBuf, bi, pu.cu->slice->clpRng(COMPONENT_Y)); -#else - xPredAffineBlk(COMPONENT_Y, pu, picRef, acMvCand, predBuf, bi, pu.cu->slice->clpRng(COMPONENT_Y)); -#endif if( bi ) { xWeightedPredictionUni( pu, predBuf, eRefPicList, predBuf, iRefIdx, m_maxCompIDToPred ); @@ -2558,11 +2534,7 @@ void InterSearch::xMotionEstimation(PredictionUnit& pu, PelUnitBuf& origBuf, Ref { xPatternSearchIntRefine( pu, cStruct, rcMv, rcMvPred, riMVPIdx, ruiBits, ruiCost, amvpInfo, fWeight); } -#if REMOVE_MV_ADAPT_PREC DTRACE(g_trace_ctx, D_ME, " MECost<L%d,%d>: %6d (%d) MV:%d,%d\n", (int)eRefPicList, (int)bBi, ruiCost, ruiBits, rcMv.getHor() << 2, rcMv.getVer() << 2); -#else - DTRACE(g_trace_ctx, D_ME, " MECost<L%d,%d>: %6d (%d) MV:%d,%d\n", (int)eRefPicList, (int)bBi, ruiCost, ruiBits, rcMv.getHor() << (pu.cs->sps->getSpsNext().getUseHighPrecMv() ? 2 : 0), rcMv.getVer() << (pu.cs->sps->getSpsNext().getUseHighPrecMv() ? 2 : 0)); -#endif } @@ -2574,33 +2546,18 @@ void InterSearch::xSetSearchRange ( const PredictionUnit& pu, , IntTZSearchStruct& cStruct ) { -#if !REMOVE_MV_ADAPT_PREC - const int iMvShift = cMvPred.highPrec ? 4 : 2; -#else -#if REMOVE_MV_ADAPT_PREC const int iMvShift = 2 + VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - const int iMvShift = 2; -#endif -#endif Mv cFPMvPred = cMvPred; -#if REMOVE_MV_ADAPT_PREC cFPMvPred.hor = cFPMvPred.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; cFPMvPred.ver = cFPMvPred.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( cFPMvPred, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif *pu.cs->sps ); -#if !REMOVE_MV_ADAPT_PREC - Mv mvTL(cFPMvPred.getHor() - (iSrchRng << iMvShift), cFPMvPred.getVer() - (iSrchRng << iMvShift), cFPMvPred.highPrec); - Mv mvBR(cFPMvPred.getHor() + (iSrchRng << iMvShift), cFPMvPred.getVer() + (iSrchRng << iMvShift), cFPMvPred.highPrec); -#else Mv mvTL(cFPMvPred.getHor() - (iSrchRng << iMvShift), cFPMvPred.getVer() - (iSrchRng << iMvShift)); Mv mvBR(cFPMvPred.getHor() + (iSrchRng << iMvShift), cFPMvPred.getVer() + (iSrchRng << iMvShift)); -#endif clipMv( mvTL, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND @@ -2687,9 +2644,6 @@ void InterSearch::xPatternSearch( IntTZSearchStruct& cStruct, } piRef += cStruct.iRefStride; } -#if !REMOVE_MV_ADAPT_PREC - CHECK(rcMv.highPrec, "Unexpected high precision MV."); -#endif rcMv.set( iBestX, iBestY ); cStruct.uiBestSad = uiSadBest; // th for testing @@ -2757,19 +2711,15 @@ void InterSearch::xTZSearch( const PredictionUnit& pu, const bool bNewZeroNeighbourhoodTest = bExtendedSettings; int iSearchRange = m_iSearchRange; -#if REMOVE_MV_ADAPT_PREC rcMv.hor = rcMv.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; rcMv.ver = rcMv.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( rcMv, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif *pu.cs->sps ); -#if REMOVE_MV_ADAPT_PREC rcMv.hor = rcMv.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; rcMv.ver = rcMv.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif rcMv.divideByPowerOf2(2); // init TZSearchStruct @@ -2802,19 +2752,15 @@ void InterSearch::xTZSearch( const PredictionUnit& pu, { Mv integerMv2Nx2NPred = *pIntegerMv2Nx2NPred; integerMv2Nx2NPred <<= 2; -#if REMOVE_MV_ADAPT_PREC integerMv2Nx2NPred.hor = integerMv2Nx2NPred.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; integerMv2Nx2NPred.ver = integerMv2Nx2NPred.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( integerMv2Nx2NPred, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif *pu.cs->sps ); -#if REMOVE_MV_ADAPT_PREC integerMv2Nx2NPred.hor = integerMv2Nx2NPred.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; integerMv2Nx2NPred.ver = integerMv2Nx2NPred.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif integerMv2Nx2NPred.divideByPowerOf2(2); if ((rcMv != integerMv2Nx2NPred) && @@ -3014,9 +2960,6 @@ void InterSearch::xTZSearch( const PredictionUnit& pu, } // write out best match -#if !REMOVE_MV_ADAPT_PREC - CHECK(rcMv.highPrec, "Unexpected high precision MV."); -#endif rcMv.set( cStruct.iBestX, cStruct.iBestY ); ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCostOfVectorWithPredictor( cStruct.iBestX, cStruct.iBestY, cStruct.imvShift ); } @@ -3043,19 +2986,15 @@ void InterSearch::xTZSearchSelective( const PredictionUnit& pu, int iStartX = 0; int iStartY = 0; int iDist = 0; -#if REMOVE_MV_ADAPT_PREC rcMv.hor = rcMv.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; rcMv.ver = rcMv.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( rcMv, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif *pu.cs->sps ); -#if REMOVE_MV_ADAPT_PREC rcMv.hor = rcMv.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; rcMv.ver = rcMv.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif rcMv.divideByPowerOf2(2); // init TZSearchStruct @@ -3082,19 +3021,15 @@ void InterSearch::xTZSearchSelective( const PredictionUnit& pu, { Mv integerMv2Nx2NPred = *pIntegerMv2Nx2NPred; integerMv2Nx2NPred <<= 2; -#if REMOVE_MV_ADAPT_PREC integerMv2Nx2NPred.hor = integerMv2Nx2NPred.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; integerMv2Nx2NPred.ver = integerMv2Nx2NPred.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv( integerMv2Nx2NPred, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif *pu.cs->sps ); -#if REMOVE_MV_ADAPT_PREC integerMv2Nx2NPred.hor = integerMv2Nx2NPred.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; integerMv2Nx2NPred.ver = integerMv2Nx2NPred.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif integerMv2Nx2NPred.divideByPowerOf2(2); xTZSearchHelp( cStruct, integerMv2Nx2NPred.getHor(), integerMv2Nx2NPred.getVer(), 0, 0); @@ -3179,9 +3114,6 @@ void InterSearch::xTZSearchSelective( const PredictionUnit& pu, } // write out best match -#if !REMOVE_MV_ADAPT_PREC - CHECK(rcMv.highPrec, "Unexpected high precision MV."); -#endif rcMv.set( cStruct.iBestX, cStruct.iBestY ); ruiSAD = cStruct.uiBestSad - m_pcRdCost->getCostOfVectorWithPredictor( cStruct.iBestX, cStruct.iBestY, cStruct.imvShift ); } @@ -3237,19 +3169,15 @@ void InterSearch::xPatternSearchIntRefine(PredictionUnit& pu, IntTZSearchStruct& if ( iMVPIdx == 0 || cTestMv[0] != cTestMv[1]) { Mv cTempMV = cTestMv[iMVPIdx]; -#if REMOVE_MV_ADAPT_PREC cTempMV.hor = cTempMV.hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; cTempMV.ver = cTempMV.ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif clipMv(cTempMV, pu.cu->lumaPos(), #if JVET_L0231_WRAPAROUND pu.cu->lumaSize(), #endif sps); -#if REMOVE_MV_ADAPT_PREC cTempMV.hor = cTempMV.hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; cTempMV.ver = cTempMV.ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif m_cDistParam.cur.buf = cStruct.piRefY + cStruct.iRefStride * (cTempMV.getVer() >> 2) + (cTempMV.getHor() >> 2); uiDist = uiSATD = (Distortion) (m_cDistParam.distFunc( m_cDistParam ) * fWeight); } @@ -3499,11 +3427,9 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, int mvScaleHor = nbMv[0].getHor() << shift; int mvScaleVer = nbMv[0].getVer() << shift; Mv dMv = nbMv[1] - nbMv[0]; -#if REMOVE_MV_ADAPT_PREC mvScaleHor <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvScaleVer <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; dMv <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif dMvHorX = dMv.getHor() << (shift - g_aucLog2[mvInfo->w]); dMvHorY = dMv.getVer() << (shift - g_aucLog2[mvInfo->w]); dMvVerX = -dMvHorY; @@ -3528,12 +3454,10 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, #endif *pu.cs->sps); mvTmp[1].roundMV2SignalPrecision(); -#if REMOVE_MV_ADAPT_PREC mvTmp[0].hor = mvTmp[0].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvTmp[0].ver = mvTmp[0].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvTmp[1].hor = mvTmp[1].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvTmp[1].ver = mvTmp[1].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif Distortion tmpCost = xGetAffineTemplateCost(pu, origBuf, predBuf, mvTmp, aaiMvpIdx[iRefList][iRefIdxTemp], AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdxTemp); if (tmpCost < uiCandCost) { @@ -3546,40 +3470,30 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, if ( pu.cu->affineType == AFFINEMODEL_6PARAM ) { Mv mvFour[3]; -#if REMOVE_MV_ADAPT_PREC mvAffine4Para[iRefList][iRefIdxTemp][0].hor = mvAffine4Para[iRefList][iRefIdxTemp][0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][0].ver = mvAffine4Para[iRefList][iRefIdxTemp][0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][1].hor = mvAffine4Para[iRefList][iRefIdxTemp][1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][1].ver = mvAffine4Para[iRefList][iRefIdxTemp][1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif mvFour[0] = mvAffine4Para[iRefList][iRefIdxTemp][0]; mvFour[1] = mvAffine4Para[iRefList][iRefIdxTemp][1]; -#if REMOVE_MV_ADAPT_PREC mvAffine4Para[iRefList][iRefIdxTemp][0].hor = mvAffine4Para[iRefList][iRefIdxTemp][0].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][0].ver = mvAffine4Para[iRefList][iRefIdxTemp][0].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][1].hor = mvAffine4Para[iRefList][iRefIdxTemp][1].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvAffine4Para[iRefList][iRefIdxTemp][1].ver = mvAffine4Para[iRefList][iRefIdxTemp][1].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif int shift = MAX_CU_DEPTH; int vx2 = (mvFour[0].getHor() << shift) - ((mvFour[1].getVer() - mvFour[0].getVer()) << (shift + g_aucLog2[pu.lheight()] - g_aucLog2[pu.lwidth()])); int vy2 = (mvFour[0].getVer() << shift) + ((mvFour[1].getHor() - mvFour[0].getHor()) << (shift + g_aucLog2[pu.lheight()] - g_aucLog2[pu.lwidth()])); vx2 >>= shift; vy2 >>= shift; -#if REMOVE_MV_ADAPT_PREC mvFour[2].hor = vx2; mvFour[2].ver = vy2; -#else - mvFour[2] = Mv(vx2, vy2, true); -#endif mvFour[2].roundMV2SignalPrecision(); -#if REMOVE_MV_ADAPT_PREC for (int i = 0; i < 3; i++) { mvFour[i].hor = mvFour[i].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvFour[i].ver = mvFour[i].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; } -#endif Distortion uiCandCostInherit = xGetAffineTemplateCost( pu, origBuf, predBuf, mvFour, aaiMvpIdx[iRefList][iRefIdxTemp], AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdxTemp ); if ( uiCandCostInherit < uiCandCost ) { @@ -3623,11 +3537,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, for (int iVerIdx = 0; iVerIdx < mvNum; iVerIdx++) { m_pcRdCost->setPredictor( cMvPred[iRefList][iRefIdxTemp][iVerIdx] ); -#if REMOVE_MV_ADAPT_PREC const int shift = 0; -#else - const int shift = cMvTemp[1][iRefIdxTemp][iVerIdx].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if ( iVerIdx != 0 ) { @@ -3758,9 +3668,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, // Get list1 prediction block PU::setAllAffineMv( pu, cMvBi[1][0], cMvBi[1][1], cMvBi[1][2], REF_PIC_LIST_1 -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[REF_PIC_LIST_1] = iRefIdxBi[1]; @@ -3827,9 +3735,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, if( iIter == 0 && !slice.getMvdL1ZeroFlag() ) { PU::setAllAffineMv( pu, aacMv[1-iRefList][0], aacMv[1-iRefList][1], aacMv[1-iRefList][2], RefPicList(1-iRefList) -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[1-iRefList] = iRefIdx[1-iRefList]; @@ -3906,9 +3812,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, { // Set motion PU::setAllAffineMv( pu, cMvBi[iRefList][0], cMvBi[iRefList][1], cMvBi[iRefList][2], eRefPicList -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[eRefPicList] = iRefIdxBi[eRefPicList]; PelUnitBuf predBufTmp = m_tmpPredStorage[iRefList].getBuf( UnitAreaRelative(*pu.cu, pu) ); @@ -3976,14 +3880,10 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, affineCost = uiCostBi; PU::setAllAffineMv( pu, cMvBi[0][0], cMvBi[0][1], cMvBi[0][2], REF_PIC_LIST_0 -#if REMOVE_MV_ADAPT_PREC , true -#endif ); PU::setAllAffineMv( pu, cMvBi[1][0], cMvBi[1][1], cMvBi[1][2], REF_PIC_LIST_1 -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[REF_PIC_LIST_0] = iRefIdxBi[0]; pu.refIdx[REF_PIC_LIST_1] = iRefIdxBi[1]; @@ -4012,9 +3912,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, affineCost = uiCost[0]; PU::setAllAffineMv( pu, aacMv[0][0], aacMv[0][1], aacMv[0][2], REF_PIC_LIST_0 -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[REF_PIC_LIST_0] = iRefIdx[0]; @@ -4037,9 +3935,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, affineCost = uiCost[1]; PU::setAllAffineMv( pu, aacMv[1][0], aacMv[1][1], aacMv[1][2], REF_PIC_LIST_1 -#if REMOVE_MV_ADAPT_PREC , true -#endif ); pu.refIdx[REF_PIC_LIST_1] = iRefIdx[1]; @@ -4154,11 +4050,7 @@ void InterSearch::xCheckBestAffineMVP( PredictionUnit &pu, AffineAMVPInfo &affin for ( int iVerIdx = 0; iVerIdx < mvNum; iVerIdx++ ) { m_pcRdCost->setPredictor ( acMvPred[iVerIdx] ); -#if REMOVE_MV_ADAPT_PREC const int shift = 0; -#else - const int shift = acMv[iVerIdx].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if ( iVerIdx != 0 ) @@ -4183,11 +4075,7 @@ void InterSearch::xCheckBestAffineMVP( PredictionUnit &pu, AffineAMVPInfo &affin { m_pcRdCost->setPredictor( iVerIdx == 2 ? affineAMVPInfo.mvCandLB[iMVPIdx] : (iVerIdx == 1 ? affineAMVPInfo.mvCandRT[iMVPIdx] : affineAMVPInfo.mvCandLT[iMVPIdx]) ); -#if REMOVE_MV_ADAPT_PREC const int shift = 0; -#else - const int shift = acMv[iVerIdx].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if ( iVerIdx != 0 ) @@ -4272,18 +4160,12 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, // Set start Mv position, use input mv as started search mv Mv acMvTemp[3]; ::memcpy( acMvTemp, acMv, sizeof(Mv)*3 ); -#if REMOVE_MV_ADAPT_PREC acMvTemp[0].hor = acMvTemp[0].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; acMvTemp[0].ver = acMvTemp[0].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; acMvTemp[1].hor = acMvTemp[1].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; acMvTemp[1].ver = acMvTemp[1].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; acMvTemp[2].hor = acMvTemp[2].hor << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; acMvTemp[2].ver = acMvTemp[2].ver << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - acMvTemp[0].setHighPrec(); - acMvTemp[1].setHighPrec(); - acMvTemp[2].setHighPrec(); -#endif // Set delta mv // malloc buffer @@ -4339,23 +4221,15 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, DTRACE( g_trace_ctx, D_COMMON, "#mvPredForBits=(%d,%d) \n", acMvPred[i].getHor(), acMvPred[i].getVer() ); m_pcRdCost->setPredictor( acMvPred[i] ); DTRACE( g_trace_ctx, D_COMMON, "#mvForBits=(%d,%d) \n", acMvTemp[i].getHor(), acMvTemp[i].getVer() ); -#if REMOVE_MV_ADAPT_PREC Mv mv0; mv0.hor = acMvTemp[0].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mv0.ver = acMvTemp[0].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int shift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - const int shift = acMvTemp[i].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if ( i != 0 ) { -#if REMOVE_MV_ADAPT_PREC secondPred.hor = acMvPred[i].hor + mv0.hor - acMvPred[0].hor; secondPred.ver = acMvPred[i].ver + mv0.ver - acMvPred[0].ver; -#else - secondPred = acMvPred[i] + (acMvTemp[0] - acMvPred[0]); -#endif m_pcRdCost->setPredictor( secondPred ); } uiBitsBest += m_pcRdCost->getBitsOfVectorWithPredictor( acMvTemp[i].getHor()>>shift, acMvTemp[i].getVer()>>shift, 0 ); @@ -4456,22 +4330,13 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, } acDeltaMv[0] = Mv( (int)(dDeltaMv[0] * 4 + SIGN( dDeltaMv[0] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE, (int)(dDeltaMv[2] * 4 + SIGN( dDeltaMv[2] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE -#if !REMOVE_MV_ADAPT_PREC - , true -#endif ); acDeltaMv[1] = Mv( (int)(dDeltaMv[1] * 4 + SIGN( dDeltaMv[1] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE, (int)(dDeltaMv[3] * 4 + SIGN( dDeltaMv[3] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE -#if !REMOVE_MV_ADAPT_PREC - , true -#endif ); if ( pu.cu->affineType == AFFINEMODEL_6PARAM ) { acDeltaMv[2] = Mv( (int)(dDeltaMv[4] * 4 + SIGN( dDeltaMv[4] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE, (int)(dDeltaMv[5] * 4 + SIGN( dDeltaMv[5] ) * 0.5) << VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE -#if !REMOVE_MV_ADAPT_PREC - , true -#endif ); } @@ -4514,23 +4379,15 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, for ( int i = 0; i < mvNum; i++ ) { m_pcRdCost->setPredictor( acMvPred[i] ); -#if REMOVE_MV_ADAPT_PREC Mv mv0; mv0.hor = acMvTemp[0].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mv0.ver = acMvTemp[0].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int shift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - const int shift = acMvTemp[i].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if ( i != 0 ) { -#if REMOVE_MV_ADAPT_PREC secondPred.hor = acMvPred[i].hor + mv0.hor - acMvPred[0].hor; secondPred.ver = acMvPred[i].ver + mv0.ver - acMvPred[0].ver; -#else - secondPred = acMvPred[i] + (acMvTemp[0] - acMvPred[0]); -#endif m_pcRdCost->setPredictor( secondPred ); } uiBitsTemp += m_pcRdCost->getBitsOfVectorWithPredictor( acMvTemp[i].getHor()>>shift, acMvTemp[i].getVer()>>shift, 0 ); @@ -4559,23 +4416,15 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, for (int i = 0; i < mvNum; i++) { m_pcRdCost->setPredictor(acMvPred[i]); -#if REMOVE_MV_ADAPT_PREC Mv mv0; mv0.hor = ctrlPtMv[0].hor >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mv0.ver = ctrlPtMv[0].ver >> VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int shift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#else - const int shift = ctrlPtMv[i].highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0; -#endif Mv secondPred; if (i != 0) { -#if REMOVE_MV_ADAPT_PREC secondPred.hor = acMvPred[i].hor + mv0.hor - acMvPred[0].hor; secondPred.ver = acMvPred[i].ver + mv0.ver - acMvPred[0].ver; -#else - secondPred = acMvPred[i] + (ctrlPtMv[0] - acMvPred[0]); -#endif m_pcRdCost->setPredictor(secondPred); } bitsTemp += m_pcRdCost->getBitsOfVectorWithPredictor(ctrlPtMv[i].getHor() >> shift, ctrlPtMv[i].getVer() >> shift, 0); @@ -4593,11 +4442,9 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, if (uiCostBest <= AFFINE_ME_LIST_MVP_TH*m_hevcCost) { Mv mvPredTmp[3] = { acMvPred[0], acMvPred[1], acMvPred[2] }; -#if REMOVE_MV_ADAPT_PREC mvPredTmp[0] <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvPredTmp[1] <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; mvPredTmp[2] <<= VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; -#endif Mv mvME[3]; ::memcpy(mvME, acMv, sizeof(Mv) * 3); Mv dMv = mvME[0] - mvPredTmp[0]; @@ -4658,7 +4505,6 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, } #endif -#if REMOVE_MV_ADAPT_PREC const int nShift = VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE; const int nOffset = 1 << (nShift - 1); acMv[0].hor = acMv[0].hor >= 0 ? (acMv[0].hor + nOffset) >> nShift : -((-acMv[0].hor + nOffset) >> nShift); @@ -4667,7 +4513,6 @@ void InterSearch::xAffineMotionEstimation( PredictionUnit& pu, acMv[1].ver = acMv[1].ver >= 0 ? (acMv[1].ver + nOffset) >> nShift : -((-acMv[1].ver + nOffset) >> nShift); acMv[2].hor = acMv[2].hor >= 0 ? (acMv[2].hor + nOffset) >> nShift : -((-acMv[2].hor + nOffset) >> nShift); acMv[2].ver = acMv[2].ver >= 0 ? (acMv[2].ver + nOffset) >> nShift : -((-acMv[2].ver + nOffset) >> nShift); -#endif // free buffer for (int i = 0; i<iParaNum; i++) @@ -4703,12 +4548,6 @@ void InterSearch::xEstimateAffineAMVP( PredictionUnit& pu, for( int i = 0 ; i < affineAMVPInfo.numCand; i++ ) { Mv mv[3] = { affineAMVPInfo.mvCandLT[i], affineAMVPInfo.mvCandRT[i], affineAMVPInfo.mvCandLB[i] }; -#if !REMOVE_MV_ADAPT_PREC - Mv mvTrace[3] = { affineAMVPInfo.mvCandLT[i], affineAMVPInfo.mvCandRT[i], affineAMVPInfo.mvCandLB[i] }; - mvTrace[0].setHighPrec(); - mvTrace[1].setHighPrec(); - mvTrace[2].setHighPrec(); -#endif Distortion uiTmpCost = xGetAffineTemplateCost( pu, origBuf, predBuf, mv, i, AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdx ); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 64821df89..20dd44479 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -531,9 +531,6 @@ void HLSWriter::codeSPSNext( const SPSNext& spsNext, const bool usePCM ) WRITE_FLAG( spsNext.getUseLargeCTU() ? 1 : 0, "large_ctu_flag" ); WRITE_FLAG(spsNext.getUseSubPuMvp() ? 1 : 0, "subpu_tmvp_flag"); WRITE_FLAG( spsNext.getUseIMV() ? 1 : 0, "imv_enable_flag" ); -#if !REMOVE_MV_ADAPT_PREC - WRITE_FLAG( spsNext.getUseHighPrecMv() ? 1 : 0, "high_precision_motion_vectors"); -#endif #if JVET_L0256_BIO WRITE_FLAG( spsNext.getUseBIO() ? 1 : 0, "bio_enable_flag" ); #endif -- GitLab