From d6ee43f8a86fe7f7b11e3ae61a2d5a1d19ce564c Mon Sep 17 00:00:00 2001 From: Philip Cowan <cowanp@sharplabs.com> Date: Mon, 9 Mar 2020 13:48:55 -0700 Subject: [PATCH] Updates to support JVET-Q0216 --- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/SEIread.cpp | 16 ++++++++++++++-- source/Lib/EncoderLib/SEIwrite.cpp | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 68197ea53..3fd83a361 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -256,6 +256,8 @@ #define JVET_Q0221 1 // JVET-Q0221: Decoding unit parameter signalling +#define JVET_Q0216 1 // JVET-Q0216: modification to picture timing SEI message + #define APPLY_SBT_SL_ON_MTS 1 // apply save & load fast algorithm on inter MTS when SBT is on #define REMOVE_PPS_REXT 1 // remove RExt PPS extension diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index 08233e03b..1e4422079 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -699,8 +699,20 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi } if( sei.m_cpbRemovalDelayDeltaEnabledFlag[ i ] ) { - sei_read_code( pDecodedMessageOutputStream, ceilLog2(bp.m_numCpbRemovalDelayDeltas), symbol, "cpb_removal_delay_delta_idx[i]" ); - sei.m_cpbRemovalDelayDeltaIdx[ i ] = symbol; +#if JVET_Q0216 + if ((bp.m_numCpbRemovalDelayDeltas - 1) > 0) + { + sei_read_code(pDecodedMessageOutputStream, ceilLog2(bp.m_numCpbRemovalDelayDeltas), symbol, "cpb_removal_delay_delta_idx[i]"); + sei.m_cpbRemovalDelayDeltaIdx[i] = symbol; + } + else + { + sei.m_cpbRemovalDelayDeltaIdx[i] = 0; + } +#else + sei_read_code(pDecodedMessageOutputStream, ceilLog2(bp.m_numCpbRemovalDelayDeltas), symbol, "cpb_removal_delay_delta_idx[i]"); + sei.m_cpbRemovalDelayDeltaIdx[i] = symbol; +#endif } else { diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 3673ecea4..7ed20aa88 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -362,7 +362,14 @@ void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, const SEIBuf } if( sei.m_cpbRemovalDelayDeltaEnabledFlag[i] ) { - WRITE_CODE( sei.m_cpbRemovalDelayDeltaIdx[i], ceilLog2(bp.m_numCpbRemovalDelayDeltas), "cpb_removal_delay_delta_idx[i]" ); +#if JVET_Q0216 + if ((bp.m_numCpbRemovalDelayDeltas - 1) > 0) + { + WRITE_CODE(sei.m_cpbRemovalDelayDeltaIdx[i], ceilLog2(bp.m_numCpbRemovalDelayDeltas), "cpb_removal_delay_delta_idx[i]"); + } +#else + WRITE_CODE(sei.m_cpbRemovalDelayDeltaIdx[i], ceilLog2(bp.m_numCpbRemovalDelayDeltas), "cpb_removal_delay_delta_idx[i]"); +#endif } else { -- GitLab