History

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 d9e41ead82263e96ebd14d4d88d6e7f858dd944c. Fixes ticket #10959. Fixes ticket #11366.

Marton Balint committed 1 year ago

Commit a736ac71 parent 29e696c1 file · +7 −9Browse files

Showing the changes to libavfilter (1 of 1 file). Show all

Unified · Split

libavfilter/avfilter.c+7−9
@@ -1253,16 +1253,14 @@ static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li · 1252 unmodified lines
1253static int filter_activate_default(AVFilterContext *filter)1253static 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++) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t