[FFmpeg-devel] [PATCH 1/2] buffersink: Implement a poll function. With this the application can find out how many frames are available.

Michael Niedermayer michaelni at gmx.at
Tue Dec 6 17:10:24 CET 2011


Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
 libavfilter/buffersink.h  |    6 ++++++
 libavfilter/sink_buffer.c |    8 ++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h
index c5ae7dc..980fa81 100644
--- a/libavfilter/buffersink.h
+++ b/libavfilter/buffersink.h
@@ -76,6 +76,12 @@ AVABufferSinkParams *av_abuffersink_params_alloc(void);
 int av_buffersink_get_buffer_ref(AVFilterContext *buffer_sink,
                                  AVFilterBufferRef **bufref, int flags);
 
+
+/**
+ * Gets the number of immedeatly available frames.
+ */
+int av_buffersink_poll_frame(AVFilterContext *ctx);
+
 #if FF_API_OLD_VSINK_API
 /**
  * @deprecated Use av_buffersink_get_buffer_ref() instead.
diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c
index bfbec7d..e572385 100644
--- a/libavfilter/sink_buffer.c
+++ b/libavfilter/sink_buffer.c
@@ -140,6 +140,14 @@ int av_buffersink_get_buffer_ref(AVFilterContext *ctx,
     return 0;
 }
 
+int av_buffersink_poll_frame(AVFilterContext *ctx)
+{
+    BufferSinkContext *buf = ctx->priv;
+    AVFilterLink *inlink = ctx->inputs[0];
+
+    return av_fifo_size(buf->fifo)/sizeof(AVFilterBufferRef *) + avfilter_poll_frame(inlink);
+}
+
 #if FF_API_OLD_VSINK_API
 int av_vsink_buffer_get_video_buffer_ref(AVFilterContext *ctx,
                                          AVFilterBufferRef **picref, int flags)
-- 
1.7.5.4



More information about the ffmpeg-devel mailing list