about summary refs log tree commit diff
path: root/pkgs/development/libraries/libdvdnav
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2015-03-19 13:19:17 +0100
committerPeter Simons <simons@cryp.to>2015-03-19 13:19:17 +0100
commitf30743b86ba89b663b8cb67b3f05e61307cf7c89 (patch)
tree9ced1cb8f86537d9c04bbf1cf5ca1a2767d8ff8f /pkgs/development/libraries/libdvdnav
parent80d8d1fc276cd6a075b28e89f75f141bc6770b7f (diff)
Revert "VLC wants a newer version of libdvdnav"
Diffstat (limited to 'pkgs/development/libraries/libdvdnav')
-rw-r--r--pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch137
-rw-r--r--pkgs/development/libraries/libdvdnav/P00-mingw-no-examples.patch21
-rw-r--r--pkgs/development/libraries/libdvdnav/default.nix20
3 files changed, 172 insertions, 6 deletions
diff --git a/pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch b/pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch
new file mode 100644
index 0000000000000..c0991b43555a2
--- /dev/null
+++ b/pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch
@@ -0,0 +1,137 @@
+Index: src/dvdnav.c
+===================================================================
+--- libdvdnav.orig/src/dvdnav.c	(revision 1168)
++++ libdvdnav/src/dvdnav.c	(working copy)
+@@ -71,6 +71,67 @@
+   return DVDNAV_STATUS_OK;
+ }
+ 
++dvdnav_status_t dvdnav_dup(dvdnav_t **dest, dvdnav_t *src) {
++  dvdnav_t *this;
++
++  (*dest) = NULL;
++  this = (dvdnav_t*)malloc(sizeof(dvdnav_t));
++  if(!this)
++    return DVDNAV_STATUS_ERR;
++
++  memcpy(this, src, sizeof(dvdnav_t));
++  this->file = NULL;
++
++  pthread_mutex_init(&this->vm_lock, NULL);
++
++  this->vm = vm_new_copy(src->vm);
++  if(!this->vm) {
++    printerr("Error initialising the DVD VM.");
++    pthread_mutex_destroy(&this->vm_lock);
++    free(this);
++    return DVDNAV_STATUS_ERR;
++  }
++
++  /* Start the read-ahead cache. */
++  this->cache = dvdnav_read_cache_new(this);
++
++  (*dest) = this;
++  return DVDNAV_STATUS_OK;
++}
++
++dvdnav_status_t dvdnav_free_dup(dvdnav_t *this) {
++
++#ifdef LOG_DEBUG
++  fprintf(MSG_OUT, "libdvdnav: free_dup:called\n");
++#endif
++
++  if (this->file) {
++    pthread_mutex_lock(&this->vm_lock);
++    DVDCloseFile(this->file);
++#ifdef LOG_DEBUG
++    fprintf(MSG_OUT, "libdvdnav: close:file closing\n");
++#endif
++    this->file = NULL;
++    pthread_mutex_unlock(&this->vm_lock);
++  }
++
++  /* Free the VM */
++  if(this->vm)
++    vm_free_copy(this->vm);
++
++  pthread_mutex_destroy(&this->vm_lock);
++
++  /* We leave the final freeing of the entire structure to the cache,
++   * because we don't know, if there are still buffers out in the wild,
++   * that must return first. */
++  if(this->cache)
++    dvdnav_read_cache_free(this->cache);
++  else
++    free(this);
++
++  return DVDNAV_STATUS_OK;
++}
++
+ dvdnav_status_t dvdnav_open(dvdnav_t** dest, const char *path) {
+   dvdnav_t *this;
+   struct timeval time;
+Index: src/dvdnav/dvdnav.h
+===================================================================
+--- libdvdnav.orig/src/dvdnav/dvdnav.h	(revision 1168)
++++ libdvdnav/src/dvdnav.h	(working copy)
+@@ -89,6 +89,9 @@
+  */
+ dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path);
+ 
++dvdnav_status_t dvdnav_dup(dvdnav_t **dest, dvdnav_t *src);
++dvdnav_status_t dvdnav_free_dup(dvdnav_t *this);
++
+ /*
+  * Closes a dvdnav_t previously opened with dvdnav_open(), freeing any
+  * memory associated with it.
+Index: src/vm/vm.c
+===================================================================
+--- libdvdnav.orig/src/vm/vm.c	(revision 1168)
++++ libdvdnav/src/vm/vm.c	(working copy)
+@@ -96,6 +98,7 @@
+ 
+ static pgcit_t* get_MENU_PGCIT(vm_t *vm, ifo_handle_t *h, uint16_t lang);
+ static pgcit_t* get_PGCIT(vm_t *vm);
++static void vm_close(vm_t *vm);
+ 
+ 
+ /* Helper functions */
+@@ -262,7 +265,7 @@
+ }
+ 
+ void vm_free_vm(vm_t *vm) {
+-  vm_stop(vm);
++  vm_close(vm);
+   free(vm);
+ }
+ 
+@@ -289,12 +292,20 @@
+ 
+ int vm_start(vm_t *vm) {
+   /* Set pgc to FP (First Play) pgc */
++  if (vm->stopped) {
++    vm_reset(vm, NULL);
++    vm->stopped = 0;
++  }
+   set_FP_PGC(vm);
+   process_command(vm, play_PGC(vm));
+   return !vm->stopped;
+ }
+ 
+ void vm_stop(vm_t *vm) {
++  vm->stopped = 1;
++}
++
++static void vm_close(vm_t *vm) {
+   if(vm->vmgi) {
+     ifoClose(vm->vmgi);
+     vm->vmgi=NULL;
+@@ -346,7 +357,7 @@
+ 
+   if (vm->dvd && dvdroot) {
+     /* a new dvd device has been requested */
+-    vm_stop(vm);
++    vm_close(vm);
+   }
+   if (!vm->dvd) {
+     vm->dvd = DVDOpen(dvdroot);
diff --git a/pkgs/development/libraries/libdvdnav/P00-mingw-no-examples.patch b/pkgs/development/libraries/libdvdnav/P00-mingw-no-examples.patch
new file mode 100644
index 0000000000000..0e06186173597
--- /dev/null
+++ b/pkgs/development/libraries/libdvdnav/P00-mingw-no-examples.patch
@@ -0,0 +1,21 @@
+diff -Naur libdvdnav.orig/Makefile.am libdvdnav/Makefile.am
+--- libdvdnav.orig/Makefile.am	2008-10-03 16:11:46.000000000 -0400
++++ libdvdnav/Makefile.am	2009-04-24 02:53:15.000000000 -0400
+@@ -1,7 +1,7 @@
+ include $(top_srcdir)/misc/Makefile.common
+ 
+ 
+-SUBDIRS = src examples doc misc m4
++SUBDIRS = src doc misc m4
+ 
+ EXTRA_DIST = autogen.sh \
+ 	     AUTHORS \
+diff -Naur libdvdnav.orig/configure.ac libdvdnav/configure.ac
+--- libdvdnav.orig/configure.ac	2009-01-08 17:57:11.000000000 -0500
++++ libdvdnav/configure.ac	2009-04-24 02:52:34.000000000 -0400
+@@ -252,5 +252,4 @@
+ misc/relchk.sh
+ m4/Makefile
+ doc/Makefile
+-examples/Makefile
+ ])
diff --git a/pkgs/development/libraries/libdvdnav/default.nix b/pkgs/development/libraries/libdvdnav/default.nix
index 343eb7ce9f985..9b4e912772b5c 100644
--- a/pkgs/development/libraries/libdvdnav/default.nix
+++ b/pkgs/development/libraries/libdvdnav/default.nix
@@ -1,17 +1,25 @@
 {stdenv, fetchurl, pkgconfig, libdvdread}:
 
-stdenv.mkDerivation rec {
-  name = "libdvdnav";
-  version = "5.0.3";
-
+stdenv.mkDerivation {
+  name = "libdvdnav-4.2.1";
+  
   src = fetchurl {
-    url = "http://download.videolan.org/pub/videolan/${name}/${version}/${name}-${version}.tar.bz2";
-    sha256 = "5097023e3d2b36944c763f1df707ee06b19dc639b2b68fb30113a5f2cbf60b6d";
+    url = http://dvdnav.mplayerhq.hu/releases/libdvdnav-4.2.1.tar.xz;
+    sha256 = "7fca272ecc3241b6de41bbbf7ac9a303ba25cb9e0c82aa23901d3104887f2372";
   };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [libdvdread];
 
+  configureScript = "./configure2"; # wtf?
+
+  preConfigure = ''
+    mkdir -p $out
+  '';
+
+  # From Handbrake
+  patches = [ ./A08-dvdnav-dup.patch ./P00-mingw-no-examples.patch ];
+
   meta = {
     homepage = http://dvdnav.mplayerhq.hu/;
     description = "A library that implements DVD navigation features such as DVD menus";