[FFmpeg-devel] [PATCH 3/3] lavfi/vaapi_vpp: Use dynamic frame pool in outlink if possible
Xiang, Haihao
haihao.xiang at intel.com
Thu Mar 28 04:17:17 EET 2024
From: Haihao Xiang <haihao.xiang at intel.com>
This can fix the broken cases for the driver/hardware combination which
doesn't rely on fixed surface-array.
For example:
$ ffmpeg -hwaccel_output_format vaapi -hwaccel vaapi -i input.mp4 \
-vf 'scale_vaapi=w=720:h=480' -c:v hevc_vaapi -f null -
Signed-off-by: Haihao Xiang <haihao.xiang at intel.com>
---
libavfilter/vaapi_vpp.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/libavfilter/vaapi_vpp.c b/libavfilter/vaapi_vpp.c
index 59961bfa4a..0755d674ac 100644
--- a/libavfilter/vaapi_vpp.c
+++ b/libavfilter/vaapi_vpp.c
@@ -203,7 +203,10 @@ int ff_vaapi_vpp_config_output(AVFilterLink *outlink)
output_frames->width = ctx->output_width;
output_frames->height = ctx->output_height;
- output_frames->initial_pool_size = 4;
+ if (ctx->hwctx->driver_quirks & AV_VAAPI_DRIVER_QUIRK_DYNAMIC_SURFACE_POOL)
+ output_frames->initial_pool_size = 0;
+ else
+ output_frames->initial_pool_size = 4;
err = ff_filter_init_hw_frames(avctx, outlink, 10);
if (err < 0)
@@ -219,6 +222,8 @@ int ff_vaapi_vpp_config_output(AVFilterLink *outlink)
va_frames = output_frames->hwctx;
av_assert0(ctx->va_context == VA_INVALID_ID);
+ av_assert0(output_frames->initial_pool_size ||
+ (va_frames->surface_ids == NULL && va_frames->nb_surfaces == 0));
vas = vaCreateContext(ctx->hwctx->display, ctx->va_config,
ctx->output_width, ctx->output_height,
VA_PROGRESSIVE,
--
2.34.1
More information about the ffmpeg-devel
mailing list