[DVDnav-discuss] Still timeout workaround in vm.c

Richard peper03 at yahoo.com
Wed Feb 13 00:30:42 CET 2013


In vm_position_get there is a workaround for discs that indicate a still 
by "a cell playback time higher than the time the frames in this cell 
actually take to play (like 1 frame with 1 minute playback time)", and 
that these discs are considered to be broken.

I don't think they *are* broken.  It's unusual but I don't think there's 
any reason why a VOBU needs to be more than one sector (i.e. the NAV 
packet) long.

Take audio DVDs, for example (and here I don't mean "proper" audio DVDs, 
with data in the AUDIO_TS directory, I mean DVDs that are basically 
audio-only with data in the VIDEO_TS directory and playable on a normal 
DVD player).  These DVDs often show a single frame over several minutes 
worth of music.

The first VOBU of a cell on such a disc will typically contain a single 
video frame along with audio frames.  Subsequent VOBUs will only contain 
audio packets (ignoring the NAV packets).  As I understand it, the 
initial video frame should be shown either until the next video frame is 
found or until the end of the cell.  Through a combination of the 
'pci_gi_t.vobu_se_e_ptm', 'dsi_gi_t.vobu_1stref_ea' and 
'vobu_sri_t.next_video' fields in the NAV packets, it can be determined 
when the last frame will come, and when the next should be expected.

So, having determined that, if you remove the audio stream, you have the 
exact scenario that the workaround was implemented for, except that it 
doesn't appear to be a broken or invalid scenario to me.  Unusual, 
certainly, but not invalid.  It would also allow timeouts of greater 
than 254 seconds (although that could probably also be achieved via 
other means, but would still be a valid alternative).

In this scenario, it would be up to the player to ensure the correct 
timing is maintained by syncing itself to the start and end PTMs in each 
NAV packet rather than video or audio data.

The problem with the workaround (apart from the duration issue) is that 
a player following the above behaviour will likely get into trouble as 
dvdnav_get_next_cache_block will return DVDNAV_STILL_FRAME at the end of 
the cell, and cause it to show the frame for too long (at best twice as 
long, at worst, indefinitely).

Does that explanation make sense?  Comments?


More information about the DVDnav-discuss mailing list