1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avfilter/buffersink: keep requesting frames if one activation of the graph does not provide one

A frame graph activation might not produce a frame in the requested sink, so
keep on requesting a frame there unless we encounter a filter activation with
buffersrc empty error.

This makes av_buffersink_get_frame(_flags) work according to its documentation
which claims that EAGAIN is only returned if additional frames must be inserted
into the graph.

Fate changes are because audio frames will have different sizes at segment
boundaries, but content is the same.

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint
2025-06-22 16:28:44 +02:00
parent d41bac1333
commit 223c2b03da
5 changed files with 18 additions and 7 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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