aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorTobias Rapp <t.rapp@noa-archive.com>2024-03-27 11:44:45 +0100
committerTobias Rapp <t.rapp@noa-archive.com>2024-03-28 12:04:09 +0100
commit02eb2fc577e926e9f927829f1d8c8cdb8f31cbbd (patch)
tree6c30e55dacc1b513d6c68911a65183616ab73c5d /doc
parent55ce66606265013115ec309b3d1a4d26ef7c6046 (diff)
downloadffmpeg-02eb2fc577e926e9f927829f1d8c8cdb8f31cbbd.tar.gz
examples/decode_filter_video: 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>
Diffstat (limited to 'doc')
-rw-r--r--doc/examples/decode_filter_video.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/doc/examples/decode_filter_video.c b/doc/examples/decode_filter_video.c
index 454c19222f..a57e6dfd20 100644
--- a/doc/examples/decode_filter_video.c
+++ b/doc/examples/decode_filter_video.c
@@ -276,6 +276,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;
+ display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
+ av_frame_unref(filt_frame);
+ }
+ }
+
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);