Commit fcf8706e authored by Nicolas George's avatar Nicolas George

sink_buffer: warn when there are too many buffers.

parent 05d6cc11
...@@ -56,6 +56,7 @@ AVABufferSinkParams *av_abuffersink_params_alloc(void) ...@@ -56,6 +56,7 @@ AVABufferSinkParams *av_abuffersink_params_alloc(void)
typedef struct { typedef struct {
AVFifoBuffer *fifo; ///< FIFO buffer of video frame references AVFifoBuffer *fifo; ///< FIFO buffer of video frame references
unsigned warning_limit;
/* only used for video */ /* only used for video */
enum PixelFormat *pixel_fmts; ///< list of accepted pixel formats, must be terminated with -1 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) ...@@ -76,6 +77,7 @@ static av_cold int common_init(AVFilterContext *ctx)
av_log(ctx, AV_LOG_ERROR, "Failed to allocate fifo\n"); av_log(ctx, AV_LOG_ERROR, "Failed to allocate fifo\n");
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
buf->warning_limit = 100;
return 0; return 0;
} }
...@@ -113,6 +115,14 @@ static void end_frame(AVFilterLink *inlink) ...@@ -113,6 +115,14 @@ static void end_frame(AVFilterLink *inlink)
/* cache frame */ /* cache frame */
av_fifo_generic_write(buf->fifo, av_fifo_generic_write(buf->fifo,
&inlink->cur_buf, sizeof(AVFilterBufferRef *), NULL); &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, int av_buffersink_get_buffer_ref(AVFilterContext *ctx,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment