From 62893fb94ec19583daf0d6cd65bb6e392fb416cb Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Thu, 7 Aug 2025 22:07:32 +0200 Subject: [PATCH] avfilter/vf_libplacebo: flush render cache when input is invisible This prevents leaking stale metadata from previous frames, for example if an overlay temporarily obscures this input and then un-obscures it again. It is worth pointing out that this does change the semantics subtly, because of the smoothing period on detected HDR metadata, but I argue that the new behavior is an improvement, as it will avoid leaking past metadata that is definitely no longer relevant after an image is unobscured. --- libavfilter/vf_libplacebo.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c index e62114199b..d15c89b51e 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -1049,8 +1049,10 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) FilterLink *il = ff_filter_link(ctx->inputs[i]); FilterLink *ol = ff_filter_link(outlink); int high_fps = av_cmp_q(il->frame_rate, ol->frame_rate) >= 0; - if (in->qstatus != PL_QUEUE_OK || !in->mix.num_frames || i < idx_start) + if (in->qstatus != PL_QUEUE_OK || !in->mix.num_frames || i < idx_start) { + pl_renderer_flush_cache(in->renderer); continue; + } opts->params.skip_caching_single_frame = high_fps; update_crops(ctx, in, &target, target_pts); pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params);