[FFmpeg-cvslog] avcodec/cbs_av1: fix handling reference frames on show_existing_frame frames

James Almer git at videolan.org
Tue Aug 25 21:18:33 EEST 2020


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Mon Aug 24 13:04:23 2020 -0300| [e76b4b2a6b488ecc3f55cb48dea971c17588d075] | committer: James Almer

avcodec/cbs_av1: fix handling reference frames on show_existing_frame frames

Implement Section 7.21 "Reference frame loading process" and Section 7.20
"Reference frame update process" for show_existing_frame frames, as required by
the definition in Section 7.4 "Decode frame wrapup process".

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e76b4b2a6b488ecc3f55cb48dea971c17588d075
---

 libavcodec/cbs_av1_syntax_template.c | 42 ++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index 258779c591..18be6ca4a5 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -1295,9 +1295,19 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
                 fb(id_len, display_frame_id);
 
             infer(frame_type, frame->frame_type);
-            if (current->frame_type == AV1_FRAME_KEY)
+            if (current->frame_type == AV1_FRAME_KEY) {
                 infer(refresh_frame_flags, all_frames);
-            else
+
+                // Section 7.21
+                infer(current_frame_id, frame->frame_id);
+                priv->upscaled_width  = frame->upscaled_width;
+                priv->frame_width     = frame->frame_width;
+                priv->frame_height    = frame->frame_height;
+                priv->render_width    = frame->render_width;
+                priv->render_height   = frame->render_height;
+                priv->bit_depth       = frame->bit_depth;
+                priv->order_hint      = frame->order_hint;
+            } else
                 infer(refresh_frame_flags, 0);
 
             infer(frame_width_minus_1,   frame->upscaled_width - 1);
@@ -1305,13 +1315,8 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
             infer(render_width_minus_1,  frame->render_width - 1);
             infer(render_height_minus_1, frame->render_height - 1);
 
-            priv->upscaled_width = frame->upscaled_width;
-            priv->frame_width    = frame->frame_width;
-            priv->frame_height   = frame->frame_height;
-            priv->render_width   = frame->render_width;
-            priv->render_height  = frame->render_height;
-
-            return 0;
+            // Section 7.20
+            goto update_refs;
         }
 
         fb(2, frame_type);
@@ -1573,6 +1578,16 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
 
     CHECK(FUNC(film_grain_params)(ctx, rw, current));
 
+    av_log(ctx->log_ctx, AV_LOG_DEBUG, "Frame %d:  size %dx%d  "
+           "upscaled %d  render %dx%d  subsample %dx%d  "
+           "bitdepth %d  tiles %dx%d.\n", priv->order_hint,
+           priv->frame_width, priv->frame_height, priv->upscaled_width,
+           priv->render_width, priv->render_height,
+           seq->color_config.subsampling_x + 1,
+           seq->color_config.subsampling_y + 1, priv->bit_depth,
+           priv->tile_rows, priv->tile_cols);
+
+update_refs:
     for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
         if (current->refresh_frame_flags & (1 << i)) {
             priv->ref[i] = (AV1ReferenceFrameState) {
@@ -1592,15 +1607,6 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
         }
     }
 
-    av_log(ctx->log_ctx, AV_LOG_DEBUG, "Frame %d:  size %dx%d  "
-           "upscaled %d  render %dx%d  subsample %dx%d  "
-           "bitdepth %d  tiles %dx%d.\n", priv->order_hint,
-           priv->frame_width, priv->frame_height, priv->upscaled_width,
-           priv->render_width, priv->render_height,
-           seq->color_config.subsampling_x + 1,
-           seq->color_config.subsampling_y + 1, priv->bit_depth,
-           priv->tile_rows, priv->tile_cols);
-
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list