You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
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>
This commit is contained in:
@ -1253,16 +1253,14 @@ static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li
|
|||||||
static int filter_activate_default(AVFilterContext *filter)
|
static int filter_activate_default(AVFilterContext *filter)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
int nb_eofs = 0;
|
||||||
|
|
||||||
for (i = 0; i < filter->nb_outputs; i++) {
|
for (i = 0; i < filter->nb_outputs; i++)
|
||||||
FilterLinkInternal *li = ff_link_internal(filter->outputs[i]);
|
nb_eofs += ff_outlink_get_status(filter->outputs[i]) == AVERROR_EOF;
|
||||||
int ret = li->status_in;
|
if (filter->nb_outputs && nb_eofs == filter->nb_outputs) {
|
||||||
|
for (int j = 0; j < filter->nb_inputs; j++)
|
||||||
if (ret) {
|
ff_inlink_set_status(filter->inputs[j], AVERROR_EOF);
|
||||||
for (int j = 0; j < filter->nb_inputs; j++)
|
return 0;
|
||||||
ff_inlink_set_status(filter->inputs[j], ret);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < filter->nb_inputs; i++) {
|
for (i = 0; i < filter->nb_inputs; i++) {
|
||||||
|
Reference in New Issue
Block a user