| @@ -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) | |||||
| 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) | |||||
| /* 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, | ||||