summaryrefslogtreecommitdiffstats
path: root/video/vaapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/vaapi.c')
-rw-r--r--video/vaapi.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/video/vaapi.c b/video/vaapi.c
index e71232db21..69c0163972 100644
--- a/video/vaapi.c
+++ b/video/vaapi.c
@@ -151,6 +151,21 @@ static void va_info_callback(const char *msg)
va_message_callback(msg, MSGL_V);
}
+static void open_lavu_vaapi_device(struct mp_vaapi_ctx *ctx)
+{
+ ctx->av_device_ref = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI);
+ if (!ctx->av_device_ref)
+ return;
+
+ AVHWDeviceContext *hwctx = (void *)ctx->av_device_ref->data;
+ AVVAAPIDeviceContext *vactx = hwctx->hwctx;
+
+ vactx->display = ctx->display;
+
+ if (av_hwdevice_ctx_init(ctx->av_device_ref) < 0)
+ av_buffer_unref(&ctx->av_device_ref);
+}
+
struct mp_vaapi_ctx *va_initialize(VADisplay *display, struct mp_log *plog,
bool probing)
{
@@ -189,6 +204,11 @@ struct mp_vaapi_ctx *va_initialize(VADisplay *display, struct mp_log *plog,
va_get_formats(res);
if (!res->image_formats)
goto error;
+
+ // For now, some code will still work even if libavutil fails on old crap
+ // libva drivers (such as the vdpau wraper). So don't error out on failure.
+ open_lavu_vaapi_device(res);
+
return res;
error: