Commit c180eab1 authored by Johannes Sauer's avatar Johannes Sauer
Browse files

Merge remote-tracking branch 'hhi_git/master' into K0149_Blockstatistics_bms2.1

parents cda56abf 4cca058b
......@@ -105,7 +105,6 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......@@ -127,3 +126,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -105,7 +105,6 @@ MTT : 1
EMT : 1
EMTFast : 1
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1 # use CCLM only
......@@ -121,3 +120,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -121,7 +121,6 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......@@ -143,3 +142,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -121,7 +121,6 @@ MTT : 1
EMT : 1
EMTFast : 1
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1 # use CCLM only
......@@ -137,3 +136,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -121,7 +121,6 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......@@ -143,3 +142,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -121,7 +121,6 @@ MTT : 1
EMT : 1
EMTFast : 1
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1 # use CCLM only
......@@ -137,3 +136,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -110,7 +110,7 @@ RCForceIntraQP : 0 # Rate control: force int
#============ JEM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
SEIDecodedPictureHash : 1
CbQpOffset : 0
CrQpOffset : 0
......@@ -135,7 +135,6 @@ MTT : 1
EMT : 3
EMTFast : 3
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1
......@@ -158,3 +157,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -135,7 +135,6 @@ MTT : 1
EMT : 1
EMTFast : 1
Affine : 1
HighPrecMv : 1
SubPuMvp : 1
MaxNumMergeCand : 6
LMChroma : 1 # use CCLM only
......@@ -151,3 +150,4 @@ AMaxBT : 1
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......@@ -241,7 +241,9 @@ 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,10 +833,14 @@ 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")
("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]")
#if !REMOVE_MV_ADAPT_PREC
("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]")
#endif
#endif
#if JEM_TOOLS || JVET_K_AFFINE
("HighPrecMv", m_highPrecisionMv, false, "High precision motion vectors for temporal merging (0:off, 1:on) [default: off]")
#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]" )
......@@ -2122,7 +2126,9 @@ 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
xConfirmPara( m_Affine && !m_highPrecisionMv, "Affine is not yet implemented for HighPrecMv off." );
#if !REMOVE_MV_ADAPT_PREC
xConfirmPara(m_Affine && !m_highPrecisionMv, "Affine is not yet implemented for HighPrecMv off.");
#endif
#endif
#if JEM_TOOLS
xConfirmPara( m_DMVR && !m_QTBT, "DMVR without QTBT results in encoder-decoder mismatch!" );
......@@ -3403,11 +3409,15 @@ void EncAppCfg::xPrintParameter()
#endif
#endif
#if JEM_TOOLS
msg( VERBOSE, "HighPrecMv:%d ", m_highPrecisionMv );
#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
#endif
msg( VERBOSE, "DisMDC:%d ", m_DisableMotionCompression );
#if JEM_TOOLS
......
......@@ -564,13 +564,7 @@ cTUTraverser CodingStructure::traverseTUs( const UnitArea& unit, const ChannelTy
void CodingStructure::allocateVectorsAtPicLevel()
{
const int twice = (
#if JVET_K0076_CPR_DT
(!pcv->ISingleTree && (slice->isIntra() || this->slice->getCprIsOnlyRefPic()))
#else
!pcv->ISingleTree && slice->isIntra()
#endif
&& pcv->chrFormat != CHROMA_400 ) ? 2 : 1;
const int twice = ( !pcv->ISingleTree && slice->isIRAP() && pcv->chrFormat != CHROMA_400 ) ? 2 : 1;
size_t allocSize = twice * unitScale[0].scale( area.blocks[0].size() ).area();
cus.reserve( allocSize );
......
......@@ -769,7 +769,13 @@ void MergeCtx::setMergeInfo( PredictionUnit& pu, int candIdx )
{
pu.cu->ibc = true;
pu.bv = pu.mv[REF_PIC_LIST_0];
#if REMOVE_MV_ADAPT_PREC
const int shift = 2 + VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE;
pu.bv.hor = pu.bv.hor >> shift;
pu.bv.ver = pu.bv.ver >> shift;
#else
pu.bv >>= 2; // used for only integer resolution
#endif
}
#endif
#if JEM_TOOLS
......
This diff is collapsed.
......@@ -324,8 +324,11 @@ protected:
#endif
void xFrucUpdateTemplate (PredictionUnit& pu, int nWidth, int nHeight, RefPicList eCurRefPicList, const MvField& rCurMvField );
void xFrucInsertMv2StartList (const MvField & rMvField, std::list<MvField> & rList,bool setHighPrec);
#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
bool xFrucIsInList (const MvField & rMvField, std::list<MvField> & rList);
bool xFrucGetCurBlkTemplate (PredictionUnit& pu, int nCurBlkWidth , int nCurBlkHeight);
......
......@@ -506,14 +506,18 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
int nThreshold = 4;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( cu.cs->sps->getSpsNext().getUseHighPrecMv() )
#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
#endif
unsigned uiBs = 0;
......@@ -569,12 +573,16 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
int nThreshold = 4;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
if( cu.cs->sps->getSpsNext().getUseHighPrecMv() )
#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
#endif
return ( ( abs( mvQ0.getHor() - mvP0.getHor() ) >= nThreshold ) || ( abs( mvQ0.getVer() - mvP0.getVer() ) >= nThreshold ) ) ? 1 : 0;
}
......
......@@ -44,7 +44,9 @@
void roundMV( Mv & rMV, unsigned imvShift )
{
CHECK( imvShift == 0, "roundMV called for imvShift=0" );
if( rMV.highPrec ) imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE;
#if !REMOVE_MV_ADAPT_PREC
if (rMV.highPrec) imvShift += VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE;
#endif
int offset = 1 << ( imvShift - 1 );
rMV.setHor( ( ( rMV.getHor() + offset ) >> imvShift ) << imvShift );
......@@ -63,10 +65,13 @@ 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
int iMvShift = 2 + ( rcMv.highPrec ? VCEG_AZ07_MV_ADD_PRECISION_BIT_FOR_STORE : 0 );
#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);
#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
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
bool highPrec;///< true if the vector is high precision
#endif
......@@ -61,7 +61,7 @@ public:
// constructors
// ------------------------------------------------------------------------------------------------------------------
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !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 ) {}
#if DMVR_JVET_K0217
......@@ -80,9 +80,33 @@ 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
// ------------------------------------------------------------------------------------------------------------------
......@@ -109,7 +133,7 @@ public:
const Mv& operator += (const Mv& _rcMv)
{
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( highPrec == _rcMv.highPrec )
{
hor += _rcMv.hor;
......@@ -120,7 +144,7 @@ public:
{
Mv rcMv = _rcMv;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec();
if( !highPrec && rcMv.highPrec ) setHighPrec();
#endif
......@@ -132,7 +156,7 @@ public:
const Mv& operator-= (const Mv& _rcMv)
{
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( highPrec == _rcMv.highPrec )
{
hor -= _rcMv.hor;
......@@ -143,7 +167,7 @@ public:
{
Mv rcMv = _rcMv;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( highPrec && !rcMv.highPrec ) rcMv.setHighPrec();
if( !highPrec && rcMv.highPrec ) setHighPrec();
#endif
......@@ -182,7 +206,7 @@ public:
const Mv operator - ( const Mv& rcMv ) const
{
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( rcMv.highPrec == highPrec )
{
return Mv( hor - rcMv.hor, ver - rcMv.ver, highPrec );
......@@ -201,7 +225,7 @@ public:
const Mv operator + ( const Mv& rcMv ) const
{
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( rcMv.highPrec == highPrec )
{
return Mv( hor + rcMv.hor, ver + rcMv.ver, highPrec );
......@@ -220,7 +244,7 @@ public:
bool operator== ( const Mv& rcMv ) const
{
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
if( rcMv.highPrec == highPrec )
{
return ( hor == rcMv.hor && ver == rcMv.ver );
......@@ -247,7 +271,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
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !REMOVE_MV_ADAPT_PREC
return Mv( mvx, mvy, highPrec );
#else
return Mv( mvx, mvy );
......@@ -257,11 +281,20 @@ 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;
......@@ -280,6 +313,7 @@ public:
highPrec = true;
}
#endif
#endif
};// END CLASS DEFINITION MV
#if JVET_K0076_CPR
namespace std
......
......@@ -799,11 +799,7 @@ void Quant::quant(TransformUnit &tu, const ComponentID &compID, const CCoeffBuf
const int iQBits = QUANT_SHIFT + cQP.per + iTransformShift;
// QBits will be OK for any internal bit depth as the reduction in transform shift is balanced by an increase in Qp_per due to QpBDOffset
const int64_t iAdd = int64_t(tu.cs->slice->getSliceType() == I_SLICE
#if JVET_K0076_CPR
|| (tu.cs->slice->getNumRefIdx(REF_PIC_LIST_0) == 1 && tu.cs->slice->getSPS()->getSpsNext().getIBCMode())
#endif
? 171 : 85) << int64_t(iQBits - 9);
const int64_t iAdd = int64_t(tu.cs->slice->isIRAP() ? 171 : 85) << int64_t(iQBits - 9);
#if HEVC_USE_SIGN_HIDING
const int qBits8 = iQBits - 8;
#endif
......
......@@ -187,7 +187,7 @@ public:
void setPredictor ( const Mv& rcMv )
{
m_mvPredictor = rcMv;
#if JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE
#if (JEM_TOOLS || JVET_K0346 || JVET_K_AFFINE) && !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 );
......
......@@ -136,9 +136,6 @@ Slice::Slice()
, m_iProcessingStartTime ( 0 )
, m_dProcessingTime ( 0 )
, m_uiMaxBTSize ( 0 )
#if JVET_K0076_CPR
, m_bCprIsOnlyRefPic ( false )
#endif
{
for(uint32_t i=0; i<NUM_REF_PIC_LIST_01; i++)
{
......@@ -1839,11 +1836,15 @@ 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
......@@ -2726,12 +2727,7 @@ void calculateParameterSetChangedFlag(bool &bChanged, const std::vector<uint8_t>
uint32_t PreCalcValues::getValIdx( const Slice &slice, const ChannelType chType ) const
{
#if JVET_K0076_CPR_DT
return (slice.isIntra() || slice.getCprIsOnlyRefPic())
? (ISingleTree ? 0 : (chType << 1)) : 1;
#else
return slice.isIntra() ? ( ISingleTree ? 0 : ( chType << 1 ) ) : 1;
#endif
return slice.isIRAP() ? ( ISingleTree ? 0 : ( chType << 1 ) ) : 1;
}
uint32_t PreCalcValues::getMaxBtDepth( const Slice &slice, const ChannelType chType ) const
......@@ -2746,12 +2742,7 @@ uint32_t PreCalcValues::getMinBtSize( const Slice &slice, const ChannelType chTy
uint32_t PreCalcValues::getMaxBtSize( const Slice &slice, const ChannelType chType ) const
{
#if JVET_K0076_CPR_DT
return ((!slice.isIntra() && !slice.getCprIsOnlyRefPic())
|| isLuma(chType) || ISingleTree) ? slice.getMaxBTSize() : MAX_BT_SIZE_C;
#else
return ( !slice.isIntra() || isLuma( chType ) || ISingleTree ) ? slice.getMaxBTSize() : MAX_BT_SIZE_C;
#endif
return ( !slice.isIRAP() || isLuma( chType ) || ISingleTree ) ? slice.getMaxBTSize() : MAX_BT_SIZE_C;
}
uint32_t PreCalcValues::getMinTtSize( const Slice &slice, const ChannelType chType ) const
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment