diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 88cc3bf67bc68ad0467fff5e1b627e3e0fa27683..df1f7c4e82af5c853482bbb274526e41190c2bed 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -99,6 +99,8 @@ #define JVET_O0078_SINGLE_HMVPLUT 1 // JVET-O0078:Single HMVP table for all CUs inside the shared merge list region for IBC +#define JVET_O0126_BPWA_INDEX_CODING_FIX 1 // JVET-O0126 align BPWA index coding with specification + #define FIX_DB_MAX_TRANSFORM_SIZE 1 #define MRG_SHARELIST_SHARSIZE 32 diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp index 508a26b16ef101a2dbcb3b31c96f3094a842d785..271756b9a9620b4dc606691dda007f1f4186b7b3 100644 --- a/source/Lib/DecoderLib/CABACReader.cpp +++ b/source/Lib/DecoderLib/CABACReader.cpp @@ -1068,8 +1068,11 @@ void CABACReader::cu_gbi_flag(CodingUnit& cu) uint32_t symbol = m_BinDecoder.decodeBin(Ctx::GBiIdx(0)); int32_t numGBi = (cu.slice->getCheckLDC()) ? 5 : 3; - +#if JVET_O0126_BPWA_INDEX_CODING_FIX + if(symbol == 1) +#else if(symbol == 0) +#endif { uint32_t prefixNumBits = numGBi - 2; uint32_t step = 1; @@ -1079,8 +1082,11 @@ void CABACReader::cu_gbi_flag(CodingUnit& cu) for(int ui = 0; ui < prefixNumBits; ++ui) { symbol = m_BinDecoder.decodeBinEP(); - +#if JVET_O0126_BPWA_INDEX_CODING_FIX + if (symbol == 0) +#else if (symbol == 1) +#endif { break; } diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index d88d2da8559308f9ee50c73a6e903b5eea2da363..8d13acf847c0cab437b31aa720f05560738442ef 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -823,9 +823,11 @@ void CABACWriter::cu_gbi_flag(const CodingUnit& cu) const uint8_t gbiCodingIdx = (uint8_t)g_GbiCodingOrder[CU::getValidGbiIdx(cu)]; const int32_t numGBi = (cu.slice->getCheckLDC()) ? 5 : 3; - +#if JVET_O0126_BPWA_INDEX_CODING_FIX + m_BinEncoder.encodeBin((gbiCodingIdx == 0 ? 0 : 1), Ctx::GBiIdx(0)); +#else m_BinEncoder.encodeBin((gbiCodingIdx == 0 ? 1 : 0), Ctx::GBiIdx(0)); - +#endif if(numGBi > 2 && gbiCodingIdx != 0) { const uint32_t prefixNumBits = numGBi - 2; @@ -836,12 +838,20 @@ void CABACWriter::cu_gbi_flag(const CodingUnit& cu) { if (gbiCodingIdx == idx) { +#if JVET_O0126_BPWA_INDEX_CODING_FIX + m_BinEncoder.encodeBinEP(0); +#else m_BinEncoder.encodeBinEP(1); +#endif break; } else { +#if JVET_O0126_BPWA_INDEX_CODING_FIX + m_BinEncoder.encodeBinEP(1); +#else m_BinEncoder.encodeBinEP(0); +#endif idx += step; } }