[FFmpeg-devel] [PATCH 3/3] avcodec/cbs_av1: fix handling reference frames on show_existing_frame frames
James Almer
jamrial at gmail.com
Mon Aug 24 20:08:50 EEST 2020
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>
---
libavcodec/cbs_av1_syntax_template.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index 258779c591..f5ed189be4 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,7 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
CHECK(FUNC(film_grain_params)(ctx, rw, current));
+update_refs:
for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
if (current->refresh_frame_flags & (1 << i)) {
priv->ref[i] = (AV1ReferenceFrameState) {
@@ -1592,6 +1598,10 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
}
}
+ // Don't print debug log a second time
+ if (current->show_existing_frame)
+ return 0;
+
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,
--
2.27.0
More information about the ffmpeg-devel
mailing list