You've already forked FFmpeg
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:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user