Commit 14f8598c authored by Adam Wieckowski's avatar Adam Wieckowski

fixes to ENABLE_SPLIT_PARALLELISM

parent 46e8a1d5
......@@ -1003,6 +1003,8 @@ void Picture::finishParallelPart( const UnitArea& area )
const int destID = scheduler.getSplitPicId( tId );
M_BUFS( destID, PIC_RECONSTRUCTION ).subBuf( clipdArea ).copyFrom( M_BUFS( sourceID, PIC_RECONSTRUCTION ).subBuf( clipdArea ) );
M_BUFS( destID, PIC_PREDICTION ) .copyFrom( M_BUFS( sourceID, PIC_PREDICTION ) );
M_BUFS( destID, PIC_RESIDUAL ) .copyFrom( M_BUFS( sourceID, PIC_RESIDUAL ) );
}
}
......@@ -1088,12 +1090,20 @@ void Picture::extendPicBorder()
PelBuf Picture::getBuf( const ComponentID compID, const PictureType &type )
{
return M_BUFS( type == PIC_ORIGINAL ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#if JVET_M0427_INLOOP_RESHAPER
return M_BUFS( ( type == PIC_ORIGINAL || type == PIC_TRUE_ORIGINAL ) ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#else
return M_BUFS( ( type == PIC_ORIGINAL ) ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#endif
}
const CPelBuf Picture::getBuf( const ComponentID compID, const PictureType &type ) const
{
return M_BUFS( type == PIC_ORIGINAL ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#if JVET_M0427_INLOOP_RESHAPER
return M_BUFS( ( type == PIC_ORIGINAL || type == PIC_TRUE_ORIGINAL ) ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#else
return M_BUFS( ( type == PIC_ORIGINAL ) ? 0 : scheduler.getSplitPicId(), type ).getBuf( compID );
#endif
}
PelBuf Picture::getBuf( const CompArea &blk, const PictureType &type )
......@@ -1104,7 +1114,11 @@ PelBuf Picture::getBuf( const CompArea &blk, const PictureType &type )
}
#if ENABLE_SPLIT_PARALLELISM
const int jId = type == PIC_ORIGINAL ? 0 : scheduler.getSplitPicId();
#if JVET_M0427_INLOOP_RESHAPER
const int jId = ( type == PIC_ORIGINAL || type == PIC_TRUE_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#else
const int jId = ( type == PIC_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#endif
#endif
#if !KEEP_PRED_AND_RESI_SIGNALS
......@@ -1129,7 +1143,11 @@ const CPelBuf Picture::getBuf( const CompArea &blk, const PictureType &type ) co
}
#if ENABLE_SPLIT_PARALLELISM
const int jId = type == PIC_ORIGINAL ? 0 : scheduler.getSplitPicId();
#if JVET_M0427_INLOOP_RESHAPER
const int jId = ( type == PIC_ORIGINAL || type == PIC_TRUE_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#else
const int jId = ( type == PIC_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#endif
#endif
#if !KEEP_PRED_AND_RESI_SIGNALS
......@@ -1173,7 +1191,11 @@ const CPelUnitBuf Picture::getBuf( const UnitArea &unit, const PictureType &type
Pel* Picture::getOrigin( const PictureType &type, const ComponentID compID ) const
{
#if ENABLE_SPLIT_PARALLELISM
const int jId = type == PIC_ORIGINAL ? 0 : scheduler.getSplitPicId();
#if JVET_M0427_INLOOP_RESHAPER
const int jId = ( type == PIC_ORIGINAL || type == PIC_TRUE_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#else
const int jId = ( type == PIC_ORIGINAL ) ? 0 : scheduler.getSplitPicId();
#endif
#endif
return M_BUFS( jId, type ).getOrigin( compID );
......
......@@ -191,6 +191,10 @@ void RdCost::copyState( const RdCost& other )
m_motionLambda = other.m_motionLambda;
m_iCostScale = other.m_iCostScale;
memcpy( m_dLambdaMotionSAD, other.m_dLambdaMotionSAD, sizeof( m_dLambdaMotionSAD ) );
#if WCG_EXT
m_dLambda_unadjusted = other.m_dLambda_unadjusted ;
m_DistScaleUnadjusted = other.m_DistScaleUnadjusted;
#endif
}
#endif
......
......@@ -69,7 +69,11 @@ protected:
int m_reshapeLUTSize;
public:
Reshape();
#if ENABLE_SPLIT_PARALLELISM
virtual ~Reshape();
#else
~Reshape();
#endif
void createDec(int bitDepth);
void destroy();
......
......@@ -81,7 +81,7 @@
#define FIX_DB_MAX_TRANSFORM_SIZE 1
#define JVET_M0908_CIIP_DB 1
#define JVET_M0471_LONG_DEBLOCKING_FILTERS 1
#define JVET_M0427_INLOOP_RESHAPER 0
#define JVET_M0427_INLOOP_RESHAPER 1
#define JVET_M0470 1 // Fixed GR/TU+EG-k transition point, use limited prefix length for escape codes
#define JVET_M0253_HASH_ME 1
......@@ -185,7 +185,7 @@ typedef std::pair<int, int> TrCost;
#define ENABLE_JVET_L0283_MRL 1 // 1: Enable MRL, 0: Disable MRL
#define JVET_L0090_PAIR_AVG 1 // Add pairwise average candidates, replace HEVC combined candidates
#define REUSE_CU_RESULTS 0
#define REUSE_CU_RESULTS 1
#if REUSE_CU_RESULTS && JVET_M0102_INTRA_SUBPARTITIONS
#define REUSE_CU_RESULTS_WITH_MULTIPLE_TUS 1
#define MAX_NUM_TUS 4
......
......@@ -327,7 +327,9 @@ void EncCu::compressCtu( CodingStructure& cs, const UnitArea& area, const unsign
#if REUSE_CU_RESULTS
BestEncInfoCache* bestCache = dynamic_cast< BestEncInfoCache* >( jobEncCu->m_modeCtrl );
#endif
#if JVET_M0140_SBT
SaveLoadEncInfoSbt *sbtCache = dynamic_cast< SaveLoadEncInfoSbt* >( jobEncCu->m_modeCtrl );
#endif
if( cacheCtrl )
{
cacheCtrl->init( *cs.slice );
......@@ -338,10 +340,12 @@ void EncCu::compressCtu( CodingStructure& cs, const UnitArea& area, const unsign
bestCache->init(*cs.slice);
}
#endif
#if JVET_M0140_SBT
if (sbtCache)
{
sbtCache->init(*cs.slice);
}
#endif
}
}
......@@ -1065,16 +1069,9 @@ void EncCu::xCompressCUParallel( CodingStructure *&tempCS, CodingStructure *&bes
jobPartitioner->copyState( partitioner );
jobCuEnc ->copyState( this, *jobPartitioner, currArea, true );
if( jobBlkCache )
{
jobBlkCache->tick();
}
if( jobBlkCache ) { jobBlkCache ->tick(); }
#if REUSE_CU_RESULTS
if( jobBestCache )
{
jobBestCache->tick();
}
if( jobBestCache ) { jobBestCache->tick(); }
#endif
CodingStructure *&jobBest = jobCuEnc->m_pBestCS[wIdx][hIdx];
......@@ -1167,7 +1164,11 @@ void EncCu::copyState( EncCu* other, Partitioner& partitioner, const UnitArea& c
const CodingStructure* src = other->m_pBestCS[wIdx][hIdx];
bool keepResi = KEEP_PRED_AND_RESI_SIGNALS;
#if JVET_M0427_INLOOP_RESHAPER
dst->useSubStructure( *src, partitioner.chType, currArea, true, true, keepResi, true );
#else
dst->useSubStructure( *src, partitioner.chType, currArea, KEEP_PRED_AND_RESI_SIGNALS, true, keepResi, keepResi );
#endif
dst->cost = src->cost;
dst->dist = src->dist;
dst->fracBits = src->fracBits;
......@@ -1183,7 +1184,14 @@ void EncCu::copyState( EncCu* other, Partitioner& partitioner, const UnitArea& c
m_modeCtrl ->copyState( *other->m_modeCtrl, partitioner.currArea() );
m_pcRdCost ->copyState( *other->m_pcRdCost );
m_pcTrQuant ->copyState( *other->m_pcTrQuant );
//m_pcReshape ->copyState( *other->m_pcReshape );
#if JVET_M0427_INLOOP_RESHAPER
if( m_pcEncCfg->getReshaper() )
{
EncReshape *encReshapeThis = dynamic_cast<EncReshape*>( m_pcReshape);
EncReshape *encReshapeOther = dynamic_cast<EncReshape*>(other->m_pcReshape);
encReshapeThis->copyState( *encReshapeOther );
}
#endif
m_CABACEstimator->getCtx() = other->m_CABACEstimator->getCtx();
}
......
......@@ -145,11 +145,12 @@ void EncLib::create ()
}
#if JVET_M0427_INLOOP_RESHAPER
#if ENABLE_SPLIT_PARALLELISM || ENABLE_WPP_PARALLELISM
m_cReshaper = new EncReshape[m_numCuEncStacks];
#endif
if (m_lumaReshapeEnable)
{
#if ENABLE_SPLIT_PARALLELISM || ENABLE_WPP_PARALLELISM
m_cReshaper = new EncReshape[m_numCuEncStacks];
for (int jId = 0; jId < m_numCuEncStacks; jId++)
{
m_cReshaper[jId].createEnc(getSourceWidth(), getSourceHeight(), m_maxCUWidth, m_maxCUHeight, m_bitDepth[COMPONENT_Y]);
......@@ -628,7 +629,7 @@ void EncLib::encode( bool flush, PelStorage* pcPicYuvOrg, PelStorage* cPicYuvTru
pcPicCurr->M_BUFS( 0, PIC_ORIGINAL ).swap( *pcPicYuvOrg );
#if JVET_M0427_INLOOP_RESHAPER
pcPicCurr->M_BUFS( 0, PIC_TRUE_ORIGINAL).swap(*cPicYuvTrueOrg);
pcPicCurr->M_BUFS( 0, PIC_TRUE_ORIGINAL ).swap(*cPicYuvTrueOrg );
#endif
#if JVET_M0132_APS
......
......@@ -1076,9 +1076,9 @@ bool BestEncInfoCache::setCsFrom( CodingStructure& cs, EncTestMode& testMode, co
#if ENABLE_SPLIT_PARALLELISM
void BestEncInfoCache::copyState(const BestEncInfoCache &other, const UnitArea &area)
{
m_slice_bencinf = other.m_slice_bencinf;
m_slice_bencinf = other.m_slice_bencinf;
m_currTemporalId = other.m_currTemporalId;
#if 0
if( m_slice_bencinf->isIntra() ) return;
......@@ -1124,6 +1124,7 @@ void BestEncInfoCache::copyState(const BestEncInfoCache &other, const UnitArea &
}
}
}
#endif
}
void BestEncInfoCache::touch(const UnitArea &area)
......@@ -1132,7 +1133,7 @@ void BestEncInfoCache::touch(const UnitArea &area)
getAreaIdx(area.Y(), *m_slice_bencinf->getPPS()->pcv, idx1, idx2, idx3, idx4);
BestEncodingInfo &encInfo = *m_bestEncInfo[idx1][idx2][idx3][idx4];
encInfo.temporalId = m_currTemporalId;
encInfo.temporalId = m_currTemporalId;
}
#endif
......@@ -2190,38 +2191,40 @@ void EncModeCtrlMTnoRQT::copyState( const EncModeCtrl& other, const UnitArea& ar
#if REUSE_CU_RESULTS
this->BestEncInfoCache ::copyState( *pOther, area );
#endif
#if JVET_M0140_SBT
this->SaveLoadEncInfoSbt ::copyState( *pOther );
#endif
m_skipThreshold = pOther->m_skipThreshold;
}
int EncModeCtrlMTnoRQT::getNumParallelJobs( const CodingStructure &cs, Partitioner& partitioner ) const
{
int numJobs = 1; // for no-split coding
int numJobs = 0;
if( partitioner.canSplit( CU_QUAD_SPLIT, cs ) )
if( partitioner.canSplit( CU_TRIH_SPLIT, cs ) )
{
numJobs = 2;
numJobs = 6;
}
if( partitioner.canSplit( CU_VERT_SPLIT, cs ) )
else if( partitioner.canSplit( CU_TRIV_SPLIT, cs ) )
{
numJobs = 3;
numJobs = 5;
}
if( partitioner.canSplit( CU_HORZ_SPLIT, cs ) )
else if( partitioner.canSplit( CU_HORZ_SPLIT, cs ) )
{
numJobs = 4;
}
if( partitioner.canSplit( CU_TRIV_SPLIT, cs ) )
else if (partitioner.canSplit(CU_VERT_SPLIT, cs))
{
numJobs = 5;
numJobs = 3;
}
if( partitioner.canSplit( CU_TRIH_SPLIT, cs ) )
else if( partitioner.canSplit( CU_QUAD_SPLIT, cs ) )
{
numJobs = 6;
numJobs = 2;
}
else if( partitioner.canSplit( CU_DONT_SPLIT, cs ) )
{
numJobs = 1;
}
CHECK( numJobs >= NUM_RESERVERD_SPLIT_JOBS, "More jobs specified than allowed" );
......@@ -2259,26 +2262,10 @@ bool EncModeCtrlMTnoRQT::parallelJobSelector( const EncTestMode& encTestmode, co
return encTestmode.type == ETM_SPLIT_QT;
break;
case 3:
switch( encTestmode.type )
{
case ETM_SPLIT_BT_V:
return true;
break;
default:
return false;
break;
}
return encTestmode.type == ETM_SPLIT_BT_V;
break;
case 4:
switch( encTestmode.type )
{
case ETM_SPLIT_BT_H:
return true;
break;
default:
return false;
break;
}
return encTestmode.type == ETM_SPLIT_BT_H;
break;
case 5:
return encTestmode.type == ETM_SPLIT_TT_V;
......
......@@ -1829,6 +1829,13 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons
if (pcSlice->getSPS()->getUseReshaper())
{
m_pcCuEncoder->setDecCuReshaperInEncCU(m_pcLib->getReshaper(), pcSlice->getSPS()->getChromaFormatIdc());
#if ENABLE_SPLIT_PARALLELISM || ENABLE_WPP_PARALLELISM
for (int jId = 1; jId < m_pcLib->getNumCuEncStacks(); jId++)
{
m_pcLib->getCuEncoder(jId)->setDecCuReshaperInEncCU(m_pcLib->getReshaper(jId), pcSlice->getSPS()->getChromaFormatIdc());
}
#endif
}
#endif
#if JVET_M0445_MCTS
......
Markdown is supported
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