summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-04-19 16:31:20 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-04-23 14:13:40 +0200
commit2d6522bab0011a91a50aaad4b206d0a256b89621 (patch)
tree7a08322f35376f4ca25d991f64cff4071458eac9
parentf75ee4031e0d898ba1cb3269f09dcf7e9ee99b07 (diff)
vsrc_buffer: count the number of failed requests.
-rw-r--r--libavfilter/vsrc_buffer.c9
-rw-r--r--libavfilter/vsrc_buffer.h9
2 files changed, 18 insertions, 0 deletions
diff --git a/libavfilter/vsrc_buffer.c b/libavfilter/vsrc_buffer.c
index a22665b8e7..b3d1ef583a 100644
--- a/libavfilter/vsrc_buffer.c
+++ b/libavfilter/vsrc_buffer.c
@@ -40,6 +40,7 @@ typedef struct {
AVRational sample_aspect_ratio;
char sws_param[256];
int eof;
+ unsigned nb_failed_requests;
} BufferSourceContext;
#define CHECK_PARAM_CHANGE(s, c, width, height, format)\
@@ -123,6 +124,7 @@ int av_vsrc_buffer_add_video_buffer_ref(AVFilterContext *buffer_filter,
avfilter_unref_buffer(buf);
return ret;
}
+ c->nb_failed_requests = 0;
return 0;
}
@@ -147,6 +149,7 @@ int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf)
if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0)
return ret;
+ c->nb_failed_requests = 0;
return 0;
}
@@ -178,6 +181,11 @@ int av_vsrc_buffer_add_frame(AVFilterContext *buffer_src,
}
#endif
+unsigned av_vsrc_buffer_get_nb_failed_requests(AVFilterContext *buffer_src)
+{
+ return ((BufferSourceContext *)buffer_src->priv)->nb_failed_requests;
+}
+
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
{
BufferSourceContext *c = ctx->priv;
@@ -249,6 +257,7 @@ static int request_frame(AVFilterLink *link)
if (!av_fifo_size(c->fifo)) {
if (c->eof)
return AVERROR_EOF;
+ c->nb_failed_requests++;
return AVERROR(EAGAIN);
}
av_fifo_generic_read(c->fifo, &buf, sizeof(buf), NULL);
diff --git a/libavfilter/vsrc_buffer.h b/libavfilter/vsrc_buffer.h
index b661d414ea..7f25c9868d 100644
--- a/libavfilter/vsrc_buffer.h
+++ b/libavfilter/vsrc_buffer.h
@@ -46,4 +46,13 @@
int av_vsrc_buffer_add_video_buffer_ref(AVFilterContext *buffer_src,
AVFilterBufferRef *picref, int flags);
+/**
+ * Get the number of failed requests.
+ *
+ * A failed request is when the request_frame method is called while no
+ * frame is present in the buffer.
+ * The number is reset when a frame is added.
+ */
+unsigned av_vsrc_buffer_get_nb_failed_requests(AVFilterContext *buffer_src);
+
#endif /* AVFILTER_VSRC_BUFFER_H */