blob: 7015eac732f1aeed8fee342ec4c6be282c81974d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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 <stdbool.h>
#include <va/va_backend.h>
#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;
|