avfilter/avfilter: fix forwarding EOF for simple API filters in filter_activate_default

EOF only need to be forwarded back if all outputs have reached EOF.

Fixes infinte loop with ffprobe -f lavfi -i "smptebars=d=1,select=n=2:e=1[out0][out1]"
Regression since d9e41ead82.

Fixes ticket #10959.
Fixes ticket #11366.

Signed-off-by: Marton Balint <cus@passwd.hu>
(cherry picked from commit a736ac72bb)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Marton Balint
2025-06-21 08:21:40 +02:00
committed by Michael Niedermayer
parent e6a6020a8f
commit 00d12cb284

View File

@@ -1213,16 +1213,14 @@ static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li
static int ff_filter_activate_default(AVFilterContext *filter)
{
unsigned i;
int nb_eofs = 0;
for (i = 0; i < filter->nb_outputs; i++) {
FilterLinkInternal *li = ff_link_internal(filter->outputs[i]);
int ret = li->status_in;
if (ret) {
for (int j = 0; j < filter->nb_inputs; j++)
ff_inlink_set_status(filter->inputs[j], ret);
return 0;
}
for (i = 0; i < filter->nb_outputs; i++)
nb_eofs += ff_outlink_get_status(filter->outputs[i]) == AVERROR_EOF;
if (filter->nb_outputs && nb_eofs == filter->nb_outputs) {
for (int j = 0; j < filter->nb_inputs; j++)
ff_inlink_set_status(filter->inputs[j], AVERROR_EOF);
return 0;
}
for (i = 0; i < filter->nb_inputs; i++) {