diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-06-28 13:21:42 +0400 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-06-28 23:10:03 +0400 |
commit | fcf8706ed9f74f056b64468d2901cb4a9de7d19e (patch) | |
tree | 29bbcf25576bb60208bcda42e5ae425471fe34ea /libavfilter/sink_buffer.c | |
parent | 05d6cc116ec663675d78f93912c35be085977d04 (diff) |
sink_buffer: warn when there are too many buffers.
Diffstat (limited to 'libavfilter/sink_buffer.c')
-rw-r--r-- | libavfilter/sink_buffer.c | 10 |
1 files changed, 10 insertions, 0 deletions
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, |