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.
Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -1049,8 +1049,10 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) · 1048 unmodified lines | |||
| 1049 | FilterLink *il = ff_filter_link(ctx->inputs[i]); | 1049 | FilterLink *il = ff_filter_link(ctx->inputs[i]); |
| 1050 | FilterLink *ol = ff_filter_link(outlink); | 1050 | FilterLink *ol = ff_filter_link(outlink); |
| 1051 | int high_fps = av_cmp_q(il->frame_rate, ol->frame_rate) >= 0; | 1051 | int high_fps = av_cmp_q(il->frame_rate, ol->frame_rate) >= 0; |
| 1052 | if (in->qstatus != PL_QUEUE_OK || !in->mix.num_frames || i < idx_start) | 1052 | if (in->qstatus != PL_QUEUE_OK || !in->mix.num_frames || i < idx_start) { |
| 1053 | pl_renderer_flush_cache(in->renderer); | ||
| 1053 | continue; | 1054 | continue; |
| 1055 | } | ||
| 1054 | opts->params.skip_caching_single_frame = high_fps; | 1056 | opts->params.skip_caching_single_frame = high_fps; |
| 1055 | update_crops(ctx, in, &target, target_pts); | 1057 | update_crops(ctx, in, &target, target_pts); |
| 1056 | pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params); | 1058 | pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params); |