libdvd{read,nav}: Version bump and patch from Handbrake project
- API-compatible version bumps to latest upstream Patches: - A08: Adds API call to duplicate a DVD VM to libdvdnav - P00: Skip making examples
This commit is contained in:
parent
66216ea6db
commit
c02f80375f
137
pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch
Normal file
137
pkgs/development/libraries/libdvdnav/A08-dvdnav-dup.patch
Normal file
@ -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);
|
@ -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
|
||||
])
|
@ -1,13 +1,14 @@
|
||||
{stdenv, fetchurl, libdvdread}:
|
||||
{stdenv, fetchurl, pkgconfig, libdvdread}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "libdvdnav-4.1.3";
|
||||
name = "libdvdnav-4.2.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = http://www2.mplayerhq.hu/MPlayer/releases/dvdnav/libdvdnav-4.1.3.tar.bz2;
|
||||
sha1 = "d1b95eb8a7caee1fa7580a1abad84d6cb3cad046";
|
||||
url = http://dvdnav.mplayerhq.hu/releases/libdvdnav-4.2.1.tar.xz;
|
||||
sha256 = "7fca272ecc3241b6de41bbbf7ac9a303ba25cb9e0c82aa23901d3104887f2372";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [libdvdread];
|
||||
|
||||
configureScript = "./configure2"; # wtf?
|
||||
@ -16,9 +17,14 @@ stdenv.mkDerivation {
|
||||
mkdir -p $out
|
||||
'';
|
||||
|
||||
# From Handbrake
|
||||
patches = [ ./A08-dvdnav-dup.patch ./P00-mingw-no-examples.patch ];
|
||||
|
||||
meta = {
|
||||
homepage = http://www.mplayerhq.hu/;
|
||||
homepage = http://dvdnav.mplayerhq.hu/;
|
||||
description = "A library that implements DVD navigation features such as DVD menus";
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
maintainers = [ stdenv.lib.maintainers.wmertens ];
|
||||
};
|
||||
|
||||
passthru = { inherit libdvdread; };
|
||||
|
@ -1,29 +1,25 @@
|
||||
{stdenv, fetchurl, libdvdcss}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "libdvdread-4.2.1";
|
||||
name = "libdvdread-4.9.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = http://dvdnav.mplayerhq.hu/releases/libdvdread-4.2.1.tar.xz;
|
||||
sha256 = "af9b98f049580a6521d56c978b736d3d609562dd12955e11d50e26d97542dcd4";
|
||||
url = http://dvdnav.mplayerhq.hu/releases/libdvdread-4.9.9.tar.xz;
|
||||
sha256 = "d91275471ef69d488b05cf15c60e1cd65e17648bfc692b405787419f47ca424a";
|
||||
};
|
||||
|
||||
buildInputs = [libdvdcss];
|
||||
|
||||
NIX_LDFLAGS = "-ldvdcss";
|
||||
|
||||
configureScript = "./configure2"; # wtf?
|
||||
|
||||
preConfigure = ''
|
||||
mkdir -p $out
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
ln -s dvdread $out/include/libdvdread
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = http://www.mplayerhq.hu/;
|
||||
homepage = http://dvdnav.mplayerhq.hu/;
|
||||
description = "A library for reading DVDs";
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
maintainers = [ stdenv.lib.maintainers.wmertens ];
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user