Commit 3571143b authored by Xiang Li's avatar Xiang Li

Merge branch 'revert-a1eb7ddb' into 'master'

Revert "Merge branch 'High_Precision_Motion_Vector_Storage' into 'master'"

See merge request !110
parents be7c77dc 05f8d980
Pipeline #106 pending with stage
......@@ -121,6 +121,7 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......
......@@ -121,7 +121,7 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......
......@@ -135,6 +135,7 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......@@ -157,4 +158,3 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -241,9 +241,7 @@ void EncApp::xInitLibCfg()
#endif
#endif
#if JEM_TOOLS
#if !REMOVE_MV_ADAPT_PREC
m_cEncLib.setHighPrecisionMv ( m_highPrecisionMv );
#endif
m_cEncLib.setAffine ( m_Affine );
#if JVET_K0337_AFFINE_6PARA
m_cEncLib.setAffineType ( m_AffineType );
......
......@@ -833,14 +833,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
("SubPuMvp", m_SubPuMvpMode, 0, "Enable Sub-PU temporal motion vector prediction (0:off, 1:on) [default: off]")
#endif
("SubPuMvpLog2Size", m_SubPuMvpLog2Size, 2u, "Sub-PU TMVP size index: 2^n")
#if !REMOVE_MV_ADAPT_PREC
("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]")
#endif
("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]")
#endif
#if JEM_TOOLS || JVET_K_AFFINE
#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]")
#if JVET_K0337_AFFINE_6PARA
( "AffineType", m_AffineType, true, "Enable affine type prediction (0:off, 1:on) [default: on]" )
......@@ -2126,9 +2122,7 @@ bool EncAppCfg::xCheckParameter()
xConfirmPara( !( m_OBMCBlkSize == 4 || m_OBMCBlkSize == 8 ), "OBMC Block Size must be set to 4 or 8 samples" );
#endif
#if JVET_K_AFFINE
#if !REMOVE_MV_ADAPT_PREC
xConfirmPara(m_Affine && !m_highPrecisionMv, "Affine is not yet implemented for HighPrecMv off.");
#endif
xConfirmPara( m_Affine && !m_highPrecisionMv, "Affine is not yet implemented for HighPrecMv off." );
#endif
#if JEM_TOOLS
xConfirmPara( m_DMVR && !m_QTBT, "DMVR without QTBT results in encoder-decoder mismatch!" );
......@@ -3409,15 +3403,11 @@ void EncAppCfg::xPrintParameter()
#endif
#endif
#if JEM_TOOLS
#if !REMOVE_MV_ADAPT_PREC
msg( VERBOSE, "HighPrecMv:%d ", m_highPrecisionMv );
#endif
msg( VERBOSE, "BIO:%d ", m_BIO );
#endif
#if !JEM_TOOLS && (JVET_K0346 || JVET_K_AFFINE)
#if !REMOVE_MV_ADAPT_PREC
msg( VERBOSE, "HighPrecMv:%d ", m_highPrecisionMv );
#endif
msg(VERBOSE, "HighPrecMv:%d ", m_highPrecisionMv);
#endif
msg( VERBOSE, "DisMDC:%d ", m_DisableMotionCompression );
#if JEM_TOOLS
......
......@@ -769,11 +769,7 @@ void MergeCtx::setMergeInfo( PredictionUnit& pu, int candIdx )
{
pu.cu->ibc = true;
pu.bv = pu.mv[REF_PIC_LIST_0];
#if REMOVE_MV_ADAPT_PREC
pu.bv >>= (2 + VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE);
#else
pu.bv >>= 2; // used for only integer resolution
#endif
}
#endif
#if JEM_TOOLS
......
This diff is collapsed.
......@@ -324,11 +324,8 @@ protected:
#endif
void xFrucUpdateTemplate (PredictionUnit& pu, int nWidth, int nHeight, RefPicList eCurRefPicList, const MvField& rCurMvField );
#if REMOVE_MV_ADAPT_PREC
void xFrucInsertMv2StartList (const MvField & rMvField, std::list<MvField> & rList);
#else
void xFrucInsertMv2StartList (const MvField & rMvField, std::list<MvField> & rList, bool setHighPrec);
#endif
void xFrucInsertMv2StartList (const MvField & rMvField, std::list<MvField> & rList,bool setHighPrec);
bool xFrucIsInList (const MvField & rMvField, std::list<MvField> & rList);
bool xFrucGetCurBlkTemplate (PredictionUnit& pu, int nCurBlkWidth , int nCurBlkHeight);
......
......@@ -506,18 +506,14 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
int nThreshold = 4;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if !REMOVE_MV_ADAPT_PREC
if (cu.cs->sps->getSpsNext().getUseHighPrecMv())
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
#endif
unsigned uiBs = 0;
......@@ -573,16 +569,12 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
int nThreshold = 4;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if !REMOVE_MV_ADAPT_PREC
if (cu.cs->sps->getSpsNext().getUseHighPrecMv())
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
#endif
return ( ( abs( mvQ0.getHor() - mvP0.getHor() ) >= nThreshold ) || ( abs( mvQ0.getVer() - mvP0.getVer() ) >= nThreshold ) ) ? 1 : 0;
}
......
......@@ -44,9 +44,7 @@
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
if( rMV.highPrec ) imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE;
int offset = 1 << ( imvShift - 1 );
rMV.setHor( ( ( rMV.getHor() + offset ) >> imvShift ) << imvShift );
......@@ -65,13 +63,10 @@ void roundAffineMv( int& mvx, int& mvy, int nShift )
void clipMv( Mv& rcMv, const Position& pos, const SPS& sps )
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
int iMvShift = 2 + (rcMv.highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0);
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
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;
......
......@@ -53,7 +53,7 @@ class Mv
public:
int hor; ///< horizontal component of motion vector
int ver; ///< vertical component of motion vector
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
bool highPrec;///< true if the vector is high precision
#endif
......@@ -61,7 +61,7 @@ public:
// constructors
// ------------------------------------------------------------------------------------------------------------------
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
Mv( ) : hor( 0 ), ver( 0 ), highPrec( false ) {}
Mv( int iHor, int iVer, bool _highPrec = false ) : hor( iHor ), ver( iVer ), highPrec( _highPrec ) {}
#if DMVR_JVET_K0217
......@@ -80,33 +80,9 @@ public:
return (hor == 0 && ver == 0);
}
#endif
#else
#if JEM_TOOLS
#if REMOVE_MV_ADAPT_PREC && DMVR_JVET_K0217
Mv() : hor(0), ver(0) {}
Mv(int iHor, int iVer) : hor(iHor), ver(iVer) {}
// explicit Mv(const Mv &newMv) : hor(newMv.hor), ver(newMv.ver) {} // use default copy constructor
explicit Mv(int iHorAndiVer) : hor(iHorAndiVer), ver(iHorAndiVer) {}
Mv operator << (int i)
{
return Mv(hor << i, ver << i);
}
Mv operator - (void)
{
return Mv(-hor, -ver);
}
bool IsZero(void)
{
return (hor == 0 && ver == 0);
}
#else
Mv() : hor(0), ver(0) {}
Mv(int iHor, int iVer) : hor(iHor), ver(iVer) {}
#endif
#else
Mv( ) : hor( 0 ), ver( 0 ) {}
Mv( int iHor, int iVer ) : hor( iHor ), ver( iVer ) {}
#endif
#endif
// ------------------------------------------------------------------------------------------------------------------
......@@ -133,7 +109,7 @@ public:
const Mv& operator += (const Mv& _rcMv)
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( highPrec == _rcMv.highPrec )
{
hor += _rcMv.hor;
......@@ -144,7 +120,7 @@ public:
{
Mv rcMv = _rcMv;
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec();
if( !highPrec && rcMv.highPrec ) setHighPrec();
#endif
......@@ -156,7 +132,7 @@ public:
const Mv& operator-= (const Mv& _rcMv)
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( highPrec == _rcMv.highPrec )
{
hor -= _rcMv.hor;
......@@ -167,7 +143,7 @@ public:
{
Mv rcMv = _rcMv;
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec();
if( !highPrec && rcMv.highPrec ) setHighPrec();
#endif
......@@ -206,7 +182,7 @@ public:
const Mv operator - ( const Mv& rcMv ) const
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( rcMv.highPrec == highPrec )
{
return Mv( hor - rcMv.hor, ver - rcMv.ver, highPrec );
......@@ -225,7 +201,7 @@ public:
const Mv operator + ( const Mv& rcMv ) const
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( rcMv.highPrec == highPrec )
{
return Mv( hor + rcMv.hor, ver + rcMv.ver, highPrec );
......@@ -244,7 +220,7 @@ public:
bool operator== ( const Mv& rcMv ) const
{
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( rcMv.highPrec == highPrec )
{
return ( hor == rcMv.hor && ver == rcMv.ver );
......@@ -271,7 +247,7 @@ 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 (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
return Mv( mvx, mvy, highPrec );
#else
return Mv( mvx, mvy );
......@@ -281,40 +257,29 @@ public:
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
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;
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;
}
#endif
#if !REMOVE_MV_ADAPT_PREC
void setHighPrec()
{
if (highPrec) return;
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
#endif
};// END CLASS DEFINITION MV
#if JVET_K0076_CPR
namespace std
......
......@@ -187,10 +187,10 @@ public:
void setPredictor ( const Mv& rcMv )
{
m_mvPredictor = rcMv;
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if (m_mvPredictor.highPrec)
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
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);
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
}
......
......@@ -1836,15 +1836,11 @@ SPSNext::SPSNext( SPS& sps )
#endif
#endif
#if JEM_TOOLS
#if !REMOVE_MV_ADAPT_PREC
, m_highPrecMv ( false )
#endif
, m_BIO ( false )
#endif
#if !JEM_TOOLS && (JVET_K0346 || JVET_K_AFFINE)
#if !REMOVE_MV_ADAPT_PREC
, m_highPrecMv ( false )
#endif
#endif
, m_DisableMotionCompression ( false )
#if JEM_TOOLS
......
......@@ -829,15 +829,11 @@ private:
#endif
#endif
#if JEM_TOOLS
#if !REMOVE_MV_ADAPT_PREC
bool m_highPrecMv; // 11
#endif
bool m_BIO; // 12
#endif
#if !JEM_TOOLS && (JVET_K0346 || JVET_K_AFFINE)
#if !REMOVE_MV_ADAPT_PREC
bool m_highPrecMv;
#endif
#endif
bool m_DisableMotionCompression; // 13
#if JEM_TOOLS
......@@ -1020,18 +1016,14 @@ public:
#endif
#endif
#if JEM_TOOLS
#if !REMOVE_MV_ADAPT_PREC
void setUseHighPrecMv (bool b) { m_highPrecMv = b; }
void setUseHighPrecMv ( bool b ) { m_highPrecMv = b; }
bool getUseHighPrecMv () const { return m_highPrecMv; }
#endif
void setUseBIO ( bool b ) { m_BIO = b; }
bool getUseBIO () const { return m_BIO; }
#endif
#if !JEM_TOOLS && (JVET_K0346 || JVET_K_AFFINE)
#if !REMOVE_MV_ADAPT_PREC
void setUseHighPrecMv (bool b) { m_highPrecMv = b; }
bool getUseHighPrecMv () const { return m_highPrecMv; }
#endif
void setUseHighPrecMv(bool b) { m_highPrecMv = b; }
bool getUseHighPrecMv() const { return m_highPrecMv; }
#endif
void setDisableMotCompress ( bool b ) { m_DisableMotionCompression = b; }
bool getDisableMotCompress () const { return m_DisableMotionCompression; }
......
......@@ -128,8 +128,6 @@
#define JVET_K0357_AMVR 1 // Adaptive motion vector resolution separated from JEM_TOOLS macro
#define REMOVE_MV_ADAPT_PREC 1 // remove the high precision flag in the MV class
#if JVET_K0485_BIO
#define JVET_K0485_BIO_EXTEND_SIZE 1
#endif
......
This diff is collapsed.
......@@ -189,22 +189,14 @@ namespace PU
#if JEM_TOOLS
bool isAffineMrgFlagCoded (const PredictionUnit &pu );
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
);
void setAllAffineMv ( PredictionUnit &pu, Mv affLT, Mv affRT, Mv affLB, RefPicList eRefList );
bool isBIOLDB (const PredictionUnit &pu);
#endif
#if !JEM_TOOLS && JVET_K_AFFINE
bool isAffineMrgFlagCoded (const PredictionUnit &pu );
void getAffineMergeCand (const PredictionUnit &pu, MvField (*mvFieldNeighbours)[3], unsigned char &interDirNeighbours, int &numValidMergeCand );
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
);
void setAllAffineMv ( PredictionUnit &pu, Mv affLT, Mv affRT, Mv affLB, RefPicList eRefList );
#endif
#if !JEM_TOOLS && JVET_K0346
bool getInterMergeSubPuMvpCand(const PredictionUnit &pu, MergeCtx &mrgCtx, bool& LICFlag, const int count
......
......@@ -264,10 +264,7 @@ 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 );
......@@ -374,15 +371,8 @@ 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 JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#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
#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);
......@@ -392,15 +382,8 @@ 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 JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#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
#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);
......@@ -418,18 +401,9 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea)
mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_0];
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
// 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
#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);
}
......@@ -442,18 +416,9 @@ void writeAllData(const CodingStructure& cs, const UnitArea& ctuArea)
mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_1];
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
// 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
#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);
}
......@@ -542,10 +507,6 @@ 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++)
......@@ -724,16 +685,9 @@ 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 JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#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
#endif
#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);
}
......@@ -742,16 +696,9 @@ 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 JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#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
#endif
#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::MVL1), mv.hor, mv.ver);
}
......@@ -768,19 +715,10 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea)
mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_0];
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
// 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
#endif
#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 */)
......@@ -792,19 +730,10 @@ void writeAllCodedData(const CodingStructure & cs, const UnitArea & ctuArea)
mv[2] = mb.at(0, mb.height - 1).mv[REF_PIC_LIST_1];
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE