[vlc-devel] [PATCH 07/16] vaapi: gl: check that the image can be derived
Steve Lhomme
robux4 at ycbcr.xyz
Thu Oct 24 16:20:21 CEST 2019
From: Thomas Guillem <thomas at gllm.fr>
The check was done initially in the pf_pool callback.
Signed-off-by: Steve Lhomme <robux4 at ycbcr.xyz>
---
modules/video_output/opengl/converter_vaapi.c | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/modules/video_output/opengl/converter_vaapi.c b/modules/video_output/opengl/converter_vaapi.c
index 36e3e974ec4..2336e38a119 100644
--- a/modules/video_output/opengl/converter_vaapi.c
+++ b/modules/video_output/opengl/converter_vaapi.c
@@ -327,6 +327,28 @@ tc_va_check_interop_blacklist(opengl_tex_converter_t *tc, VADisplay *vadpy)
return VLC_SUCCESS;
}
+static int
+tc_va_check_derive_image(opengl_tex_converter_t *tc,
+ vlc_decoder_device *dec_device)
+{
+ vlc_object_t *o = VLC_OBJECT(tc->gl);
+ struct priv *priv = tc->priv;
+ VASurfaceID *va_surface_ids;
+
+ picture_pool_t *pool = vlc_vaapi_PoolNew(o, dec_device, priv->vadpy, 1,
+ &va_surface_ids, &tc->fmt, true);
+ if (!pool)
+ return VLC_EGENERIC;
+
+ VAImage va_image = { .image_id = VA_INVALID_ID };
+ int ret = vlc_vaapi_DeriveImage(o, priv->vadpy, va_surface_ids[0],
+ &va_image);
+
+ picture_pool_Release(pool);
+
+ return ret;
+}
+
static int
Open(vlc_object_t *obj)
{
@@ -393,6 +415,9 @@ Open(vlc_object_t *obj)
if (tc_va_check_interop_blacklist(tc, priv->vadpy))
goto error;
+ if (tc_va_check_derive_image(tc, dec_device))
+ goto error;
+
tc->fshader = opengl_fragment_shader_init(tc, GL_TEXTURE_2D, vlc_sw_chroma,
tc->fmt.space);
if (tc->fshader == 0)
--
2.17.1
More information about the vlc-devel
mailing list