summary refs log tree commit diff
path: root/pkgs/development/libraries/libbluray
diff options
context:
space:
mode:
authorWout Mertens <Wout.Mertens@gmail.com>2014-05-04 01:17:40 +0200
committerWout Mertens <Wout.Mertens@gmail.com>2014-05-04 01:56:48 +0200
commit66216ea6db71c59505b1144432233f6fbb1d1561 (patch)
tree84ba00d4a3eba8803bd96f1b5e9737f689ece9a0 /pkgs/development/libraries/libbluray
parentac80d4541997132d55b5af3707257f605dd897fd (diff)
downloadnixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar.gz
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar.bz2
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar.lz
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar.xz
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.tar.zst
nixpkgs-66216ea6db71c59505b1144432233f6fbb1d1561.zip
libbluray: Add patch from Handbrake project
- A01: Make it smarter about filtering duplicates
Diffstat (limited to 'pkgs/development/libraries/libbluray')
-rw-r--r--pkgs/development/libraries/libbluray/A01-filter-dup.patch80
-rw-r--r--pkgs/development/libraries/libbluray/default.nix5
2 files changed, 84 insertions, 1 deletions
diff --git a/pkgs/development/libraries/libbluray/A01-filter-dup.patch b/pkgs/development/libraries/libbluray/A01-filter-dup.patch
new file mode 100644
index 00000000000..608f8dd1b49
--- /dev/null
+++ b/pkgs/development/libraries/libbluray/A01-filter-dup.patch
@@ -0,0 +1,80 @@
+diff --git a/src/libbluray/bdnav/navigation.c b/src/libbluray/bdnav/navigation.c
+index c8dc307..26d0000 100644
+--- a/src/libbluray/bdnav/navigation.c
++++ b/src/libbluray/bdnav/navigation.c
+@@ -32,9 +32,25 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
++static int _stream_cmp(MPLS_STREAM *a, MPLS_STREAM *b)
++{
++    if (a->stream_type == b->stream_type &&
++        a->coding_type == b->coding_type &&
++        a->pid         == b->pid         &&
++        a->subpath_id  == b->subpath_id  &&
++        a->subclip_id  == b->subclip_id  &&
++        a->format      == b->format      &&
++        a->rate        == b->rate        &&
++        a->char_code   == b->char_code   &&
++        memcmp(a->lang, b->lang, 4) == 0) {
++        return 1;
++    }
++    return 0;
++}
++
+ static int _filter_dup(MPLS_PL *pl_list[], unsigned count, MPLS_PL *pl)
+ {
+-    unsigned ii, jj;
++    unsigned ii, jj, kk;
+ 
+     for (ii = 0; ii < count; ii++) {
+         if (pl->list_count != pl_list[ii]->list_count) {
+@@ -54,7 +70,48 @@ static int _filter_dup(MPLS_PL *pl_list[], unsigned count, MPLS_PL *pl)
+                 pi1->out_time != pi2->out_time) {
+                 break;
+             }
++            if (pi1->stn.num_video           != pi2->stn.num_video           ||
++                pi1->stn.num_audio           != pi2->stn.num_audio           ||
++                pi1->stn.num_pg              != pi2->stn.num_pg              || 
++                pi1->stn.num_ig              != pi2->stn.num_ig              ||
++                pi1->stn.num_secondary_audio != pi2->stn.num_secondary_audio ||
++                pi1->stn.num_secondary_video != pi2->stn.num_secondary_video) {
++                break;
++            }
++            for (kk = 0; kk < pi1->stn.num_video; kk++) {
++                if (!_stream_cmp(&pi1->stn.video[kk], &pi2->stn.video[kk])) {
++                    goto next;
++                }
++            }
++            for (kk = 0; kk < pi1->stn.num_audio; kk++) {
++                if (!_stream_cmp(&pi1->stn.audio[kk], &pi2->stn.audio[kk])) {
++                    goto next;
++                }
++            }
++            for (kk = 0; kk < pi1->stn.num_pg; kk++) {
++                if (!_stream_cmp(&pi1->stn.pg[kk], &pi2->stn.pg[kk])) {
++                    goto next;
++                }
++            }
++            for (kk = 0; kk < pi1->stn.num_ig; kk++) {
++                if (!_stream_cmp(&pi1->stn.ig[kk], &pi2->stn.ig[kk])) {
++                    goto next;
++                }
++            }
++            for (kk = 0; kk < pi1->stn.num_secondary_audio; kk++) {
++                if (!_stream_cmp(&pi1->stn.secondary_audio[kk],
++                                 &pi2->stn.secondary_audio[kk])) {
++                    goto next;
++                }
++            }
++            for (kk = 0; kk < pi1->stn.num_secondary_video; kk++) {
++                if (!_stream_cmp(&pi1->stn.secondary_video[kk],
++                                 &pi2->stn.secondary_video[kk])) {
++                    goto next;
++                }
++            }
+         }
++next:
+         if (jj != pl->list_count) {
+             continue;
+         }
diff --git a/pkgs/development/libraries/libbluray/default.nix b/pkgs/development/libraries/libbluray/default.nix
index 6c139242f3e..f0eea80e89d 100644
--- a/pkgs/development/libraries/libbluray/default.nix
+++ b/pkgs/development/libraries/libbluray/default.nix
@@ -11,7 +11,7 @@ let baseName = "libbluray";
 in
 
 stdenv.mkDerivation {
-  name = "${baseName}-${version}";
+  name = "${baseName}-${version}p1";
 
   src = fetchgit {
     url = git://git.videolan.org/libbluray.git;
@@ -26,6 +26,9 @@ stdenv.mkDerivation {
   preConfigure = "./bootstrap";
   configureFlags = ["--disable-static"] ++ stdenv.lib.optionals withAACS ["--enable-bdjava" "--with-jdk=${jdk}"];
 
+  # From Handbrake
+  patches = [ ./A01-filter-dup.patch ];
+
   meta = {
     homepage = http://www.videolan.org/developers/libbluray.html;
     description = "Library to access Blu-Ray disks for video playback";