[FFmpeg-devel] [PATCH 1/2] examples/decode_filter_audio: Add loop for draining the filtergraph

Tobias Rapp t.rapp at noa-archive.com
Wed Mar 27 12:51:30 EET 2024


Depending on the filters used the filtergraph can produce trailing data
after feeding it the last input frame. Update the example to include the
necessary loop for draining the filtergrap.

Signed-off-by: Tobias Rapp <t.rapp at noa-archive.com>
---
 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 2046419..196f080 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);
-- 
2.7.4



More information about the ffmpeg-devel mailing list