Mercurial > libdvdnav.hg
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); |