From 1f7786ca788c3059704ed5d49b169c9cb90e76e4 Mon Sep 17 00:00:00 2001 From: sc29wg11 <zhangkai.video@bytedance.com> Date: Sun, 24 May 2020 14:17:51 -0700 Subject: [PATCH] Commit JVET-R0062 --- source/Lib/CommonLib/Slice.cpp | 2 ++ source/Lib/CommonLib/TypeDef.h | 2 ++ source/Lib/DecoderLib/VLCReader.cpp | 7 +++++++ source/Lib/EncoderLib/VLCWriter.cpp | 10 ++++++++++ 4 files changed, 21 insertions(+) diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 4db41ba7b..e352a93a3 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -2811,6 +2811,7 @@ void PPS::initTiles() // check explicit tile column sizes uint32_t remainingWidthInCtu = m_picWidthInCtu; + for( colIdx = 0; colIdx < m_numExpTileCols; colIdx++ ) { CHECK(m_tileColWidth[colIdx] > remainingWidthInCtu, "Tile column width exceeds picture width"); @@ -2831,6 +2832,7 @@ void PPS::initTiles() // check explicit tile row sizes uint32_t remainingHeightInCtu = m_picHeightInCtu; + for( rowIdx = 0; rowIdx < m_numExpTileRows; rowIdx++ ) { CHECK(m_tileRowHeight[rowIdx] > remainingHeightInCtu, "Tile row height exceeds picture height"); diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 9715ee901..cf5d2cfb9 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -51,6 +51,8 @@ #include <cassert> //########### place macros to be removed in next cycle below this line ############### +#define JVET_R0062 1 // JVET-R0062: changes on uniform tile and rectangular slice partitioning + #define JVET_R0058 1 // JVET-R0058: the combination of RPR, subpictures, and scalability #define JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING 1 // JVET-R0078: disable chroma DBF offset signalling diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 4c5659142..4167ed63d 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -655,13 +655,20 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS ) uint32_t numExpSliceInTile = uiCode; uint32_t remTileRowHeight = pcPPS->getTileRowHeight(tileIdx / pcPPS->getNumTileColumns()); int j = 0; + +#if JVET_R0062 + for( ; j < numExpSliceInTile; j++ ) +#else for( ; j < numExpSliceInTile - 1; j++ ) +#endif { READ_UVLC(uiCode, "exp_slice_height_in_ctus_minus1[i]"); pcPPS->setSliceHeightInCtu(i + j, uiCode + 1); remTileRowHeight -= (uiCode + 1); } +#if !JVET_R0062 READ_UVLC(uiCode, "exp_slice_height_in_ctus_minus1[i]"); +#endif uint32_t uniformSliceHeight = uiCode + 1; while( remTileRowHeight >= uniformSliceHeight ) diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 1d312e738..17195e50f 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -408,11 +408,21 @@ void HLSWriter::codePPS( const PPS* pcPPS ) } } } +#if JVET_R0062 + uint32_t iExpSliceHeightSum = 0; +#endif WRITE_UVLC(numExpSliceInTile, "num_exp_slices_in_tile[i]"); for( int j = 0; j < numExpSliceInTile; j++ ) { WRITE_UVLC(pcPPS->getSliceHeightInCtu(i + j) - 1, "exp_slice_height_in_ctus_minus1[i]"); +#if JVET_R0062 + iExpSliceHeightSum += pcPPS->getSliceHeightInCtu(i + j); +#endif } + +#if JVET_R0062 + CHECK( iExpSliceHeightSum > pcPPS->getTileRowHeight(pcPPS->getSliceTileIdx(i) / pcPPS->getNumTileColumns()), "The sum of expressed slice heights is larger than the height of the tile containing the slices."); +#endif i += (pcPPS->getNumSlicesInTile(i) - 1); } -- GitLab