Do not allow palette mode for partition sizes larger than 64x64

Tested on screen_content, it has very little impact on compression quality.

Change-Id: I49c7d5e8de8420c0d2af1b327c084a2667cfea40
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 5d12740..1644057 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -1389,7 +1389,7 @@
 static INLINE int av1_allow_palette(int allow_screen_content_tools,
                                     BLOCK_SIZE sb_type) {
   return allow_screen_content_tools && sb_type >= BLOCK_8X8 &&
-         sb_type <= BLOCK_LARGEST;
+         sb_type <= BLOCK_64X64;
 }
 
 // Returns sub-sampled dimensions of the given block.
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 705d265..5ac7e15 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1195,11 +1195,6 @@
       { AOM_CDF7(23039, 27333, 30220, 30708, 31070, 31826) },
       { AOM_CDF7(13696, 18911, 23620, 25371, 29821, 31617) },
       { AOM_CDF7(12543, 20838, 27455, 28762, 29763, 31546) },
-#if CONFIG_EXT_PARTITION
-      { AOM_CDF7(12543, 20838, 27455, 28762, 29763, 31546) },
-      { AOM_CDF7(12543, 20838, 27455, 28762, 29763, 31546) },
-      { AOM_CDF7(12543, 20838, 27455, 28762, 29763, 31546) },
-#endif
     };
 
 const aom_cdf_prob default_palette_uv_size_cdf[PALETTE_BLOCK_SIZES][CDF_SIZE(
@@ -1214,26 +1209,24 @@
   { AOM_CDF7(8576, 13585, 17632, 20884, 23948, 27152) },
   { AOM_CDF7(15360, 24200, 26978, 30846, 31409, 32545) },
   { AOM_CDF7(9216, 14276, 19043, 22689, 25799, 28712) },
-#if CONFIG_EXT_PARTITION
-  { AOM_CDF7(9216, 14276, 19043, 22689, 25799, 28712) },
-  { AOM_CDF7(9216, 14276, 19043, 22689, 25799, 28712) },
-  { AOM_CDF7(9216, 14276, 19043, 22689, 25799, 28712) },
-#endif
 };
 
 // When palette mode is enabled, following probability tables indicate the
 // probabilities to code the "is_palette" bit (i.e. the bit that indicates
 // if this block uses palette mode or DC_PRED mode).
-const aom_prob av1_default_palette_y_mode_prob
-    [PALETTE_BLOCK_SIZES][PALETTE_Y_MODE_CONTEXTS] = {
-      { 240, 180, 100 }, { 240, 180, 100 }, { 240, 180, 100 },
-      { 240, 180, 100 }, { 240, 180, 100 }, { 240, 180, 100 },
-      { 240, 180, 100 }, { 240, 180, 100 }, { 240, 180, 100 },
-      { 240, 180, 100 },
-#if CONFIG_EXT_PARTITION
-      { 240, 180, 100 }, { 240, 180, 100 }, { 240, 180, 100 },
-#endif  // CONFIG_EXT_PARTITION
-    };
+const aom_prob av1_default_palette_y_mode_prob[PALETTE_BLOCK_SIZES]
+                                              [PALETTE_Y_MODE_CONTEXTS] = {
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                                { 240, 180, 100 },
+                                              };
 
 const aom_prob av1_default_palette_uv_mode_prob[PALETTE_UV_MODE_CONTEXTS] = {
   253, 229
@@ -1273,24 +1266,12 @@
                                                { { AOM_CDF2(128 * 240) },
                                                  { AOM_CDF2(128 * 180) },
                                                  { AOM_CDF2(128 * 100) } },
-#if CONFIG_EXT_PARTITION
-                                               { { AOM_CDF2(128 * 240) },
-                                                 { AOM_CDF2(128 * 180) },
-                                                 { AOM_CDF2(128 * 100) } },
-                                               { { AOM_CDF2(128 * 240) },
-                                                 { AOM_CDF2(128 * 180) },
-                                                 { AOM_CDF2(128 * 100) } },
-                                               { { AOM_CDF2(128 * 240) },
-                                                 { AOM_CDF2(128 * 180) },
-                                                 { AOM_CDF2(128 * 100) } },
-#endif  // CONFIG_EXT_PARTITION
                                              };
 
 const aom_cdf_prob
     default_palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][CDF_SIZE(2)] = {
       { AOM_CDF2(128 * 253) }, { AOM_CDF2(128 * 229) }
     };
-
 #endif
 
 const aom_cdf_prob default_palette_y_color_index_cdf
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index f263bda..310e58a 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -38,14 +38,6 @@
 // a value from 0 to 4 using 'palette_color_index_context_lookup' table.
 #define PALETTE_COLOR_INDEX_CONTEXTS 5
 
-// Maximum number of colors in a palette.
-#define PALETTE_MAX_SIZE 8
-// Minimum number of colors in a palette.
-#define PALETTE_MIN_SIZE 2
-
-// Palette mode is available for block sizes >= 8x8.
-#define PALETTE_BLOCK_SIZES (BLOCK_LARGEST - BLOCK_8X8 + 1)
-
 // Palette Y mode context for a block is determined by number of neighboring
 // blocks (top and/or left) using a palette for Y plane. So, possible Y mode'
 // context values are:
@@ -60,8 +52,6 @@
 // 1 if this block uses palette for Y plane (i.e. Y palette size > 0).
 #define PALETTE_UV_MODE_CONTEXTS 2
 
-#define PALETTE_MAX_BLOCK_SIZE (64 * 64)
-
 #if CONFIG_KF_CTX
 #define KF_MODE_CONTEXTS 5
 #endif
diff --git a/av1/common/enums.h b/av1/common/enums.h
index fe4ce59..8da1854 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -72,6 +72,17 @@
 
 #define MI_SIZE_64X64 (64 >> MI_SIZE_LOG2)
 
+#define MIN_PALETTE_BSIZE BLOCK_8X8
+#define MAX_PALETTE_BSIZE BLOCK_64X64
+#define MAX_PALETTE_SQUARE (64 * 64)
+// Maximum number of colors in a palette.
+#define PALETTE_MAX_SIZE 8
+// Minimum number of colors in a palette.
+#define PALETTE_MIN_SIZE 2
+// Palette mode is available for block sizes between MIN_PALETTE_BSIZE and
+// MAX_PALETTE_BSIZE.
+#define PALETTE_BLOCK_SIZES (MAX_PALETTE_BSIZE - MIN_PALETTE_BSIZE + 1)
+
 #if CONFIG_LOOPFILTER_LEVEL
 // 4 frame filter levels: y plane vertical, y plane horizontal,
 // u plane, and v plane
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 914c1a8..4826de2 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -840,9 +840,8 @@
   const MODE_INFO *const above_mi = xd->above_mi;
   const MODE_INFO *const left_mi = xd->left_mi;
   const BLOCK_SIZE bsize = mbmi->sb_type;
+  assert(av1_allow_palette(cm->allow_screen_content_tools, bsize));
   PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
-
-  assert(bsize >= BLOCK_8X8 && bsize <= BLOCK_LARGEST);
   const int block_palette_idx = bsize - BLOCK_8X8;
   int modev;
 
diff --git a/av1/decoder/decoder.h b/av1/decoder/decoder.h
index dcd0caf..1fe106c 100644
--- a/av1/decoder/decoder.h
+++ b/av1/decoder/decoder.h
@@ -44,7 +44,7 @@
   CFL_CTX cfl;
 #endif
   DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
-  DECLARE_ALIGNED(16, uint8_t, color_index_map[2][MAX_SB_SQUARE]);
+  DECLARE_ALIGNED(16, uint8_t, color_index_map[2][MAX_PALETTE_SQUARE]);
 #if CONFIG_MRC_TX
   DECLARE_ALIGNED(16, uint8_t, mrc_mask[MAX_SB_SQUARE]);
 #endif  // CONFIG_MRC_TX
@@ -61,7 +61,7 @@
   CFL_CTX cfl;
 #endif
   FRAME_CONTEXT tctx;
-  DECLARE_ALIGNED(16, uint8_t, color_index_map[2][MAX_SB_SQUARE]);
+  DECLARE_ALIGNED(16, uint8_t, color_index_map[2][MAX_PALETTE_SQUARE]);
 #if CONFIG_MRC_TX
   DECLARE_ALIGNED(16, uint8_t, mrc_mask[MAX_SB_SQUARE]);
 #endif  // CONFIG_MRC_TX
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 94c6ca4..645ead8 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1175,9 +1175,8 @@
   const MODE_INFO *const above_mi = xd->above_mi;
   const MODE_INFO *const left_mi = xd->left_mi;
   const BLOCK_SIZE bsize = mbmi->sb_type;
+  assert(av1_allow_palette(cm->allow_screen_content_tools, bsize));
   const PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
-
-  assert(bsize >= BLOCK_8X8 && bsize <= BLOCK_LARGEST);
   const int block_palette_idx = bsize - BLOCK_8X8;
 
   if (mbmi->mode == DC_PRED) {
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 2dd65d8..065e1a0 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -110,8 +110,8 @@
 } MvLimits;
 
 typedef struct {
-  uint8_t best_palette_color_map[MAX_SB_SQUARE];
-  float kmeans_data_buf[2 * MAX_SB_SQUARE];
+  uint8_t best_palette_color_map[MAX_PALETTE_SQUARE];
+  float kmeans_data_buf[2 * MAX_PALETTE_SQUARE];
 } PALETTE_BUFFER;
 
 typedef struct {
diff --git a/av1/encoder/context_tree.c b/av1/encoder/context_tree.c
index e88b7d6..1b014dd 100644
--- a/av1/encoder/context_tree.c
+++ b/av1/encoder/context_tree.c
@@ -49,10 +49,12 @@
 #endif
   }
 
-  for (i = 0; i < 2; ++i) {
-    CHECK_MEM_ERROR(
-        cm, ctx->color_index_map[i],
-        aom_memalign(32, num_pix * sizeof(*ctx->color_index_map[i])));
+  if (num_pix <= MAX_PALETTE_SQUARE) {
+    for (i = 0; i < 2; ++i) {
+      CHECK_MEM_ERROR(
+          cm, ctx->color_index_map[i],
+          aom_memalign(32, num_pix * sizeof(*ctx->color_index_map[i])));
+    }
   }
 #if CONFIG_MRC_TX
   CHECK_MEM_ERROR(cm, ctx->mrc_mask,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 862a0ff..53f09d9 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -3030,7 +3030,7 @@
     mbmi->filter_intra_mode_info.use_filter_intra_mode[0] = 0;
 #endif  // CONFIG_FILTER_INTRA
 
-    if (rows * cols > PALETTE_MAX_BLOCK_SIZE) return 0;
+    if (rows * cols > MAX_PALETTE_SQUARE) return 0;
 
 #if CONFIG_PALETTE_DELTA_ENCODING
     uint16_t color_cache[2 * PALETTE_MAX_SIZE];
@@ -5118,7 +5118,7 @@
   int plane_block_width, plane_block_height, rows, cols;
   av1_get_block_dimensions(bsize, 1, xd, &plane_block_width,
                            &plane_block_height, &rows, &cols);
-  if (rows * cols > PALETTE_MAX_BLOCK_SIZE) return;
+  if (rows * cols > MAX_PALETTE_SQUARE) return;
 
   mbmi->uv_mode = UV_DC_PRED;
 #if CONFIG_FILTER_INTRA