From fcf8706ed9f74f056b64468d2901cb4a9de7d19e Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Thu, 28 Jun 2012 11:21:42 +0200 Subject: sink_buffer: warn when there are too many buffers. --- libavfilter/sink_buffer.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libavfilter/sink_buffer.c') diff --git a/libavfilter/sink_buffer.c b/libavfilter/sink_buffer.c index 85fbee2031..4db874fdfa 100644 --- a/libavfilter/sink_buffer.c +++ b/libavfilter/sink_buffer.c @@ -56,6 +56,7 @@ AVABufferSinkParams *av_abuffersink_params_alloc(void) typedef struct { AVFifoBuffer *fifo; ///< FIFO buffer of video frame references + unsigned warning_limit; /* only used for video */ enum PixelFormat *pixel_fmts; ///< list of accepted pixel formats, must be terminated with -1 @@ -76,6 +77,7 @@ static av_cold int common_init(AVFilterContext *ctx) av_log(ctx, AV_LOG_ERROR, "Failed to allocate fifo\n"); return AVERROR(ENOMEM); } + buf->warning_limit = 100; return 0; } @@ -113,6 +115,14 @@ static void end_frame(AVFilterLink *inlink) /* cache frame */ av_fifo_generic_write(buf->fifo, &inlink->cur_buf, sizeof(AVFilterBufferRef *), NULL); + if (buf->warning_limit && + av_fifo_size(buf->fifo) / sizeof(AVFilterBufferRef *) >= buf->warning_limit) { + av_log(ctx, AV_LOG_WARNING, + "%d buffers queued in %s, something may be wrong.\n", + buf->warning_limit, + (char *)av_x_if_null(ctx->name, ctx->filter->name)); + buf->warning_limit *= 10; + } } int av_buffersink_get_buffer_ref(AVFilterContext *ctx, -- cgit v1.2.3