summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extra/libvdpau/.footprint.i6861
-rw-r--r--extra/libvdpau/.footprint.x86_641
-rw-r--r--extra/libvdpau/.md5sum.i6861
-rw-r--r--extra/libvdpau/.md5sum.x86_641
-rwxr-xr-xextra/libvdpau/Pkgfile21
-rw-r--r--extra/libvdpau/git_commit_4262513e.patch179
6 files changed, 195 insertions, 9 deletions
diff --git a/extra/libvdpau/.footprint.i686 b/extra/libvdpau/.footprint.i686
index 833807bf6..8421b1141 100644
--- a/extra/libvdpau/.footprint.i686
+++ b/extra/libvdpau/.footprint.i686
@@ -8,6 +8,7 @@ drwxr-xr-x root/root usr/lib/
lrwxrwxrwx root/root usr/lib/libvdpau.so -> libvdpau.so.1.0.0
lrwxrwxrwx root/root usr/lib/libvdpau.so.1 -> libvdpau.so.1.0.0
-rwxr-xr-x root/root usr/lib/libvdpau.so.1.0.0
+lrwxrwxrwx root/root usr/lib/libvdpau_nvidia.so -> vdpau/libvdpau_nvidia.so.280.13
drwxr-xr-x root/root usr/lib/pkgconfig/
-rw-r--r-- root/root usr/lib/pkgconfig/vdpau.pc
drwxr-xr-x root/root usr/lib/vdpau/
diff --git a/extra/libvdpau/.footprint.x86_64 b/extra/libvdpau/.footprint.x86_64
index 833807bf6..8421b1141 100644
--- a/extra/libvdpau/.footprint.x86_64
+++ b/extra/libvdpau/.footprint.x86_64
@@ -8,6 +8,7 @@ drwxr-xr-x root/root usr/lib/
lrwxrwxrwx root/root usr/lib/libvdpau.so -> libvdpau.so.1.0.0
lrwxrwxrwx root/root usr/lib/libvdpau.so.1 -> libvdpau.so.1.0.0
-rwxr-xr-x root/root usr/lib/libvdpau.so.1.0.0
+lrwxrwxrwx root/root usr/lib/libvdpau_nvidia.so -> vdpau/libvdpau_nvidia.so.280.13
drwxr-xr-x root/root usr/lib/pkgconfig/
-rw-r--r-- root/root usr/lib/pkgconfig/vdpau.pc
drwxr-xr-x root/root usr/lib/vdpau/
diff --git a/extra/libvdpau/.md5sum.i686 b/extra/libvdpau/.md5sum.i686
index 39532caa8..972d23d69 100644
--- a/extra/libvdpau/.md5sum.i686
+++ b/extra/libvdpau/.md5sum.i686
@@ -1 +1,2 @@
+1644e00b0d9acb09093c6c5e05a939ec git_commit_4262513e.patch
8e1f0639bea4e4a842aee93ab64406cc libvdpau-0.4.1.tar.gz
diff --git a/extra/libvdpau/.md5sum.x86_64 b/extra/libvdpau/.md5sum.x86_64
index 39532caa8..972d23d69 100644
--- a/extra/libvdpau/.md5sum.x86_64
+++ b/extra/libvdpau/.md5sum.x86_64
@@ -1 +1,2 @@
+1644e00b0d9acb09093c6c5e05a939ec git_commit_4262513e.patch
8e1f0639bea4e4a842aee93ab64406cc libvdpau-0.4.1.tar.gz
diff --git a/extra/libvdpau/Pkgfile b/extra/libvdpau/Pkgfile
index 6049c16e9..99b85a93c 100755
--- a/extra/libvdpau/Pkgfile
+++ b/extra/libvdpau/Pkgfile
@@ -1,22 +1,25 @@
-# Description: Nvidia VDPAU lib
+# Description: Bibliothèque NVidia VDPAU
# URL: http://cgit.freedesktop.org/~aplattner/libvdpau
# Maintainer: NutyX core team
# Packager: lesibel at free dot fr
# Depends on: xorg-libx11
+# Run on:
name=libvdpau
version=0.4.1
-release=1
+release=2
-source=(http://people.freedesktop.org/~aplattner/vdpau/$name-$version.tar.gz )
+source=(http://people.freedesktop.org/~aplattner/vdpau/$name-$version.tar.gz git_commit_4262513e.patch)
build() {
- cd $name-$version
+ cd $name-$version
+ patch -p1 < ../git_commit_4262513e.patch
+ ./configure --prefix=/usr
+ make
+ make DESTDIR=$PKG install
- ./configure --prefix=/usr
- make
- make DESTDIR=$PKG install
+ ln -s vdpau/libvdpau_nvidia.so.280.13 $PKG/usr/lib/libvdpau_nvidia.so
- install -d -m755 $PKG/usr/share/licenses/$name
- install -m644 COPYING $PKG/usr/share/licenses/$name
+ install -d -m755 $PKG/usr/share/licenses/$name
+ install -m644 COPYING $PKG/usr/share/licenses/$name
}
diff --git a/extra/libvdpau/git_commit_4262513e.patch b/extra/libvdpau/git_commit_4262513e.patch
new file mode 100644
index 000000000..e32fc120a
--- /dev/null
+++ b/extra/libvdpau/git_commit_4262513e.patch
@@ -0,0 +1,179 @@
+From 4262513e67c3572ed19bd796ec6180cdde7ccb7e Mon Sep 17 00:00:00 2001
+From: Kiran Pawar <kpawar@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@nvidia.com>
+Tested-by: Aaron Plattner <aplattner@nvidia.com>
+Signed-off-by: Aaron Plattner <aplattner@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