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 d9e41ead82263e96ebd14d4d88d6e7f858dd944c. Fixes ticket #10959. Fixes ticket #11366.
Unified · Split
| @@ -1253,16 +1253,14 @@ static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li · 1252 unmodified lines | |||
| 1253 | static int filter_activate_default(AVFilterContext *filter) | 1253 | static int filter_activate_default(AVFilterContext *filter) |
| 1254 | { | 1254 | { |
| 1255 | unsigned i; | 1255 | unsigned i; |
| 1256 | int nb_eofs = 0; | ||
| 1256 | 1257 | ||
| 1257 | for (i = 0; i < filter->nb_outputs; i++) { | 1258 | for (i = 0; i < filter->nb_outputs; i++) |
| 1258 | FilterLinkInternal *li = ff_link_internal(filter->outputs[i]); | 1259 | nb_eofs += ff_outlink_get_status(filter->outputs[i]) == AVERROR_EOF; |
| 1259 | int ret = li->status_in; | 1260 | if (filter->nb_outputs && nb_eofs == filter->nb_outputs) { |
| 1260 | 1261 | for (int j = 0; j < filter->nb_inputs; j++) | |
| 1261 | if (ret) { | 1262 | ff_inlink_set_status(filter->inputs[j], AVERROR_EOF); |
| 1262 | for (int j = 0; j < filter->nb_inputs; j++) | 1263 | return 0; |
| 1263 | ff_inlink_set_status(filter->inputs[j], ret); | ||
| 1264 | return 0; | ||
| 1265 | } | ||
| 1266 | } | 1264 | } |
| 1267 | 1265 | ||
| 1268 | for (i = 0; i < filter->nb_inputs; i++) { | 1266 | for (i = 0; i < filter->nb_inputs; i++) { |