obu: Fix decoder_peek_si_interal for size_after_header

BUG=aomedia:1531

Change-Id: Id0f4bb827e51c1e70b42eb57ae6e1075274a217c
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c
index 72cc3c8..2cc2714 100644
--- a/av1/av1_dx_iface.c
+++ b/av1/av1_dx_iface.c
@@ -161,6 +161,14 @@
   return AOM_CODEC_OK;
 }
 
+static size_t get_obu_length_field_size(const uint8_t *data) {
+  size_t length_field_size = 1;
+  for (size_t i = 0; i < sizeof(uint64_t) && (data[i] & 0x80); ++i) {
+    ++length_field_size;
+  }
+  return length_field_size;
+}
+
 static aom_codec_err_t decoder_peek_si_internal(const uint8_t *data,
                                                 unsigned int data_sz,
                                                 aom_codec_stream_info_t *si,
@@ -180,11 +188,10 @@
   intra_only_flag = 1;
   si->is_kf = 1;
 
-#if CONFIG_OBU_SIZING
-  size_t length_field_size = 1;
-  for (size_t i = 0; i < sizeof(uint64_t) && (data[i] & 0x80); ++i) {
-    ++length_field_size;
-  }
+#if CONFIG_OBU_SIZE_AFTER_HEADER
+  struct aom_read_bit_buffer rb = { data, data + data_sz, 0, NULL, NULL };
+#elif CONFIG_OBU_SIZING
+  const size_t length_field_size = get_obu_length_field_size(data);
   struct aom_read_bit_buffer rb = { data + length_field_size, data + data_sz, 0,
                                     NULL, NULL };
 #else
@@ -199,6 +206,11 @@
   if (get_obu_type(obu_header, &obu_type) != 0)
     return AOM_CODEC_UNSUP_BITSTREAM;
 
+#if CONFIG_OBU_SIZE_AFTER_HEADER
+  // One byte has been consumed by the OBU header.
+  rb.bit_offset += get_obu_length_field_size(data + 1);
+#endif
+
   // This check is disabled because existing behavior is depended upon by
   // decoder tests (see decode_test_driver.cc), scalability_decoder (see
   // scalable_decoder.c), and decode_once() in this file.