summaryrefslogtreecommitdiffstats
path: root/contrib/libdvdnav/A07-missing-menu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libdvdnav/A07-missing-menu.patch')
-rw-r--r--contrib/libdvdnav/A07-missing-menu.patch61
1 files changed, 54 insertions, 7 deletions
diff --git a/contrib/libdvdnav/A07-missing-menu.patch b/contrib/libdvdnav/A07-missing-menu.patch
index 078f4748e..7f035592a 100644
--- a/contrib/libdvdnav/A07-missing-menu.patch
+++ b/contrib/libdvdnav/A07-missing-menu.patch
@@ -1,6 +1,6 @@
diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
--- libdvdnav.orig/src/vm/vm.c 2009-10-29 09:10:44.836643320 -0700
-+++ libdvdnav/src/vm/vm.c 2009-11-16 11:10:07.527247268 -0800
++++ libdvdnav/src/vm/vm.c 2009-11-27 11:32:47.475322754 -0800
@@ -585,6 +585,9 @@
switch(menuid) {
case DVD_MENU_Title:
@@ -29,7 +29,43 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
return 0;
}
-@@ -1488,6 +1495,10 @@
+@@ -1412,8 +1419,9 @@
+ if(link_values.data2 != 0)
+ (vm->state).HL_BTNN_REG = link_values.data2 << 10;
+ if(!set_VTS_PTT(vm, (vm->state).vtsN, (vm->state).VTS_TTN_REG, link_values.data1))
+- assert(0);
+- link_values = play_PG(vm);
++ link_values.command = Exit;
++ else
++ link_values = play_PG(vm);
+ break;
+ case LinkPGN:
+ /* Link to Program Number:data1 */
+@@ -1458,8 +1466,9 @@
+ /* Set SPRM1 and SPRM2 */
+ assert((vm->state).domain == VTSM_DOMAIN || (vm->state).domain == VTS_DOMAIN); /* ?? */
+ if(!set_VTS_TT(vm, (vm->state).vtsN, link_values.data1))
+- assert(0);
+- link_values = play_PGC(vm);
++ link_values.command = Exit;
++ else
++ link_values = play_PGC(vm);
+ break;
+ case JumpVTS_PTT:
+ /* Jump to Part:data2 of Title:data1 in same VTS Title Domain */
+@@ -1469,8 +1478,9 @@
+ /* Set SPRM1 and SPRM2 */
+ assert((vm->state).domain == VTSM_DOMAIN || (vm->state).domain == VTS_DOMAIN); /* ?? */
+ if(!set_VTS_PTT(vm, (vm->state).vtsN, link_values.data1, link_values.data2))
+- assert(0);
+- link_values = play_PGC_PG(vm, (vm->state).pgN);
++ link_values.command = Exit;
++ else
++ link_values = play_PGC_PG(vm, (vm->state).pgN);
+ break;
+
+ case JumpSS_FP:
+@@ -1488,6 +1498,10 @@
/* Allowed from anywhere except the VTS Title domain */
/* Stop SPRM9 Timer and any GPRM counters */
assert((vm->state).domain != VTS_DOMAIN); /* ?? */
@@ -40,7 +76,7 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
(vm->state).domain = VMGM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
assert(0);
-@@ -1504,14 +1515,22 @@
+@@ -1504,14 +1518,22 @@
if (link_values.data1 != (vm->state).vtsN) {
/* the normal case */
assert((vm->state).domain == VMGM_DOMAIN || (vm->state).domain == FP_DOMAIN); /* ?? */
@@ -64,7 +100,7 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
(vm->state).domain = VTSM_DOMAIN;
}
} else {
-@@ -1533,6 +1552,10 @@
+@@ -1533,6 +1555,10 @@
/* set_PGCN:data1 */
/* Stop SPRM9 Timer and any GPRM counters */
assert((vm->state).domain != VTS_DOMAIN); /* ?? */
@@ -75,7 +111,7 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
(vm->state).domain = VMGM_DOMAIN;
if(!set_PGCN(vm, link_values.data1))
assert(0);
-@@ -1552,6 +1575,10 @@
+@@ -1552,6 +1578,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
@@ -86,7 +122,7 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VMGM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
-@@ -1563,6 +1590,10 @@
+@@ -1563,6 +1593,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
@@ -97,7 +133,7 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VTSM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
-@@ -1574,6 +1605,10 @@
+@@ -1574,6 +1608,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
@@ -108,3 +144,14 @@ diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VMGM_DOMAIN;
if(!set_PGCN(vm, link_values.data1))
+@@ -1634,7 +1672,9 @@
+ (vm->state).TT_PGCN_REG = pgcN;
+ (vm->state).PTTN_REG = part;
+ (vm->state).TTN_REG = get_TT(vm, vtsN, vts_ttn);
+- assert( (vm->state.TTN_REG) != 0 );
++ if( (vm->state.TTN_REG) == 0 )
++ return 0;
++
+ (vm->state).VTS_TTN_REG = vts_ttn;
+ (vm->state).vtsN = vtsN; /* Not sure about this one. We can get to it easily from TTN_REG */
+ /* Any other registers? */