diff options
author | jstebbins <[email protected]> | 2009-11-27 20:27:07 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2009-11-27 20:27:07 +0000 |
commit | 38d0c1ea31a5cfc6c616ca99f4041bbd2320d5fd (patch) | |
tree | 4b8a7145ac0eafb0172f566cbe2bfa5389cdf737 /contrib/libdvdnav | |
parent | 2e67232172e322cae20434318dffec1426822d69 (diff) |
fix another MTR feature title extraction issue
jump instructions to titles which were removed by MTR caused asserts.
now such jump instructions just transition to the Exit state.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2988 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'contrib/libdvdnav')
-rw-r--r-- | contrib/libdvdnav/A07-missing-menu.patch | 61 |
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? */ |