comparison 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
comparison
equal deleted inserted replaced
418:fe65a31e707a 419:8c87207b73ac
334 /* This is to switch back to angle one when we 334 /* This is to switch back to angle one when we
335 * finish with angles. */ 335 * finish with angles. */
336 dvdnav_angle_change(this, 1); 336 dvdnav_angle_change(this, 1);
337 } 337 }
338 #endif 338 #endif
339 339 /* only use ILVU information if we are at the last vobunit in ILVU */
340 if(num_angle != 0) { 340 /* otherwise we will miss nav packets from vobunits inbetween */
341 if(num_angle != 0 && (nav_dsi->sml_pbi.category & DSI_ILVU_MASK) == (DSI_ILVU_BLOCK | DSI_ILVU_LAST)) {
341 342
342 if((next = nav_pci->nsml_agli.nsml_agl_dsta[angle-1]) != 0) { 343 if((next = nav_pci->nsml_agli.nsml_agl_dsta[angle-1]) != 0) {
343 if((next & 0x3fffffff) != 0) { 344 if((next & 0x3fffffff) != 0) {
344 if(next & 0x80000000) 345 if(next & 0x80000000)
345 vobu->vobu_next = - (int32_t)(next & 0x3fffffff); 346 vobu->vobu_next = - (int32_t)(next & 0x3fffffff);