X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fframesync.c;h=eb05d66a86eb6365ad2752bc1dbc248af68cbacc;hb=9b425bd24c48085b0d96bc0698af82bd46e57d03;hp=7920cdb379cdeea94a02b79ca11c3f1a34d8b1c4;hpb=3e71e34333c7cd1225de4807bf86fff01ba8fd01;p=ffmpeg diff --git a/libavfilter/framesync.c b/libavfilter/framesync.c index 7920cdb379c..eb05d66a86e 100644 --- a/libavfilter/framesync.c +++ b/libavfilter/framesync.c @@ -18,6 +18,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define FF_INTERNAL_FIELDS 1 +#include "framequeue.h" + #include "libavutil/avassert.h" #include "avfilter.h" #include "bufferqueue.h" @@ -314,7 +317,7 @@ int ff_framesync_filter_frame(FFFrameSync *fs, AVFilterLink *inlink, int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; - int input, ret; + int input, ret, i; if ((ret = ff_framesync_process_frame(fs, 0)) < 0) return ret; @@ -323,6 +326,11 @@ int ff_framesync_request_frame(FFFrameSync *fs, AVFilterLink *outlink) if (fs->eof) return AVERROR_EOF; input = fs->in_request; + /* Detect status change early */ + for (i = 0; i < fs->nb_in; i++) + if (!ff_framequeue_queued_frames(&ctx->inputs[i]->fifo) && + ctx->inputs[i]->status_in && !ctx->inputs[i]->status_out) + input = i; ret = ff_request_frame(ctx->inputs[input]); if (ret == AVERROR_EOF) { if ((ret = ff_framesync_add_frame(fs, input, NULL)) < 0)