From 00481a34fd72b1cbd7f4d1bd45b3cce5ecb1c1b6 Mon Sep 17 00:00:00 2001 From: Remy Foray <remy.foray@allegrodvt.com> Date: Thu, 23 Jul 2020 11:35:33 +0200 Subject: [PATCH] Remove checks on NUM_TILE_ROWS as the constraints are now on the number of tile in an AU, and a picture might have more than NUM_TILE_ROWS tile rows. --- source/Lib/CommonLib/CommonDef.h | 4 ++++ source/Lib/CommonLib/Slice.cpp | 2 ++ source/Lib/CommonLib/Slice.h | 4 ++++ source/Lib/DecoderLib/VLCReader.cpp | 2 ++ 4 files changed, 12 insertions(+) diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h index abc7909048..074082bba1 100644 --- a/source/Lib/CommonLib/CommonDef.h +++ b/source/Lib/CommonLib/CommonDef.h @@ -221,8 +221,12 @@ static const int NUM_APS_TYPE_LEN = 3; //Curren static const int MAX_NUM_APS_TYPE = 8; //Currently APS Type has 3 bits so the max type is 8 static const int MAX_TILE_COLS = 20; ///< Maximum number of tile columns +#if JVET_S0156_LEVEL_DEFINITION +static const int MAX_TILES = 440; ///< Maximum number of tiles +#else static const int MAX_TILE_ROWS = 22; ///< Maximum number of tile rows static const int MAX_TILES = MAX_TILE_COLS * MAX_TILE_ROWS; ///< Maximum number of tiles +#endif static const int MAX_SLICES = 600; ///< Maximum number of slices per picture static const int MLS_GRP_NUM = 1024; ///< Max number of coefficient groups, max(16, 256) diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index aff82d26bd..3425321f8c 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -3097,7 +3097,9 @@ void PPS::initTiles() uint32_t uniformTileRowHeight = m_tileRowHeight[rowIdx - 1]; while( remainingHeightInCtu > 0 ) { +#if !JVET_S0156_LEVEL_DEFINITION CHECK(rowIdx >= MAX_TILE_ROWS, "Number of tile rows exceeds valid range"); +#endif uniformTileRowHeight = std::min(remainingHeightInCtu, uniformTileRowHeight); m_tileRowHeight.push_back( uniformTileRowHeight ); remainingHeightInCtu -= uniformTileRowHeight; diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 63e6142215..71a4d69591 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -2146,7 +2146,11 @@ public: void setTileColumnWidths( std::vector<uint32_t> widths ) { m_tileColWidth = widths; } void setTileRowHeights( std::vector<uint32_t> heights ) { m_tileRowHeight = heights; } void addTileColumnWidth( uint32_t u ) { CHECK( m_tileColWidth.size() >= MAX_TILE_COLS, "Number of tile columns exceeds valid range" ); m_tileColWidth.push_back(u); } +#if JVET_S0156_LEVEL_DEFINITION + void addTileRowHeight( uint32_t u ) { m_tileRowHeight.push_back(u); } +#else void addTileRowHeight( uint32_t u ) { CHECK( m_tileRowHeight.size() >= MAX_TILE_ROWS, "Number of tile rows exceeds valid range" ); m_tileRowHeight.push_back(u); } +#endif uint32_t getTileColumnWidth( int idx ) const { CHECK( idx >= m_tileColWidth.size(), "Tile column index exceeds valid range" ); return m_tileColWidth[idx]; } uint32_t getTileRowHeight( int idx ) const { CHECK( idx >= m_tileRowHeight.size(), "Tile row index exceeds valid range" ); return m_tileRowHeight[idx]; } uint32_t getTileColumnBd( int idx ) const { CHECK( idx >= m_tileColBd.size(), "Tile column index exceeds valid range" ); return m_tileColBd[idx]; } diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 3ee87217a4..c11faf4f19 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -496,7 +496,9 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS ) READ_UVLC( uiCode, "num_exp_tile_columns_minus1" ); pcPPS->setNumExpTileColumns( uiCode + 1 ); READ_UVLC( uiCode, "num_exp_tile_rows_minus1" ); pcPPS->setNumExpTileRows( uiCode + 1 ); CHECK(pcPPS->getNumExpTileColumns() > MAX_TILE_COLS, "Number of explicit tile columns exceeds valid range"); +#if !JVET_S0156_LEVEL_DEFINITION CHECK(pcPPS->getNumExpTileRows() > MAX_TILE_ROWS, "Number of explicit tile rows exceeds valid range"); +#endif // tile sizes for( colIdx = 0; colIdx < pcPPS->getNumExpTileColumns(); colIdx++ ) -- GitLab