Refactor and clean up min-tile width check

This improves the check for the minimum tile restriction in the spec,
which requires that all tiles but the rightmost should be at least 64
pixels wide if superres not used, or 128 pixels wide if it is.

Change-Id: I2629bbc9fa4fcf719c745124c37c7958496ba272
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index a8ba3b5..8117dfc 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -502,7 +502,7 @@
   int tile_col_start_sb[MAX_TILE_COLS + 1];  // valid for 0 <= i <= tile_cols
   int tile_row_start_sb[MAX_TILE_ROWS + 1];  // valid for 0 <= i <= tile_rows
   int tile_width, tile_height;               // In MI units
-  int min_tile_width;                        // minimum tile width
+  int min_inner_tile_width;                  // min width of non-rightmost tile
 
   unsigned int large_scale_tile;
   unsigned int single_tile_decoding;
diff --git a/av1/common/tile_common.c b/av1/common/tile_common.c
index 63a745a..02f50f5 100644
--- a/av1/common/tile_common.c
+++ b/av1/common/tile_common.c
@@ -51,6 +51,10 @@
   int sb_rows = mi_rows >> cm->seq_params.mib_size_log2;
   int i;
 
+  // This will be overridden if there is at least two columns of tiles
+  // (otherwise there is no inner tile width)
+  cm->min_inner_tile_width = -1;
+
   if (cm->uniform_tile_spacing_flag) {
     int start_sb;
     int size_sb = ALIGN_POWER_OF_TWO(sb_cols, cm->log2_tile_cols);
@@ -67,24 +71,29 @@
 
     cm->tile_width = size_sb << cm->seq_params.mib_size_log2;
     cm->tile_width = AOMMIN(cm->tile_width, cm->mi_cols);
-    cm->min_tile_width = cm->tile_width;
+    if (cm->tile_cols > 1) {
+      cm->min_inner_tile_width = cm->tile_width;
+    }
   } else {
     int max_tile_area_sb = (sb_rows * sb_cols);
     int widest_tile_sb = 1;
-    int narrowest_tile_sb = 65536;
+    int narrowest_inner_tile_sb = 65536;
     cm->log2_tile_cols = tile_log2(1, cm->tile_cols);
     for (i = 0; i < cm->tile_cols; i++) {
       int size_sb = cm->tile_col_start_sb[i + 1] - cm->tile_col_start_sb[i];
       widest_tile_sb = AOMMAX(widest_tile_sb, size_sb);
       // ignore the rightmost tile in frame for determining the narrowest
       if (i < cm->tile_cols - 1)
-        narrowest_tile_sb = AOMMIN(narrowest_tile_sb, size_sb);
+        narrowest_inner_tile_sb = AOMMIN(narrowest_inner_tile_sb, size_sb);
     }
     if (cm->min_log2_tiles) {
       max_tile_area_sb >>= (cm->min_log2_tiles + 1);
     }
     cm->max_tile_height_sb = AOMMAX(max_tile_area_sb / widest_tile_sb, 1);
-    cm->min_tile_width = narrowest_tile_sb << cm->seq_params.mib_size_log2;
+    if (cm->tile_cols > 1) {
+      cm->min_inner_tile_width = narrowest_inner_tile_sb
+                                 << cm->seq_params.mib_size_log2;
+    }
   }
 }
 
@@ -215,6 +224,6 @@
   // Disable check if there is a single tile col in the frame
   if (cm->tile_cols == 1) return 1;
 
-  return ((cm->min_tile_width << MI_SIZE_LOG2) >=
+  return ((cm->min_inner_tile_width << MI_SIZE_LOG2) >=
           (64 << av1_superres_scaled(cm)));
 }