Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2020-08-24 19:04:23 +0300
committerJames Almer <jamrial@gmail.com>2020-09-06 04:30:23 +0300
commit74c9965096e52a806f21938d1a06e01c3b214c85 (patch)
tree51bdff4db2eca033ce87bd6aa6f5f2d9c83ea598
parentaf72c164683552ef5b9b89b07e6a57fb5fa19403 (diff)
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@gmail.com> (cherry picked from commit e76b4b2a6b488ecc3f55cb48dea971c17588d075)
-rw-r--r--libavcodec/cbs_av1_syntax_template.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index 61e3d11f64..8d93f75ada 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -1276,12 +1276,23 @@ 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);
- return 0;
+ // Section 7.20
+ goto update_refs;
}
fb(2, frame_type);
@@ -1543,6 +1554,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) {
@@ -1562,15 +1583,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;
}