diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 4b769ab981895a9b3ba91406b8a5ee03eea6dc0e..a58d658f0239753b6e2bdc61aaebd33c720779e2 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -51,6 +51,9 @@ #include <cassert> //########### place macros to be removed in next cycle below this line ############### + +#define JVET_R0388_DBF_CLEANUP 1 // JVET-R0388: Cleanups on deblocking signalling + #define JVET_R0071_SPS_PPS_CELANUP 1 // JVET-R0071 item 2-4: cleanups on subpicture signalling (item 1 has been ported in JVET_R0156_ASPECT4) #define JVET_R0271_SLICE_LEVEL_DQ_SDH_RRC 1 // JVET-R0271/R0155: Slice level DQ and SDH granularity for mixed lossy/lossless. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 697e270d6acd85f78675536178346c36cc4dec2d..5868c228cadb59a8fddaafc7cbe702118266c30f 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2894,8 +2894,19 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag if(picHeader->getDeblockingFilterOverrideFlag()) { - READ_FLAG( uiCode, "ph_deblocking_filter_disabled_flag" ); - picHeader->setDeblockingFilterDisable(uiCode != 0); +#if JVET_R0388_DBF_CLEANUP + if (!pps->getPPSDeblockingFilterDisabledFlag()) + { +#endif + READ_FLAG(uiCode, "ph_deblocking_filter_disabled_flag"); + picHeader->setDeblockingFilterDisable(uiCode != 0); +#if JVET_R0388_DBF_CLEANUP + } + else + { + picHeader->setDeblockingFilterDisable(false); + } +#endif if (!picHeader->getDeblockingFilterDisable()) { READ_SVLC( iCode, "ph_beta_offset_div2" ); @@ -3711,7 +3722,18 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par } if(pcSlice->getDeblockingFilterOverrideFlag()) { - READ_FLAG ( uiCode, "slice_deblocking_filter_disabled_flag" ); pcSlice->setDeblockingFilterDisable(uiCode ? 1 : 0); +#if JVET_R0388_DBF_CLEANUP + if (!pps->getPPSDeblockingFilterDisabledFlag()) + { +#endif + READ_FLAG(uiCode, "slice_deblocking_filter_disabled_flag"); pcSlice->setDeblockingFilterDisable(uiCode ? 1 : 0); +#if JVET_R0388_DBF_CLEANUP + } + else + { + pcSlice->setDeblockingFilterDisable(false); + } +#endif if(!pcSlice->getDeblockingFilterDisable()) { READ_SVLC( iCode, "slice_beta_offset_div2" ); pcSlice->setDeblockingFilterBetaOffsetDiv2( iCode ); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 4c9474622abf120b5de80a9fbaa0eaeaa21d5ed8..255096fff7a5264764b4f0c03e22137bf2250aff 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1922,7 +1922,14 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB if(picHeader->getDeblockingFilterOverrideFlag()) { - WRITE_FLAG( picHeader->getDeblockingFilterDisable(), "ph_deblocking_filter_disabled_flag" ); +#if JVET_R0388_DBF_CLEANUP + if (!pps->getPPSDeblockingFilterDisabledFlag()) + { +#endif + WRITE_FLAG(picHeader->getDeblockingFilterDisable(), "ph_deblocking_filter_disabled_flag"); +#if JVET_R0388_DBF_CLEANUP + } +#endif if( !picHeader->getDeblockingFilterDisable() ) { WRITE_SVLC( picHeader->getDeblockingFilterBetaOffsetDiv2(), "ph_beta_offset_div2" ); @@ -2324,7 +2331,14 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) } if (pcSlice->getDeblockingFilterOverrideFlag()) { - WRITE_FLAG(pcSlice->getDeblockingFilterDisable(), "slice_deblocking_filter_disabled_flag"); +#if JVET_R0388_DBF_CLEANUP + if (!pcSlice->getPPS()->getPPSDeblockingFilterDisabledFlag()) + { +#endif + WRITE_FLAG(pcSlice->getDeblockingFilterDisable(), "slice_deblocking_filter_disabled_flag"); +#if JVET_R0388_DBF_CLEANUP + } +#endif if(!pcSlice->getDeblockingFilterDisable()) { WRITE_SVLC (pcSlice->getDeblockingFilterBetaOffsetDiv2(), "slice_beta_offset_div2");