diff -urN libva-vdpau-driver-0.7.4/src/vdpau_driver.c libva-vdpau-driver-0.7.4.chromium/src/vdpau_driver.c --- libva-vdpau-driver-0.7.4/src/vdpau_driver.c 2012-10-05 16:02:58.000000000 +0100 +++ libva-vdpau-driver-0.7.4.chromium/src/vdpau_driver.c 2016-10-05 18:47:12.937566583 +0100 @@ -174,7 +174,7 @@ } vdpau_gate_exit(driver_data); - if (driver_data->vdp_dpy) { + if ((!driver_data->x_fallback) && driver_data->vdp_dpy) { XCloseDisplay(driver_data->vdp_dpy); driver_data->vdp_dpy = NULL; } @@ -187,9 +187,14 @@ /* Create a dedicated X11 display for VDPAU purposes */ const char * const x11_dpy_name = XDisplayString(driver_data->x11_dpy); driver_data->vdp_dpy = XOpenDisplay(x11_dpy_name); - if (!driver_data->vdp_dpy) - return VA_STATUS_ERROR_UNKNOWN; - + /* Fallback to existing X11 display */ + driver_data->x_fallback = false; + if (!driver_data->vdp_dpy) { + driver_data->x_fallback = true; + driver_data->vdp_dpy = driver_data->x11_dpy; + printf("Failed to create dedicated X11 display!\n"); + } + VdpStatus vdp_status; driver_data->vdp_device = VDP_INVALID_HANDLE; vdp_status = vdp_device_create_x11( diff -urN libva-vdpau-driver-0.7.4/src/vdpau_driver.h libva-vdpau-driver-0.7.4.chromium/src/vdpau_driver.h --- libva-vdpau-driver-0.7.4/src/vdpau_driver.h 2012-10-05 16:02:58.000000000 +0100 +++ libva-vdpau-driver-0.7.4.chromium/src/vdpau_driver.h 2016-10-05 18:48:33.701593155 +0100 @@ -21,6 +21,7 @@ #ifndef VDPAU_DRIVER_H #define VDPAU_DRIVER_H +#include #include #include "vaapi_compat.h" #include "vdpau_gate.h" @@ -100,6 +101,7 @@ uint64_t va_display_attrs_mtime[VDPAU_MAX_DISPLAY_ATTRIBUTES]; unsigned int va_display_attrs_count; char va_vendor[256]; + bool x_fallback; }; typedef struct object_config *object_config_p;