aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Rapp <t.rapp@noa-archive.com>2024-03-27 11:40:49 +0100
committerTobias Rapp <t.rapp@noa-archive.com>2024-03-28 12:03:57 +0100
commit55ce66606265013115ec309b3d1a4d26ef7c6046 (patch)
tree9bc04534a543077ee691ff514f7593a0f2c7ff82
parent94ebe604b00acc170afa228824cd04773eb786ce (diff)
downloadffmpeg-55ce66606265013115ec309b3d1a4d26ef7c6046.tar.gz
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 <stefasab@gmail.com> Signed-off-by: Tobias Rapp <t.rapp@noa-archive.com>
-rw-r--r--doc/examples/decode_filter_audio.c19
1 files changed, 19 insertions, 0 deletions
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);