From 3fecde6e556449c860874610bda13454902094c7 Mon Sep 17 00:00:00 2001 From: phil <cowanp@sharplabs.com> Date: Mon, 13 Jul 2020 16:52:26 -0700 Subject: [PATCH] JVET-S0181_PROPOSAL1: Conditionally signal bp_sublayer_intial_cpb_removal_delay_present_flag --- source/Lib/CommonLib/TypeDef.h | 2 +- source/Lib/DecoderLib/SEIread.cpp | 12 ++++++++++++ source/Lib/EncoderLib/SEIwrite.cpp | 7 +++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d9d0d3b79..1b6b5e38d 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -72,7 +72,7 @@ #define JVET_S0160_ASPECT1_ASPECT9 1 // JVET-S0160: Aspect 1 Infer the value of pps_loop_filter_across_tiles_enabled_flag to be equal to 0 (instead of 1) when not present // Aspect 9 The value of ph_poc_msb_cycle_present_flag is required to be equal to 0 when vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] is equal to 0 and there is an ILRP entry in RefPicList[0] or RefPicList[1] of a slice of the current picture - +#define JVET_S0181_PROPOSAL1 1 // JVET-0181_Proposal1: Conditionally signal bp_sublayer_initial_cpb_removal_delay_present_flag //########### place macros to be be kept below this line ############### #define JVET_S0257_DUMP_360SEI_MESSAGE 1 // Software support of 360 SEI messages diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index 29c5c310e..0f2f8ee30 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -678,7 +678,19 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo } sei_read_code( pDecodedMessageOutputStream, 3, code, "bp_max_sub_layers_minus1" ); sei.m_bpMaxSubLayers = code + 1; sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1" ); sei.m_bpCpbCnt = code + 1; +#if JVET_S0181_PROPOSAL1 + if (sei.m_bpMaxSubLayers - 1 > 0) + { + sei_read_flag(pDecodedMessageOutputStream, code, "bp_sublayer_initial_cpb_removal_delay_present_flag"); + sei.m_sublayerInitialCpbRemovalDelayPresentFlag = code; + } + else + { + sei.m_sublayerInitialCpbRemovalDelayPresentFlag = false; + } +#else sei_read_flag(pDecodedMessageOutputStream, code, "sublayer_initial_cpb_removal_delay_present_flag"); +#endif sei.m_sublayerInitialCpbRemovalDelayPresentFlag = code; for (i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++) { diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index ee3e52607..0253c3d14 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -308,7 +308,14 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei) } CHECK (sei.m_bpCpbCnt < 1, "sei.m_bpCpbCnt must be > 0"); WRITE_UVLC( sei.m_bpCpbCnt - 1, "bp_cpb_cnt_minus1"); +#if JVET_S0181_PROPOSAL1 + if (sei.m_bpMaxSubLayers - 1 > 0) + { + WRITE_FLAG(sei.m_sublayerInitialCpbRemovalDelayPresentFlag, "bp_sublayer_initial_cpb_removal_delay_present_flag"); + } +#else WRITE_FLAG(sei.m_sublayerInitialCpbRemovalDelayPresentFlag, "sublayer_initial_cpb_removal_delay_present_flag"); +#endif for (int i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++) { for( int nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ ) -- GitLab