[libvdpau] Update current HEAD
Nicolas Chauvet
kwizart at fedoraproject.org
Wed Apr 25 16:12:59 UTC 2012
commit 6d846e3193e7062bc53bc7db01d8dc401ee3844b
Author: Nicolas Chauvet <kwizart at gmail.com>
Date: Wed Apr 25 18:12:39 2012 +0200
Update current HEAD
libvdpau-backport.patch | 179 +++++++++++++++++++++++++++++++++++++++++++++++
libvdpau.spec | 5 +-
2 files changed, 183 insertions(+), 1 deletions(-)
---
diff --git a/libvdpau-backport.patch b/libvdpau-backport.patch
new file mode 100644
index 0000000..e32fc12
--- /dev/null
+++ b/libvdpau-backport.patch
@@ -0,0 +1,179 @@
+From 4262513e67c3572ed19bd796ec6180cdde7ccb7e Mon Sep 17 00:00:00 2001
+From: Kiran Pawar <kpawar at nvidia.com>
+Date: Fri, 05 Aug 2011 06:15:18 +0000
+Subject: vdpau_wrapper.c: Track dynamic library handles and free them on exit using __attribute__((destructor))
+
+Signed-off-by: Kiran Pawar <kpawar at nvidia.com>
+Tested-by: Aaron Plattner <aplattner at nvidia.com>
+Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
+---
+diff --git a/src/vdpau_wrapper.c b/src/vdpau_wrapper.c
+index f504775..23de3d4 100644
+--- a/src/vdpau_wrapper.c
++++ b/src/vdpau_wrapper.c
+@@ -40,6 +40,17 @@ typedef void SetDllHandle(
+ void * driver_dll_handle
+ );
+
++static void * _vdp_backend_dll;
++static void * _vdp_trace_dll;
++static void * _vdp_driver_dll;
++static VdpDeviceCreateX11 * _vdp_imp_device_create_x11_proc;
++
++#if defined(__GNUC__)
++
++static void _vdp_close_driver(void) __attribute__((destructor));
++
++#endif
++
+ #if DEBUG
+
+ static void _vdp_wrapper_error_breakpoint(char const * file, int line, char const * function)
+@@ -87,23 +98,16 @@ static char * _vdp_get_driver_name_from_dri2(
+ return driver_name;
+ }
+
+-VdpStatus vdp_device_create_x11(
++static VdpStatus _vdp_open_driver(
+ Display * display,
+- int screen,
+- /* output parameters follow */
+- VdpDevice * device,
+- VdpGetProcAddress * * get_proc_address
+-)
++ int screen)
+ {
+ char const * vdpau_driver;
+ char * vdpau_driver_dri2 = NULL;
+ char vdpau_driver_lib[PATH_MAX];
+- void * backend_dll;
+ char const * vdpau_trace;
+ char const * func_name;
+
+- VdpDeviceCreateX11 * vdp_imp_device_create_x11;
+-
+ vdpau_driver = getenv("VDPAU_DRIVER");
+ if (!vdpau_driver) {
+ vdpau_driver = vdpau_driver_dri2 =
+@@ -125,13 +129,13 @@ VdpStatus vdp_device_create_x11(
+ return VDP_STATUS_NO_IMPLEMENTATION;
+ }
+
+- backend_dll = dlopen(vdpau_driver_lib, RTLD_NOW | RTLD_GLOBAL);
+- if (!backend_dll) {
++ _vdp_driver_dll = dlopen(vdpau_driver_lib, RTLD_NOW | RTLD_GLOBAL);
++ if (!_vdp_driver_dll) {
+ /* Try again using the old path, which is guaranteed to fit in PATH_MAX
+ * if the complete path fit above. */
+ snprintf(vdpau_driver_lib, sizeof(vdpau_driver_lib), DRIVER_LIB_FORMAT,
+ "", vdpau_driver, "");
+- backend_dll = dlopen(vdpau_driver_lib, RTLD_NOW | RTLD_GLOBAL);
++ _vdp_driver_dll = dlopen(vdpau_driver_lib, RTLD_NOW | RTLD_GLOBAL);
+ }
+
+ if (vdpau_driver_dri2) {
+@@ -139,26 +143,28 @@ VdpStatus vdp_device_create_x11(
+ vdpau_driver_dri2 = NULL;
+ }
+
+- if (!backend_dll) {
++ if (!_vdp_driver_dll) {
+ fprintf(stderr, "Failed to open VDPAU backend %s\n", dlerror());
+ _VDP_ERROR_BREAKPOINT();
+ return VDP_STATUS_NO_IMPLEMENTATION;
+ }
+
++ _vdp_backend_dll = _vdp_driver_dll;
++
+ vdpau_trace = getenv("VDPAU_TRACE");
+ if (vdpau_trace && atoi(vdpau_trace)) {
+- void * trace_dll;
+ SetDllHandle * set_dll_handle;
+
+- trace_dll = dlopen(VDPAU_MODULEDIR "/libvdpau_trace.so.1", RTLD_NOW | RTLD_GLOBAL);
+- if (!trace_dll) {
++ _vdp_trace_dll = dlopen(VDPAU_MODULEDIR "/libvdpau_trace.so.1",
++ RTLD_NOW | RTLD_GLOBAL);
++ if (!_vdp_trace_dll) {
+ fprintf(stderr, "Failed to open VDPAU trace library %s\n", dlerror());
+ _VDP_ERROR_BREAKPOINT();
+ return VDP_STATUS_NO_IMPLEMENTATION;
+ }
+
+ set_dll_handle = (SetDllHandle*)dlsym(
+- trace_dll,
++ _vdp_trace_dll,
+ "vdp_trace_set_backend_handle"
+ );
+ if (!set_dll_handle) {
+@@ -167,9 +173,9 @@ VdpStatus vdp_device_create_x11(
+ return VDP_STATUS_NO_IMPLEMENTATION;
+ }
+
+- set_dll_handle(backend_dll);
++ set_dll_handle(_vdp_backend_dll);
+
+- backend_dll = trace_dll;
++ _vdp_backend_dll = _vdp_trace_dll;
+
+ func_name = "vdp_trace_device_create_x11";
+ }
+@@ -177,17 +183,52 @@ VdpStatus vdp_device_create_x11(
+ func_name = "vdp_imp_device_create_x11";
+ }
+
+- vdp_imp_device_create_x11 = (VdpDeviceCreateX11*)dlsym(
+- backend_dll,
++ _vdp_imp_device_create_x11_proc = (VdpDeviceCreateX11*)dlsym(
++ _vdp_backend_dll,
+ func_name
+ );
+- if (!vdp_imp_device_create_x11) {
++ if (!_vdp_imp_device_create_x11_proc) {
+ fprintf(stderr, "%s\n", dlerror());
+ _VDP_ERROR_BREAKPOINT();
+ return VDP_STATUS_NO_IMPLEMENTATION;
+ }
+
+- return vdp_imp_device_create_x11(
++ return VDP_STATUS_OK;
++}
++
++static void _vdp_close_driver(void)
++{
++ if (_vdp_driver_dll) {
++ dlclose(_vdp_driver_dll);
++ _vdp_driver_dll = NULL;
++ }
++ if (_vdp_trace_dll) {
++ dlclose(_vdp_trace_dll);
++ _vdp_trace_dll = NULL;
++ }
++ _vdp_backend_dll = NULL;
++ _vdp_imp_device_create_x11_proc = NULL;
++}
++
++VdpStatus vdp_device_create_x11(
++ Display * display,
++ int screen,
++ /* output parameters follow */
++ VdpDevice * device,
++ VdpGetProcAddress * * get_proc_address
++)
++{
++ VdpStatus status;
++
++ if (!_vdp_imp_device_create_x11_proc) {
++ status = _vdp_open_driver(display, screen);
++ if (status != VDP_STATUS_OK) {
++ _vdp_close_driver();
++ return status;
++ }
++ }
++
++ return _vdp_imp_device_create_x11_proc(
+ display,
+ screen,
+ device,
+--
+cgit v0.9.0.2-2-gbebe
diff --git a/libvdpau.spec b/libvdpau.spec
index 7121b22..636f79f 100644
--- a/libvdpau.spec
+++ b/libvdpau.spec
@@ -1,6 +1,6 @@
Name: libvdpau
Version: 0.4.1
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Wrapper library for the Video Decode and Presentation API
Group: System Environment/Libraries
@@ -97,6 +97,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Apr 25 2012 Nicolas Chauvet <kwizart at gmail.com> - 0.4.1-6
+- Fetch current backport
+
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.4.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
More information about the scm-commits
mailing list