From 55ce66606265013115ec309b3d1a4d26ef7c6046 Mon Sep 17 00:00:00 2001 From: Tobias Rapp Date: Wed, 27 Mar 2024 11:40:49 +0100 Subject: [PATCH] examples/decode_filter_audio: Add loop for draining the filtergraph Depending on the filters used, the filtergraph may produce trailing data after feeding it the last input frame. Update the example to include the necessary loop for draining the filtergraph. Reviewed-by: Stefano Sabatini Signed-off-by: Tobias Rapp --- doc/examples/decode_filter_audio.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/examples/decode_filter_audio.c b/doc/examples/decode_filter_audio.c index 2046419819..196f0801c4 100644 --- a/doc/examples/decode_filter_audio.c +++ b/doc/examples/decode_filter_audio.c @@ -279,6 +279,25 @@ int main(int argc, char **argv) } av_packet_unref(packet); } + if (ret == AVERROR_EOF) { + /* signal EOF to the filtergraph */ + if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) { + av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n"); + goto end; + } + + /* pull remaining frames from the filtergraph */ + while (1) { + ret = av_buffersink_get_frame(buffersink_ctx, filt_frame); + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + break; + if (ret < 0) + goto end; + print_frame(filt_frame); + av_frame_unref(filt_frame); + } + } + end: avfilter_graph_free(&filter_graph); avcodec_free_context(&dec_ctx);