From 6d86cef06ba36c0ed591e14a2382e9630059fc5d Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Mon, 27 Mar 2017 21:10:53 +0100 Subject: lavfi: Add support for increasing hardware frame pool sizes AVFilterContext.extra_hw_frames functions identically to the field of the same name in AVCodecContext. --- libavfilter/avfilter.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'libavfilter/avfilter.c') diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 83c1a7c20d..2c4a385ea9 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -368,6 +368,8 @@ static const AVOption avfilter_options[] = { { "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, { .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, FLAGS, "thread_type" }, { "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .unit = "thread_type" }, + { "extra_hw_frames", "Number of extra hardware frames to allocate for the user", + OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS }, { NULL }, }; @@ -707,3 +709,24 @@ const AVClass *avfilter_get_class(void) { return &avfilter_class; } + +int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link, + int default_pool_size) +{ + AVHWFramesContext *frames; + + // Must already be set by caller. + av_assert0(link->hw_frames_ctx); + + frames = (AVHWFramesContext*)link->hw_frames_ctx->data; + + if (frames->initial_pool_size == 0) { + // Dynamic allocation is necessarily supported. + } else if (avctx->extra_hw_frames >= 0) { + frames->initial_pool_size += avctx->extra_hw_frames; + } else { + frames->initial_pool_size = default_pool_size; + } + + return 0; +} -- cgit v1.2.3