Ticket #10795: possible-fix-drain-after-eof.patch

File possible-fix-drain-after-eof.patch, 1.1 KB (added by Niklas Haas, 2 years ago)

Possible fix: always drain after sending status to other inputs

  • libavfilter/avfilter.c

    diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
    index 0afc9533750..f660b9fee3d 100644
    a b static int ff_filter_activate_default(AVFilterContext *filter)  
    11981198    unsigned i;
    11991199
    12001200    for (i = 0; i < filter->nb_outputs; i++) {
    1201         FilterLinkInternal *li = ff_link_internal(filter->outputs[i]);
    1202         int ret = li->status_in;
     1201        FilterLinkInternal * const li_out = ff_link_internal(filter->outputs[i]);
     1202        int ret = li_out->status_in;
    12031203
    12041204        if (ret) {
    1205             for (int j = 0; j < filter->nb_inputs; j++)
    1206                 ff_inlink_set_status(filter->inputs[j], ret);
    1207             return 0;
     1205            for (int j = 0; j < filter->nb_inputs; j++) {
     1206                FilterLinkInternal * const li_in = ff_link_internal(filter->inputs[i]);
     1207                if (!li_in->status_out) {
     1208                    ff_inlink_set_status(filter->inputs[j], ret);
     1209                    return forward_status_change(filter, li_in);
     1210                }
     1211            }
    12081212        }
    12091213    }
    12101214