summaryrefslogtreecommitdiff
path: root/libavfilter/sink_buffer.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-06-28 11:21:42 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-06-28 21:10:03 +0200
commitfcf8706ed9f74f056b64468d2901cb4a9de7d19e (patch)
tree29bbcf25576bb60208bcda42e5ae425471fe34ea /libavfilter/sink_buffer.c
parent05d6cc116ec663675d78f93912c35be085977d04 (diff)
sink_buffer: warn when there are too many buffers.
Diffstat (limited to 'libavfilter/sink_buffer.c')
-rw-r--r--libavfilter/sink_buffer.c10
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,