diff dvdnav.c @ 419:8c87207b73ac src

Make sure we get nav packets for all cells in multi angle features Currently libdvdnav uses the ILVU information to specify where a vobunit ends if a feature is multiangled. However since one ILVU can contain multiple vobunits, this means that libdvdnav never generates NAV events nor updates highlight information for anything but the first vobunit in the ILVU. It also causes issues for any player relying on timestamps in nav packets to flatten the mpeg timestamps. Patch by Joakim Plate.
author rathann
date Sun, 09 Dec 2012 21:22:15 +0000
parents 51be513f1a1d
children ff5f3e53459b
line wrap: on
line diff
--- a/dvdnav.c	Sun Dec 09 21:13:14 2012 +0000
+++ b/dvdnav.c	Sun Dec 09 21:22:15 2012 +0000
@@ -336,8 +336,9 @@
     dvdnav_angle_change(this, 1);
   }
 #endif
-
-  if(num_angle != 0) {
+  /* only use ILVU information if we are at the last vobunit in ILVU */
+  /* otherwise we will miss nav packets from vobunits inbetween */
+  if(num_angle != 0 && (nav_dsi->sml_pbi.category & DSI_ILVU_MASK) == (DSI_ILVU_BLOCK | DSI_ILVU_LAST)) {
 
     if((next = nav_pci->nsml_agli.nsml_agl_dsta[angle-1]) != 0) {
       if((next & 0x3fffffff) != 0) {