From 2d6522bab0011a91a50aaad4b206d0a256b89621 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Thu, 19 Apr 2012 16:31:20 +0200 Subject: [PATCH] vsrc_buffer: count the number of failed requests. --- libavfilter/vsrc_buffer.c | 9 +++++++++ libavfilter/vsrc_buffer.h | 9 +++++++++ 2 files changed, 18 insertions(+) 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 */