From 39f5c65927737eefadd247022834b746c397bded Mon Sep 17 00:00:00 2001 From: Yao-Jen Chang <yjchang@qti.qualcomm.com> Date: Mon, 29 Jun 2020 22:38:34 -0700 Subject: [PATCH 1/2] JVET-S0221: Constraints on the numbers of virtual boundaries --- source/Lib/CommonLib/TypeDef.h | 1 + source/Lib/DecoderLib/VLCReader.cpp | 24 ++++++++++++++++++++++++ source/Lib/EncoderLib/VLCWriter.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index acde677519..587c845f54 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -53,6 +53,7 @@ //########### place macros to be removed in next cycle below this line ############### +#define JVET_R0042_SUBPIC_CHECK 1 // JVET_R0042: SubPicture types related constraints //########### place macros to be be kept below this line ############### diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 276c3fd506..a526534e5a 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1870,11 +1870,23 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) if( pcSPS->getVirtualBoundariesPresentFlag() ) { READ_CODE( 2, uiCode, "sps_num_ver_virtual_boundaries"); pcSPS->setNumVerVirtualBoundaries( uiCode ); +#if JVET_S0221_NUM_VB_CHECK + if (pcSPS->getMaxPicWidthInLumaSamples() <= 8) + { + CHECK(pcSPS->getNumVerVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < pcSPS->getNumVerVirtualBoundaries(); i++ ) { READ_UVLC(uiCode, "sps_virtual_boundaries_pos_x"); pcSPS->setVirtualBoundariesPosX(uiCode << 3, i); } READ_CODE( 2, uiCode, "sps_num_hor_virtual_boundaries"); pcSPS->setNumHorVirtualBoundaries( uiCode ); +#if JVET_S0221_NUM_VB_CHECK + if (pcSPS->getMaxPicHeightInLumaSamples() <= 8) + { + CHECK(pcSPS->getNumHorVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < pcSPS->getNumHorVirtualBoundaries(); i++ ) { READ_UVLC(uiCode, "sps_virtual_boundaries_pos_y"); pcSPS->setVirtualBoundariesPosY(uiCode << 3, i); @@ -2579,11 +2591,23 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag if( picHeader->getVirtualBoundariesPresentFlag() ) { READ_CODE( 2, uiCode, "ph_num_ver_virtual_boundaries"); picHeader->setNumVerVirtualBoundaries( uiCode ); +#if JVET_S0221_NUM_VB_CHECK + if (pps->getPicWidthInLumaSamples() <= 8) + { + CHECK(picHeader->getNumVerVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < picHeader->getNumVerVirtualBoundaries(); i++ ) { READ_UVLC(uiCode, "ph_virtual_boundaries_pos_x"); picHeader->setVirtualBoundariesPosX(uiCode << 3, i); } READ_CODE( 2, uiCode, "ph_num_hor_virtual_boundaries"); picHeader->setNumHorVirtualBoundaries( uiCode ); +#if JVET_S0221_NUM_VB_CHECK + if (pps->getPicHeightInLumaSamples() <= 8) + { + CHECK(picHeader->getNumHorVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < picHeader->getNumHorVirtualBoundaries(); i++ ) { READ_UVLC(uiCode, "ph_virtual_boundaries_pos_y"); picHeader->setVirtualBoundariesPosY(uiCode << 3, i); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 88afee44dc..79f8ac65a7 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1136,11 +1136,23 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) if( pcSPS->getVirtualBoundariesPresentFlag() ) { WRITE_CODE( pcSPS->getNumVerVirtualBoundaries(), 2, "sps_num_ver_virtual_boundaries"); +#if JVET_S0221_NUM_VB_CHECK + if (pcSPS->getMaxPicWidthInLumaSamples() <= 8) + { + CHECK(pcSPS->getNumVerVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < pcSPS->getNumVerVirtualBoundaries(); i++ ) { WRITE_UVLC((pcSPS->getVirtualBoundariesPosX(i)>>3), "sps_virtual_boundaries_pos_x"); } WRITE_CODE(pcSPS->getNumHorVirtualBoundaries(), 2, "sps_num_hor_virtual_boundaries"); +#if JVET_S0221_NUM_VB_CHECK + if (pcSPS->getMaxPicHeightInLumaSamples() <= 8) + { + CHECK(pcSPS->getNumHorVirtualBoundaries() == 0, "SPS: When picture height is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < pcSPS->getNumHorVirtualBoundaries(); i++ ) { WRITE_UVLC((pcSPS->getVirtualBoundariesPosY(i)>>3), "sps_virtual_boundaries_pos_y"); @@ -1580,11 +1592,23 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB if( picHeader->getVirtualBoundariesPresentFlag() ) { WRITE_CODE(picHeader->getNumVerVirtualBoundaries(), 2, "ph_num_ver_virtual_boundaries"); +#if JVET_S0221_NUM_VB_CHECK + if (pps->getPicWidthInLumaSamples() <= 8) + { + CHECK(picHeader->getNumVerVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < picHeader->getNumVerVirtualBoundaries(); i++ ) { WRITE_UVLC(picHeader->getVirtualBoundariesPosX(i) >> 3, "ph_virtual_boundaries_pos_x"); } WRITE_CODE(picHeader->getNumHorVirtualBoundaries(), 2, "ph_num_hor_virtual_boundaries"); +#if JVET_S0221_NUM_VB_CHECK + if (pps->getPicHeightInLumaSamples() <= 8) + { + CHECK(picHeader->getNumHorVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + } +#endif for( unsigned i = 0; i < picHeader->getNumHorVirtualBoundaries(); i++ ) { WRITE_UVLC(picHeader->getVirtualBoundariesPosY(i)>>3, "ph_virtual_boundaries_pos_y"); -- GitLab From c05ae25700d4d44f6196b23a7ae13d7451006895 Mon Sep 17 00:00:00 2001 From: Yao-Jen Chang <yjchang@qti.qualcomm.com> Date: Mon, 6 Jul 2020 11:45:45 -0700 Subject: [PATCH 2/2] JVET-S0221: Fix bugs, resolve conflict, and add one check at configure --- source/App/EncoderApp/EncAppCfg.cpp | 11 +++++++++++ source/Lib/CommonLib/TypeDef.h | 2 +- source/Lib/DecoderLib/VLCReader.cpp | 8 ++++---- source/Lib/EncoderLib/VLCWriter.cpp | 8 ++++---- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index c6da6cf151..970b78140e 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1615,6 +1615,17 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) CHECK(m_resChangeInClvsEnabled, "resolution change in CLVS and subpictures cannot be enabled together"); } +#if JVET_S0221_NUM_VB_CHECK + if (m_virtualBoundariesPresentFlag) + { + if (m_iSourceWidth <= 8) + CHECK(m_numVerVirtualBoundaries != 0, "The number of vertical virtual boundaries shall be 0 when the picture width is less than or equal to 8"); + + if (m_iSourceHeight <= 8) + CHECK(m_numHorVirtualBoundaries != 0, "The number of horizontal virtual boundaries shall be 0 when the picture height is less than or equal to 8"); + } +#endif + if (m_cfgSubpictureLevelInfoSEI.m_enabled) { CHECK (m_numSubPics != m_cfgSubpictureLevelInfoSEI.m_numSubpictures, "NumSubPics must be equal to SEISubpicLevelInfoNumSubpics" ); diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 587c845f54..28a9f88587 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -53,7 +53,7 @@ //########### place macros to be removed in next cycle below this line ############### -#define JVET_R0042_SUBPIC_CHECK 1 // JVET_R0042: SubPicture types related constraints +#define JVET_S0221_NUM_VB_CHECK 1 // JVET_S0221: Constraints on the number of virtual boundaries //########### place macros to be be kept below this line ############### diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index a526534e5a..5e750dd58a 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -1873,7 +1873,7 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) #if JVET_S0221_NUM_VB_CHECK if (pcSPS->getMaxPicWidthInLumaSamples() <= 8) { - CHECK(pcSPS->getNumVerVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + CHECK(pcSPS->getNumVerVirtualBoundaries() != 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < pcSPS->getNumVerVirtualBoundaries(); i++ ) @@ -1884,7 +1884,7 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) #if JVET_S0221_NUM_VB_CHECK if (pcSPS->getMaxPicHeightInLumaSamples() <= 8) { - CHECK(pcSPS->getNumHorVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + CHECK(pcSPS->getNumHorVirtualBoundaries() != 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < pcSPS->getNumHorVirtualBoundaries(); i++ ) @@ -2594,7 +2594,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag #if JVET_S0221_NUM_VB_CHECK if (pps->getPicWidthInLumaSamples() <= 8) { - CHECK(picHeader->getNumVerVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + CHECK(picHeader->getNumVerVirtualBoundaries() != 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < picHeader->getNumVerVirtualBoundaries(); i++ ) @@ -2605,7 +2605,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag #if JVET_S0221_NUM_VB_CHECK if (pps->getPicHeightInLumaSamples() <= 8) { - CHECK(picHeader->getNumHorVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + CHECK(picHeader->getNumHorVirtualBoundaries() != 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < picHeader->getNumHorVirtualBoundaries(); i++ ) diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 79f8ac65a7..71f55c30fc 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1139,7 +1139,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) #if JVET_S0221_NUM_VB_CHECK if (pcSPS->getMaxPicWidthInLumaSamples() <= 8) { - CHECK(pcSPS->getNumVerVirtualBoundaries() == 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + CHECK(pcSPS->getNumVerVirtualBoundaries() != 0, "SPS: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < pcSPS->getNumVerVirtualBoundaries(); i++ ) @@ -1150,7 +1150,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) #if JVET_S0221_NUM_VB_CHECK if (pcSPS->getMaxPicHeightInLumaSamples() <= 8) { - CHECK(pcSPS->getNumHorVirtualBoundaries() == 0, "SPS: When picture height is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + CHECK(pcSPS->getNumHorVirtualBoundaries() != 0, "SPS: When picture height is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < pcSPS->getNumHorVirtualBoundaries(); i++ ) @@ -1595,7 +1595,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB #if JVET_S0221_NUM_VB_CHECK if (pps->getPicWidthInLumaSamples() <= 8) { - CHECK(picHeader->getNumVerVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); + CHECK(picHeader->getNumVerVirtualBoundaries() != 0, "PH: When picture width is less than or equal to 8, the number of vertical virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < picHeader->getNumVerVirtualBoundaries(); i++ ) @@ -1606,7 +1606,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB #if JVET_S0221_NUM_VB_CHECK if (pps->getPicHeightInLumaSamples() <= 8) { - CHECK(picHeader->getNumHorVirtualBoundaries() == 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); + CHECK(picHeader->getNumHorVirtualBoundaries() != 0, "PH: When picture width is less than or equal to 8, the number of horizontal virtual boundaries shall be equal to 0"); } #endif for( unsigned i = 0; i < picHeader->getNumHorVirtualBoundaries(); i++ ) -- GitLab