[NORMATIVE, obu-frame] Fix interaction with other experiments
* When trailing-bits is not enabled, the bit buffer 'rb' from
av1_decode_frame_from_obus() is not passed in to
read_frame_header_obu(), and is therefore not updated. This
means that, when we read the subsequent tile group, we start
reading from the wrong point (at the start of the frame header
again), leading to errors.
* The condition for when to 'break' after reading the frame header
is currently "obu_header.type == OBU_FRAME_HEADER". But the
OBU_REDUNDANT_FRAME_HEADER experiment adds another OBU type
which uses the same path. So the condition should really be
"obu_header.type != OBU_FRAME"
It's easiest to fix both of these together, as they are both
simple changes to the same bit of code.
BUG=aomedia:1624
Change-Id: Ia4b905ea54ad289f7a835ab2d52992b2490da6c2
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 68274f1..fba0e4d 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -466,12 +466,15 @@
break;
}
#if CONFIG_OBU_FRAME
- if (obu_header.type == OBU_FRAME_HEADER) break;
+ if (obu_header.type != OBU_FRAME) break;
obu_payload_offset = frame_header_size;
+#if !CONFIG_TRAILING_BITS
+ av1_init_read_bit_buffer(pbi, &rb, data + obu_payload_offset, data_end);
+#endif // !CONFIG_TRAILING_BITS
AOM_FALLTHROUGH_INTENDED; // fall through to read tile group.
-#else
+#else // CONFIG_OBU_FRAME
break;
-#endif // CONFIG_OBU_FRAME
+#endif // CONFIG_OBU_FRAME
case OBU_TILE_GROUP:
if (!frame_header_received) {
cm->error.error_code = AOM_CODEC_CORRUPT_FRAME;