obu: Tile start and end must be implicit for OBU_FRAME

Ensure that in the decoder.

BUG=aomedia:1738

Change-Id: If86cfd29615c30d072036c30199e868102976422
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index f376775..b0e91cc 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -255,9 +255,10 @@
   return (uint32_t)(pbi->uncomp_hdr_size);
 }
 
-static uint32_t read_tile_group_header(AV1Decoder *pbi,
-                                       struct aom_read_bit_buffer *rb,
-                                       int *startTile, int *endTile) {
+static int32_t read_tile_group_header(AV1Decoder *pbi,
+                                      struct aom_read_bit_buffer *rb,
+                                      int *startTile, int *endTile,
+                                      int tile_start_implicit) {
   AV1_COMMON *const cm = &pbi->common;
   uint32_t saved_bit_offset = rb->bit_offset;
   int tile_start_and_end_present_flag = 0;
@@ -272,24 +273,26 @@
     *endTile = num_tiles - 1;
     return ((rb->bit_offset - saved_bit_offset + 7) >> 3);
   }
-
+  if (tile_start_implicit && tile_start_and_end_present_flag) {
+    return -1;
+  }
   *startTile = aom_rb_read_literal(rb, cm->log2_tile_rows + cm->log2_tile_cols);
   *endTile = aom_rb_read_literal(rb, cm->log2_tile_rows + cm->log2_tile_cols);
 
   return ((rb->bit_offset - saved_bit_offset + 7) >> 3);
 }
 
-static uint32_t read_one_tile_group_obu(AV1Decoder *pbi,
-                                        struct aom_read_bit_buffer *rb,
-                                        int is_first_tg, const uint8_t *data,
-                                        const uint8_t *data_end,
-                                        const uint8_t **p_data_end,
-                                        int *is_last_tg) {
+static uint32_t read_one_tile_group_obu(
+    AV1Decoder *pbi, struct aom_read_bit_buffer *rb, int is_first_tg,
+    const uint8_t *data, const uint8_t *data_end, const uint8_t **p_data_end,
+    int *is_last_tg, int tile_start_implicit) {
   AV1_COMMON *const cm = &pbi->common;
   int startTile, endTile;
-  uint32_t header_size, tg_payload_size;
+  int32_t header_size, tg_payload_size;
 
-  header_size = read_tile_group_header(pbi, rb, &startTile, &endTile);
+  header_size = read_tile_group_header(pbi, rb, &startTile, &endTile,
+                                       tile_start_implicit);
+  if (header_size == -1) return 0;
   if (startTile > endTile) return header_size;
   data += header_size;
   av1_decode_tg_tiles_and_wrapup(pbi, data, data_end, p_data_end, startTile,
@@ -543,7 +546,8 @@
         }
         decoded_payload_size += read_one_tile_group_obu(
             pbi, &rb, is_first_tg_obu_received, data + obu_payload_offset,
-            data + payload_size, p_data_end, &frame_decoding_finished);
+            data + payload_size, p_data_end, &frame_decoding_finished,
+            obu_header.type == OBU_FRAME);
         is_first_tg_obu_received = 0;
         break;
       case OBU_METADATA: