diff --git a/source/Lib/CommonLib/Contexts.cpp b/source/Lib/CommonLib/Contexts.cpp index f5b508b785e978f9f1e199a0184d7a32a3bef3de..efb02a61969f77993d668542cd4dea00e54c4f4b 100644 --- a/source/Lib/CommonLib/Contexts.cpp +++ b/source/Lib/CommonLib/Contexts.cpp @@ -379,11 +379,18 @@ const CtxSet ContextSetCfg::AffMergeIdx = ContextSetCfg::addCtxSet const CtxSet ContextSetCfg::GBiIdx = ContextSetCfg::addCtxSet ({ +#if JVET_N0286_SIMPLIFIED_GBI_IDX + { 228, }, + { 242, }, + { CNU, }, + { 4, }, +#else // 4 ctx for 1st bin; 1 ctx for each of rest bins { 228, CNU, CNU, CNU, 125, 155, 175, }, { 242, CNU, CNU, CNU, 154, 170, 237, }, { CNU, CNU, CNU, CNU, CNU, CNU, CNU, }, { 4, DWS, DWS, DWS, 4, 0, 0, }, +#endif }); const CtxSet ContextSetCfg::Mvd = ContextSetCfg::addCtxSet diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 0e5083fa02e5597adc95421284f1ddf75ee92f67..a3a4dd41ab54b6b502f33b5ed274f29e558e5feb 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_N0286_SIMPLIFIED_GBI_IDX 1 // Simplified coding of the GBi index + #define JVET_N600_AMVR_TPM_CTX_REDUCTION 1 #define JVET_N0334_MVCLIPPING 1 // prevention of MV stroage overflow and alignment with spec of MV/CPMV modular for AMVP mode diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp index ccc13a375b9e5b454d314d74b2a2583ce519fddc..6fa451665a24aa881d020b81ad286b5d97e55bb7 100644 --- a/source/Lib/DecoderLib/CABACReader.cpp +++ b/source/Lib/DecoderLib/CABACReader.cpp @@ -980,18 +980,26 @@ void CABACReader::cu_gbi_flag(CodingUnit& cu) uint32_t prefixNumBits = numGBi - 2; uint32_t step = 1; +#if !JVET_N0286_SIMPLIFIED_GBI_IDX unsigned ctxIdGBi = 4; +#endif idx = 1; for(int ui = 0; ui < prefixNumBits; ++ui) { +#if JVET_N0286_SIMPLIFIED_GBI_IDX + symbol = m_BinDecoder.decodeBinEP(); +#else symbol = m_BinDecoder.decodeBin(Ctx::GBiIdx(ctxIdGBi)); +#endif if (symbol == 1) { break; } +#if !JVET_N0286_SIMPLIFIED_GBI_IDX ctxIdGBi += step; +#endif idx += step; } } diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index be2085b92978bfe93a19e651a2f1f7e236010481..4aa704fb80230a567c42e2db76a943fc06969653 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -761,19 +761,29 @@ void CABACWriter::cu_gbi_flag(const CodingUnit& cu) const uint32_t prefixNumBits = numGBi - 2; const uint32_t step = 1; +#if !JVET_N0286_SIMPLIFIED_GBI_IDX int ctxIdGBi = 4; +#endif uint8_t idx = 1; for(int ui = 0; ui < prefixNumBits; ++ui) { if (gbiCodingIdx == idx) { +#if JVET_N0286_SIMPLIFIED_GBI_IDX + m_BinEncoder.encodeBinEP(1); +#else m_BinEncoder.encodeBin(1, Ctx::GBiIdx(ctxIdGBi)); +#endif break; } else { +#if JVET_N0286_SIMPLIFIED_GBI_IDX + m_BinEncoder.encodeBinEP(0); +#else m_BinEncoder.encodeBin(0, Ctx::GBiIdx(ctxIdGBi)); ctxIdGBi += step; +#endif idx += step; } }