1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

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.
This commit is contained in:
Niklas Haas
2025-08-07 22:07:32 +02:00
committed by Niklas Haas
parent 3091bca3ed
commit 62893fb94e

View File

@@ -1049,8 +1049,10 @@ static int output_frame(AVFilterContext *ctx, int64_t pts)
FilterLink *il = ff_filter_link(ctx->inputs[i]); FilterLink *il = ff_filter_link(ctx->inputs[i]);
FilterLink *ol = ff_filter_link(outlink); FilterLink *ol = ff_filter_link(outlink);
int high_fps = av_cmp_q(il->frame_rate, ol->frame_rate) >= 0; 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; continue;
}
opts->params.skip_caching_single_frame = high_fps; opts->params.skip_caching_single_frame = high_fps;
update_crops(ctx, in, &target, target_pts); update_crops(ctx, in, &target, target_pts);
pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params); pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params);