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.
Unified · Split
| @@ -1049,8 +1049,10 @@ static int output_frame(AVFilterContext *ctx, int64_t pts) · 1048 unmodified lines | ||
| 1049 | 1049 | FilterLink *il = ff_filter_link(ctx->inputs[i]); |
| 1050 | 1050 | FilterLink *ol = ff_filter_link(outlink); |
| 1051 | 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 | 1054 | continue; |
| 1055 | + } | |
| 1054 | 1056 | opts->params.skip_caching_single_frame = high_fps; |
| 1055 | 1057 | update_crops(ctx, in, &target, target_pts); |
| 1056 | 1058 | pl_render_image_mix(in->renderer, &in->mix, &target, &opts->params); |