diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 1c7b98b412edf649d60ff25e4b364c27eb7a1103..a71731ede7705ce9d75199398a26a283d7c95026 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -58,6 +58,8 @@ #define JVET_Q0371_DEBLOCKING_CLEANUP 1 //JVET_Q0371: cleanup on deblocking across subpicture boundaries +#define JVET_Q0289_BUGFIX_RECT_SLICE_FLAG 1 //JVET-Q0289: If NumTilesInPic is equal to 1, don't signal the rect_slice_flag and infer its value to be 1. + #define CABAC_RETRAIN 1 // CABAC retraining based on VTM8rc1 #define JVET_Q0210_SUBPIC_VIRTUAL_BOUNDARY_CONSTRAINT 1 // JVET-Q0210 (aspect 7): when subpicture signalling is present, virtual boundaries if present shall be in the SPS. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 4f6d7f067afa905ad67963bc7b09f4979ffb286d..bdd78d24872bd77f34e4bdadff58314dc898b4f5 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -533,9 +533,20 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS ) #endif } pcPPS->initTiles(); - // rectangular slice signalling +#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG + if (pcPPS->getNumTiles() > 1) + { + READ_CODE(1, uiCode, "rect_slice_flag"); + } + else + { + uiCode = 1; + } + pcPPS->setRectSliceFlag(uiCode == 1); +#else READ_CODE(1, uiCode, "rect_slice_flag"); pcPPS->setRectSliceFlag( uiCode == 1 ); +#endif if (pcPPS->getRectSliceFlag()) { READ_FLAG(uiCode, "single_slice_per_subpic_flag"); pcPPS->setSingleSlicePerSubPicFlag(uiCode == 1); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 1b6652af2eb875eb3139925e9ad421d27c76021c..1837ea134612d509285b83920f019fd2a0f6f196 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -333,7 +333,14 @@ void HLSWriter::codePPS( const PPS* pcPPS ) } // rectangular slice signalling +#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG + if (pcPPS->getNumTiles() > 1) + { + WRITE_FLAG(pcPPS->getRectSliceFlag() ? 1 : 0, "rect_slice_flag"); + } +#else WRITE_FLAG( pcPPS->getRectSliceFlag( ) ? 1 : 0, "rect_slice_flag"); +#endif if (pcPPS->getRectSliceFlag()) { WRITE_FLAG(pcPPS->getSingleSlicePerSubPicFlag( ) ? 1 : 0, "single_slice_per_subpic_flag");