diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 7ad29c25d90c25146497705b0cc3ae9f8aff16dc..803b25ff5711de684a0779674ba5e73dce9b43f0 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_Q0816 1 // JVET_Q0816: Omit the signalling of subpic layout when there is only one subpicture + #define JVET_Q0438_MONOCHROME_BUGFIXES 1 // JVET-Q0438: Monochrome bug fixes #define JVET_Q0110_Q0785_CHROMA_BDPCM_420 1 // JVET-Q0110/Q0785: Enable chroma BDPCM for 420, separate contexts for chroma BDPCM and bug-fixes. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 48752f8ccaed7c61e518ece5b1cf13462f9a9d63..d1433218062c9a6a7dc7353528c9a067416a3943 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1198,6 +1198,19 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) if (pcSPS->getSubPicPresentFlag()) { READ_CODE(8, uiCode, "sps_num_subpics_minus1"); pcSPS->setNumSubPics(uiCode + 1); +#if JVET_Q0816 + if( pcSPS->getNumSubPics() == 1 ) + { + pcSPS->setSubPicCtuTopLeftX( 0, 0 ); + pcSPS->setSubPicCtuTopLeftY( 0, 0 ); + pcSPS->setSubPicWidth( 0, ( pcSPS->getMaxPicWidthInLumaSamples() + pcSPS->getCTUSize() - 1 ) >> floorLog2( pcSPS->getCTUSize() ) ); + pcSPS->setSubPicHeight( 0, ( pcSPS->getMaxPicHeightInLumaSamples() + pcSPS->getCTUSize() - 1 ) >> floorLog2( pcSPS->getCTUSize() ) ); + pcSPS->setSubPicTreatedAsPicFlag( 0, 0 ); + pcSPS->setLoopFilterAcrossSubpicEnabledFlag( 0, 1 ); + } + else + { +#endif for (int picIdx = 0; picIdx < pcSPS->getNumSubPics(); picIdx++) { #if JVET_Q0787_SUBPIC @@ -1252,6 +1265,9 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) READ_FLAG(uiCode, "loop_filter_across_subpic_enabled_flag[ i ]"); pcSPS->setLoopFilterAcrossSubpicEnabledFlag(picIdx, uiCode); } +#if JVET_Q0816 + } +#endif } else { diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index a4e36d7738868a58084e241b564dc055aa793162..80b73892f3f02cd867a95082b61bf142d9584988 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -786,6 +786,10 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) if(pcSPS->getSubPicPresentFlag()) { WRITE_CODE(pcSPS->getNumSubPics() - 1, 8, "sps_num_subpics_minus1"); +#if JVET_Q0816 + if( pcSPS->getNumSubPics() > 1 ) + { +#endif for (int picIdx = 0; picIdx < pcSPS->getNumSubPics(); picIdx++) { #if JVET_Q0787_SUBPIC @@ -814,6 +818,9 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) WRITE_FLAG( pcSPS->getSubPicTreatedAsPicFlag(picIdx), "subpic_treated_as_pic_flag[ i ]" ); WRITE_FLAG( pcSPS->getLoopFilterAcrossSubpicEnabledFlag(picIdx), "loop_filter_across_subpic_enabled_flag[ i ]" ); } +#if JVET_Q0816 + } +#endif } WRITE_FLAG( pcSPS->getSubPicIdPresentFlag(), "sps_subpic_id_present_flag");