diff --git a/source/Lib/CommonLib/Contexts.cpp b/source/Lib/CommonLib/Contexts.cpp index c735ab2d932ef6917a7797c16786d6b45400e7c4..2abec74d950cf58c06c8c82db72515aa996255ca 100644 --- a/source/Lib/CommonLib/Contexts.cpp +++ b/source/Lib/CommonLib/Contexts.cpp @@ -290,9 +290,15 @@ const CtxSet ContextSetCfg::MergeFlag = ContextSetCfg::addCtxSet const CtxSet ContextSetCfg::MergeIdx = ContextSetCfg::addCtxSet ({ +#if JVET_L0194_ONE_CTX_FOR_MRG_IDX + { 137,}, + { 122,}, + { CNU,}, +#else { 137, CNU, CNU, CNU, CNU,}, { 122, CNU, CNU, CNU, CNU,}, { CNU, CNU, CNU, CNU, CNU,}, +#endif }); const CtxSet ContextSetCfg::PartSize = ContextSetCfg::addCtxSet diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 3ef736ae4442374b74280f6aa6d676a46b62d62c..15a73e4464bb420c8eae37106d208344a0b7fc37 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_L0194_ONE_CTX_FOR_MRG_IDX 1 // one context for full-block Merge index + #define REUSE_CU_RESULTS 1 #define REMOVE_MV_ADAPT_PREC 1 // remove the high precision flag in the MV class diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp index 8d7ebb8d0b6104ca610c040e3f2709e9bbadc0d0..7886c7b18388dcb8b36159dd59c71fd1db760539 100644 --- a/source/Lib/DecoderLib/CABACReader.cpp +++ b/source/Lib/DecoderLib/CABACReader.cpp @@ -1227,10 +1227,13 @@ void CABACReader::merge_idx( PredictionUnit& pu ) { if( m_BinDecoder.decodeBin( Ctx::MergeIdx() ) ) { +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX bool useExtCtx = pu.cs->sps->getSpsNext().getUseSubPuMvp(); +#endif pu.mergeIdx++; for( ; pu.mergeIdx < numCandminus1; pu.mergeIdx++ ) { +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX if( useExtCtx ) { if( !m_BinDecoder.decodeBin( Ctx::MergeIdx( std::min<int>( pu.mergeIdx, NUM_MERGE_IDX_EXT_CTX - 1 ) ) ) ) @@ -1240,11 +1243,14 @@ void CABACReader::merge_idx( PredictionUnit& pu ) } else { +#endif if( !m_BinDecoder.decodeBinEP() ) { break; } +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX } +#endif } } } diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index c46fc745e2604d26a310858acd373faa5256f81e..c2fe809d75e5e358b5e3d26008f2d7cb906b751a 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -1196,18 +1196,24 @@ void CABACWriter::merge_idx( const PredictionUnit& pu ) } else { +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX bool useExtCtx = pu.cs->sps->getSpsNext().getUseSubPuMvp(); +#endif m_BinEncoder.encodeBin( 1, Ctx::MergeIdx() ); for( unsigned idx = 1; idx < numCandminus1; idx++ ) { +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX if( useExtCtx ) { m_BinEncoder.encodeBin( pu.mergeIdx == idx ? 0 : 1, Ctx::MergeIdx( std::min<int>( idx, NUM_MERGE_IDX_EXT_CTX - 1 ) ) ); } else { +#endif m_BinEncoder.encodeBinEP( pu.mergeIdx == idx ? 0 : 1 ); +#if !JVET_L0194_ONE_CTX_FOR_MRG_IDX } +#endif if( pu.mergeIdx == idx ) { break;