Skip to content
Snippets Groups Projects
Commit 98175c60 authored by Karsten Suehring's avatar Karsten Suehring
Browse files

Merge branch 'JVET-P0181' into 'master'

JVET-P0181: Modifications to HRD information signalling

See merge request jvet/VVCSoftware_VTM!1170
parents 406006ae ea661f01
No related branches found
No related tags found
Loading
...@@ -118,6 +118,9 @@ void SEIBufferingPeriod::copyTo (SEIBufferingPeriod& target) const ...@@ -118,6 +118,9 @@ void SEIBufferingPeriod::copyTo (SEIBufferingPeriod& target) const
target.m_bpDecodingUnitHrdParamsPresentFlag = m_bpDecodingUnitHrdParamsPresentFlag; target.m_bpDecodingUnitHrdParamsPresentFlag = m_bpDecodingUnitHrdParamsPresentFlag;
target.m_decodingUnitCpbParamsInPicTimingSeiFlag = m_decodingUnitCpbParamsInPicTimingSeiFlag; target.m_decodingUnitCpbParamsInPicTimingSeiFlag = m_decodingUnitCpbParamsInPicTimingSeiFlag;
#endif #endif
#if JVET_P0181
target.m_sublayerInitialCpbRemovalDelayPresentFlag = m_sublayerInitialCpbRemovalDelayPresentFlag;
#endif
} }
void SEIPictureTiming::copyTo (SEIPictureTiming& target) const void SEIPictureTiming::copyTo (SEIPictureTiming& target) const
......
...@@ -196,6 +196,9 @@ public: ...@@ -196,6 +196,9 @@ public:
#if JVET_P0202_P0203_FIX_HRD_RELATED_SEI #if JVET_P0202_P0203_FIX_HRD_RELATED_SEI
, m_bpDecodingUnitHrdParamsPresentFlag (false) , m_bpDecodingUnitHrdParamsPresentFlag (false)
, m_decodingUnitCpbParamsInPicTimingSeiFlag (false) , m_decodingUnitCpbParamsInPicTimingSeiFlag (false)
#endif
#if JVET_P0181
, m_sublayerInitialCpbRemovalDelayPresentFlag(false)
#endif #endif
{ {
::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay)); ::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay));
...@@ -229,6 +232,9 @@ public: ...@@ -229,6 +232,9 @@ public:
bool m_bpDecodingUnitHrdParamsPresentFlag; bool m_bpDecodingUnitHrdParamsPresentFlag;
bool m_decodingUnitCpbParamsInPicTimingSeiFlag; bool m_decodingUnitCpbParamsInPicTimingSeiFlag;
#endif #endif
#if JVET_P0181
bool m_sublayerInitialCpbRemovalDelayPresentFlag;
#endif
}; };
class SEIPictureTiming : public SEI class SEIPictureTiming : public SEI
......
...@@ -241,6 +241,9 @@ ...@@ -241,6 +241,9 @@
#define JVET_M0497_MATRIX_MULT 0 // 0: Fast method; 1: Matrix multiplication #define JVET_M0497_MATRIX_MULT 0 // 0: Fast method; 1: Matrix multiplication
#define JVET_P0181 1 // JVET-P0181 : Modifications to HRD information signalling
#define APPLY_SBT_SL_ON_MTS 1 // apply save & load fast algorithm on inter MTS when SBT is on #define APPLY_SBT_SL_ON_MTS 1 // apply save & load fast algorithm on inter MTS when SBT is on
#define HEVC_SEI 0 // SEI messages that are defined in HEVC, but not in VVC #define HEVC_SEI 0 // SEI messages that are defined in HEVC, but not in VVC
......
...@@ -618,6 +618,13 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo ...@@ -618,6 +618,13 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo
} }
} }
#endif #endif
#if JVET_P0181
else
{
sei.m_duCpbRemovalDelayIncrementLength = 24;
sei.m_dpbOutputDelayDuLength = 24;
}
#endif
sei_read_flag( pDecodedMessageOutputStream, code, "concatenation_flag"); sei_read_flag( pDecodedMessageOutputStream, code, "concatenation_flag");
sei.m_concatenationFlag = code; sei.m_concatenationFlag = code;
...@@ -634,7 +641,13 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo ...@@ -634,7 +641,13 @@ 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_code( pDecodedMessageOutputStream, 3, code, "bp_max_sub_layers_minus1" ); sei.m_bpMaxSubLayers = code + 1;
for( i = 0; i < sei.m_bpMaxSubLayers; i ++ ) #if JVET_P0181
sei_read_flag(pDecodedMessageOutputStream, code, "sublayer_initial_cpb_removal_delay_present_flag");
sei.m_sublayerInitialCpbRemovalDelayPresentFlag = code;
for (i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++)
#else
for (i = 0; i < sei.m_bpMaxSubLayers; i++)
#endif
{ {
sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1[i]" ); sei.m_bpCpbCnt[i] = code + 1; sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1[i]" ); sei.m_bpCpbCnt[i] = code + 1;
for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ ) for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ )
......
...@@ -328,7 +328,9 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, const SP ...@@ -328,7 +328,9 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, const SP
{ {
WRITE_FLAG( sei.m_bpNalCpbParamsPresentFlag, "bp_nal_hrd_parameters_present_flag"); WRITE_FLAG( sei.m_bpNalCpbParamsPresentFlag, "bp_nal_hrd_parameters_present_flag");
WRITE_FLAG( sei.m_bpVclCpbParamsPresentFlag, "bp_vcl_hrd_parameters_present_flag"); WRITE_FLAG( sei.m_bpVclCpbParamsPresentFlag, "bp_vcl_hrd_parameters_present_flag");
#if JVET_P0181
CHECK(!sei.m_bpNalCpbParamsPresentFlag && !sei.m_bpVclCpbParamsPresentFlag, "bp_nal_hrd_parameters_present_flag and/or bp_vcl_hrd_parameters_present_flag must be true");
#endif
#if JVET_P0202_P0203_FIX_HRD_RELATED_SEI #if JVET_P0202_P0203_FIX_HRD_RELATED_SEI
CHECK (sei.m_initialCpbRemovalDelayLength < 1, "sei.m_initialCpbRemovalDelayLength must be > 0"); CHECK (sei.m_initialCpbRemovalDelayLength < 1, "sei.m_initialCpbRemovalDelayLength must be > 0");
WRITE_CODE( sei.m_initialCpbRemovalDelayLength - 1, 5, "initial_cpb_removal_delay_length_minus1" ); WRITE_CODE( sei.m_initialCpbRemovalDelayLength - 1, 5, "initial_cpb_removal_delay_length_minus1" );
...@@ -381,7 +383,12 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, const SP ...@@ -381,7 +383,12 @@ void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, const SP
CHECK (sei.m_bpMaxSubLayers < 1, "bp_max_sub_layers_minus1 must be > 0"); CHECK (sei.m_bpMaxSubLayers < 1, "bp_max_sub_layers_minus1 must be > 0");
WRITE_CODE( sei.m_bpMaxSubLayers - 1, 3, "bp_max_sub_layers_minus1" ); WRITE_CODE( sei.m_bpMaxSubLayers - 1, 3, "bp_max_sub_layers_minus1" );
} }
for( int i = 0; i < sei.m_bpMaxSubLayers; i ++ ) #if JVET_P0181
WRITE_FLAG(sei.m_sublayerInitialCpbRemovalDelayPresentFlag, "sublayer_initial_cpb_removal_delay_present_flag");
for (int i = (sei.m_sublayerInitialCpbRemovalDelayPresentFlag ? 0 : sei.m_bpMaxSubLayers - 1); i < sei.m_bpMaxSubLayers; i++)
#else
for (int i = 0; i < sei.m_bpMaxSubLayers; i++)
#endif
{ {
CHECK (sei.m_bpCpbCnt[i] < 1, "sei.m_bpCpbCnt[i] must be > 0"); CHECK (sei.m_bpCpbCnt[i] < 1, "sei.m_bpCpbCnt[i] must be > 0");
WRITE_UVLC( sei.m_bpCpbCnt[i] - 1, "bp_cpb_cnt_minus1[i]"); WRITE_UVLC( sei.m_bpCpbCnt[i] - 1, "bp_cpb_cnt_minus1[i]");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment