avcodec/cbs_av1: fix parsing frame_size_with_refs
authorJames Almer <jamrial@gmail.com>
Sat, 27 Oct 2018 00:32:36 +0000 (21:32 -0300)
committerJames Almer <jamrial@gmail.com>
Sat, 27 Oct 2018 19:06:36 +0000 (16:06 -0300)
found_ref is not a single value in the bitstream. Fixes parsing files with
frame size changes.

Based on code from cbs_vp9.

Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/cbs_av1.h
libavcodec/cbs_av1_syntax_template.c

index 0d7fd76..b66a09c 100644 (file)
@@ -161,7 +161,7 @@ typedef struct AV1RawFrameHeader {
     uint8_t  render_width_minus_1;
     uint8_t  render_height_minus_1;
 
-    uint8_t found_ref;
+    uint8_t found_ref[AV1_REFS_PER_FRAME];
 
     uint8_t refresh_frame_flags;
     uint8_t allow_intrabc;
index 84ab297..e146bbf 100644 (file)
@@ -417,8 +417,8 @@ static int FUNC(frame_size_with_refs)(CodedBitstreamContext *ctx, RWContext *rw,
     int i, err;
 
     for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
-        flag(found_ref);
-        if (current->found_ref) {
+        flags(found_ref[i], 1, i);
+        if (current->found_ref[i]) {
             AV1ReferenceFrameState *ref =
                 &priv->ref[current->ref_frame_idx[i]];
 
@@ -439,7 +439,7 @@ static int FUNC(frame_size_with_refs)(CodedBitstreamContext *ctx, RWContext *rw,
         }
     }
 
-    if (current->found_ref == 0) {
+    if (i >= AV1_REFS_PER_FRAME) {
         CHECK(FUNC(frame_size)(ctx, rw, current));
         CHECK(FUNC(render_size)(ctx, rw, current));
     } else {