diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index fb33ad59c5..50a7da2756 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -113,6 +113,7 @@ static int get_frame_internal(AVFilterContext *ctx, AVFrame *frame, int flags, i int status, ret; AVFrame *cur_frame; int64_t pts; + int buffersrc_empty = 0; if (buf->peeked_frame) return return_or_keep_frame(buf, frame, buf->peeked_frame, flags); @@ -132,7 +133,11 @@ static int get_frame_internal(AVFilterContext *ctx, AVFrame *frame, int flags, i } else if (li->frame_wanted_out) { ret = ff_filter_graph_run_once(ctx->graph); if (ret == FFERROR_BUFFERSRC_EMPTY) { - // Do nothing for now... + buffersrc_empty = 1; + } else if (ret == AVERROR(EAGAIN)) { + if (buffersrc_empty) + return ret; + ff_inlink_request_frame(inlink); } else if (ret < 0) { return ret; } diff --git a/tests/ref/fate/filter-asegment-samples-absolute b/tests/ref/fate/filter-asegment-samples-absolute index 4090459aa7..ba9e9e269a 100644 --- a/tests/ref/fate/filter-asegment-samples-absolute +++ b/tests/ref/fate/filter-asegment-samples-absolute @@ -16,9 +16,11 @@ 0, 0, 0, 4096, 16384, 0x02ebe66b 0, 4096, 4096, 4096, 16384, 0x35bfe081 0, 8192, 8192, 1808, 7232, 0xa585202c -1, 10000, 10000, 6384, 25536, 0x17309ccf +1, 10000, 10000, 2288, 9152, 0x319ac07d +1, 12288, 12288, 4096, 16384, 0xd389dc43 1, 16384, 16384, 3616, 14464, 0x67e82600 -2, 20000, 20000, 4576, 18304, 0x4bc89a8b +2, 20000, 20000, 480, 1920, 0x24bfb749 +2, 20480, 20480, 4096, 16384, 0x378ee333 2, 24576, 24576, 4096, 16384, 0xabf6df0f 2, 28672, 28672, 4096, 16384, 0xedefe76f 2, 32768, 32768, 4096, 16384, 0x02ebe66b diff --git a/tests/ref/fate/filter-asegment-samples-relative b/tests/ref/fate/filter-asegment-samples-relative index 4090459aa7..ba9e9e269a 100644 --- a/tests/ref/fate/filter-asegment-samples-relative +++ b/tests/ref/fate/filter-asegment-samples-relative @@ -16,9 +16,11 @@ 0, 0, 0, 4096, 16384, 0x02ebe66b 0, 4096, 4096, 4096, 16384, 0x35bfe081 0, 8192, 8192, 1808, 7232, 0xa585202c -1, 10000, 10000, 6384, 25536, 0x17309ccf +1, 10000, 10000, 2288, 9152, 0x319ac07d +1, 12288, 12288, 4096, 16384, 0xd389dc43 1, 16384, 16384, 3616, 14464, 0x67e82600 -2, 20000, 20000, 4576, 18304, 0x4bc89a8b +2, 20000, 20000, 480, 1920, 0x24bfb749 +2, 20480, 20480, 4096, 16384, 0x378ee333 2, 24576, 24576, 4096, 16384, 0xabf6df0f 2, 28672, 28672, 4096, 16384, 0xedefe76f 2, 32768, 32768, 4096, 16384, 0x02ebe66b diff --git a/tests/ref/fate/filter-asegment-timestamps-absolute b/tests/ref/fate/filter-asegment-timestamps-absolute index b3f72c958a..5807194fc8 100644 --- a/tests/ref/fate/filter-asegment-timestamps-absolute +++ b/tests/ref/fate/filter-asegment-timestamps-absolute @@ -24,7 +24,8 @@ 0, 32768, 32768, 4096, 16384, 0x02ebe66b 0, 36864, 36864, 4096, 16384, 0x35bfe081 0, 40960, 40960, 3140, 12560, 0x13b5698a -1, 44100, 44100, 5052, 20208, 0xadc32273 +1, 44100, 44100, 956, 3824, 0xee464a2f +1, 45056, 45056, 4096, 16384, 0xe92bd835 1, 49152, 49152, 4096, 16384, 0x1126dca3 1, 53248, 53248, 4096, 16384, 0x9647edcf 1, 57344, 57344, 4096, 16384, 0x5cc345aa diff --git a/tests/ref/fate/filter-asegment-timestamps-relative b/tests/ref/fate/filter-asegment-timestamps-relative index b3f72c958a..5807194fc8 100644 --- a/tests/ref/fate/filter-asegment-timestamps-relative +++ b/tests/ref/fate/filter-asegment-timestamps-relative @@ -24,7 +24,8 @@ 0, 32768, 32768, 4096, 16384, 0x02ebe66b 0, 36864, 36864, 4096, 16384, 0x35bfe081 0, 40960, 40960, 3140, 12560, 0x13b5698a -1, 44100, 44100, 5052, 20208, 0xadc32273 +1, 44100, 44100, 956, 3824, 0xee464a2f +1, 45056, 45056, 4096, 16384, 0xe92bd835 1, 49152, 49152, 4096, 16384, 0x1126dca3 1, 53248, 53248, 4096, 16384, 0x9647edcf 1, 57344, 57344, 4096, 16384, 0x5cc345aa