From 079b6ce26bade1df47a779e8671f61456e113119 Mon Sep 17 00:00:00 2001 From: Vadim Seregin <vseregin@qti.qualcomm.com> Date: Tue, 12 May 2020 00:33:37 +0200 Subject: [PATCH] JVET-R0275: sps_ptl_dbp_hrd constraint --- source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/DecLib.cpp | 7 +++++++ source/Lib/DecoderLib/VLCReader.cpp | 7 +++++++ source/Lib/EncoderLib/VLCWriter.cpp | 7 +++++++ 4 files changed, 23 insertions(+) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 161aae603..31a963830 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -89,6 +89,8 @@ #define JVET_R0277_RPL 1 // JVET-R0277: Modified condition for sh_num_ref_idx_active_override_flag, inference for sh_collocated_from_l0_flag equal to 1 for P-slices +#define JVET_R0275_SPS_PTL_DBP_HRD 1 // JVET-R0275: Modified constraint for sps_ptl_dpb_hrd_params_present_flag + #define JVET_R0186_CLEANUP 1 // JVET-R0186 aspect 1: Signal the pps_no_pic_partition_flag ahead in the PPS. #define JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA 1 // Use two separate flags (one for Cb, one for Cr) to replace ph_alf_chroma_idc in PH and sh_alf_chroma_idc in SH diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index 737018ec4..405264c6a 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1547,6 +1547,13 @@ void DecLib::xCheckParameterSetConstraints(const int layerId) CHECK( slice->getPicHeader()->getPicInterSliceAllowedFlag(), "When gdr_or_irap_pic_flag is equal to 1 and gdr_pic_flag is equal to 0 and vps_independent_layer_flag[ GeneralLayerIdx[ nuh_layer_id ] ] is equal to 1, ph_inter_slice_allowed_flag shall be equal to 0" ); } +#endif + +#if JVET_R0275_SPS_PTL_DBP_HRD + if( sps->getVPSId() && vps->m_numLayersInOls[vps->m_targetOlsIdx] == 1 ) + { + CHECK( !sps->getPtlDpbHrdParamsPresentFlag(), "When sps_video_parameter_set_id is greater than 0 and there is an OLS that contains only one layer with nuh_layer_id equal to the nuh_layer_id of the SPS, the value of sps_ptl_dpb_hrd_params_present_flag shall be equal to 1" ); + } #endif } diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index bc581974a..5daf1da72 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1336,6 +1336,13 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) CHECK(uiCode != 0, "sps_reserved_zero_4bits not equal to zero"); READ_FLAG(uiCode, "sps_ptl_dpb_hrd_params_present_flag"); pcSPS->setPtlDpbHrdParamsPresentFlag(uiCode); +#if JVET_R0275_SPS_PTL_DBP_HRD + if( !pcSPS->getVPSId() ) + { + CHECK( !pcSPS->getPtlDpbHrdParamsPresentFlag(), "When sps_video_parameter_set_id is equal to 0, the value of sps_ptl_dpb_hrd_params_present_flag shall be equal to 1" ); + } +#endif + if (pcSPS->getPtlDpbHrdParamsPresentFlag()) { diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 12d2242b3..4b9e10b65 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -816,6 +816,13 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) WRITE_CODE(0, 4, "sps_reserved_zero_4bits"); WRITE_FLAG(pcSPS->getPtlDpbHrdParamsPresentFlag(), "sps_ptl_dpb_hrd_params_present_flag"); +#if JVET_R0275_SPS_PTL_DBP_HRD + if( !pcSPS->getVPSId() ) + { + CHECK( !pcSPS->getPtlDpbHrdParamsPresentFlag(), "When sps_video_parameter_set_id is equal to 0, the value of sps_ptl_dpb_hrd_params_present_flag shall be equal to 1" ); + } +#endif + if (pcSPS->getPtlDpbHrdParamsPresentFlag()) { codeProfileTierLevel(pcSPS->getProfileTierLevel(), true, pcSPS->getMaxTLayers() - 1); -- GitLab