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