diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 621fb485dbe70ccf97a8bb01ae1a1e05bd0d4b08..3d27d050850d5bbc9a6387c945f53b3470ac1dea 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -94,6 +94,8 @@ #define JVET_S0156_LEVEL_DEFINITION 1 // JVET-S0156: On level definitions +#define JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP 1 // JVET-S0064: Conditionally signal bp_sublayer_dpb_output_offsets_present_flag + #define JVET_S0185_PROPOSAL2_SEI_CLEANUP 1 // JVET-S0185_PROPOSAL2: Move signalling of syntax element bp_alt_cpb_params_present_flag #define JVET_S0181_PROPOSAL1 1 // JVET-0181_Proposal1: Conditionally signal bp_sublayer_initial_cpb_removal_delay_present_flag diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index 7e1028d65b77989f2a237d79c9330377aca6d0be..ffb59d6bd19d94d0117d81c98452d9f4fcdee24a 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -760,8 +760,8 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo } #else sei_read_flag(pDecodedMessageOutputStream, code, "sublayer_initial_cpb_removal_delay_present_flag"); -#endif sei.m_sublayerInitialCpbRemovalDelayPresentFlag = code; +#endif for (i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++) { for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ ) @@ -779,8 +779,20 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo } } } +#if JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP + if (sei.m_bpMaxSubLayers-1 > 0) + { + sei_read_flag(pDecodedMessageOutputStream, code, "bp_sublayer_dpb_output_offsets_present_flag"); + sei.m_sublayerDpbOutputOffsetsPresentFlag = code; + } + else + { + sei.m_sublayerDpbOutputOffsetsPresentFlag = false; + } +#else sei_read_flag( pDecodedMessageOutputStream, code, "sublayer_dpb_output_offsets_present_flag" ); sei.m_sublayerDpbOutputOffsetsPresentFlag = code; +#endif if(sei.m_sublayerDpbOutputOffsetsPresentFlag) { for(int i = 0; i < sei.m_bpMaxSubLayers - 1; i++) diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 4f46c85d24fd038f3d00113a6be8250dfac76c24..8a60fe8f01dedd3ce52e7ab9f7f283be9b5ad23f 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -345,7 +345,15 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei) } } } +#if JVET_S0064_SEI_BUFFERING_PERIOD_CLEANUP + if (sei.m_bpMaxSubLayers-1 > 0) + { + WRITE_FLAG(sei.m_sublayerDpbOutputOffsetsPresentFlag, "bp_sublayer_dpb_output_offsets_present_flag"); + } +#else WRITE_FLAG(sei.m_sublayerDpbOutputOffsetsPresentFlag, "sublayer_dpb_output_offsets_present_flag"); +#endif + if(sei.m_sublayerDpbOutputOffsetsPresentFlag) { for(int i = 0; i < sei.m_bpMaxSubLayers - 1; i++)