aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2017-08-05 22:10:46 +0100
committerMark Thompson <sw@jkqxz.net>2018-02-11 22:11:10 +0000
commitc6bc18bc121ea66df715123c59f7ef9542c0914a (patch)
treea6b4d6aeba3df36b5cf627f343efbe0c86f73eb8 /libavfilter
parente4cdef00263dc8b3c8de9d34ceacd00dc68979c0 (diff)
downloadffmpeg-c6bc18bc121ea66df715123c59f7ef9542c0914a.tar.gz
vf_hwupload/hwmap: Support setting a fixed pool size
These filters do not directly know whether the API they are using will support dynamic frame pools, so this is somewhat tricky. If the user sets extra_hw_frames, we assume that they are aware of the problem and set a fixed size based on that. If not, most cases use dynamic sizing just like they did previously. The hardware-reverse-mapping case for hwmap previously had a large fixed size (64) here, primarily as a hack for QSV use - this is removed and extra_hw_frames will need to be set for QSV to work since it requires fixed-size pools (as the other cases do, and which didn't work before).
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_hwmap.c7
-rw-r--r--libavfilter/vf_hwupload.c3
2 files changed, 9 insertions, 1 deletions
diff --git a/libavfilter/vf_hwmap.c b/libavfilter/vf_hwmap.c
index b28cb21456..d5ad2768f2 100644
--- a/libavfilter/vf_hwmap.c
+++ b/libavfilter/vf_hwmap.c
@@ -138,7 +138,9 @@ static int hwmap_config_output(AVFilterLink *outlink)
frames->sw_format = hwfc->sw_format;
frames->width = hwfc->width;
frames->height = hwfc->height;
- frames->initial_pool_size = 64;
+
+ if (avctx->extra_hw_frames >= 0)
+ frames->initial_pool_size = 2 + avctx->extra_hw_frames;
err = av_hwframe_ctx_init(ctx->hwframes_ref);
if (err < 0) {
@@ -218,6 +220,9 @@ static int hwmap_config_output(AVFilterLink *outlink)
hwfc->width = inlink->w;
hwfc->height = inlink->h;
+ if (avctx->extra_hw_frames >= 0)
+ hwfc->initial_pool_size = 2 + avctx->extra_hw_frames;
+
err = av_hwframe_ctx_init(ctx->hwframes_ref);
if (err < 0) {
av_log(avctx, AV_LOG_ERROR, "Failed to create frame "
diff --git a/libavfilter/vf_hwupload.c b/libavfilter/vf_hwupload.c
index 8cca9f42e2..af4ff9b81f 100644
--- a/libavfilter/vf_hwupload.c
+++ b/libavfilter/vf_hwupload.c
@@ -133,6 +133,9 @@ static int hwupload_config_output(AVFilterLink *outlink)
ctx->hwframes->width = inlink->w;
ctx->hwframes->height = inlink->h;
+ if (avctx->extra_hw_frames >= 0)
+ ctx->hwframes->initial_pool_size = 2 + avctx->extra_hw_frames;
+
err = av_hwframe_ctx_init(ctx->hwframes_ref);
if (err < 0)
goto fail;