[PATCH] DVD subpicture/audio stream mapping

Diego Biurrun <[email protected]> Thu, 19 Jan 2006 00:34:19 +0100
Newsgroups gmane.comp.video.ogle.devel
Message-ID <[email protected]>
Hi,

this patch was submitted in August 2005 to MPlayer.  It was applied with
slight modifications, please review and maybe apply it to libdvdread.
The patch is attached, the message the author sent is pasted below.

Regards

Diego


http://mplayerhq.hu/pipermail/mplayer-dev-eng/2005-August/036580.html

Hi all!

I had to realise that mplayer entirely ignores the logical mapping info 
between the various dvd audio/subtitle tracks and the corresponding mpeg 
streams, and does an identity mapping instead.
But I guess it's because libdvdread lacks the support for it :)
So here is the patch that fixes this shortcoming...

Some background info:
The audio and subtitle streams as specified in the IFO do not correspond
one-to-one to the streams in the mpeg-ps, but there is a mapping table
which specifies the assignments. In case of audio this hasn't been a big
problem unless the dvd has been really screwed up, because there are
the same number of logical streams as mpeg streams. So maybe you have a
0->1, 1->0 mapping in which case selecting one language in mplayer gets
you the other soundtrack, but both tracks are accessible.

Subtitles are not so simple however, because for one logical stream you
can have multiple mpeg subpicture streams. If you create a dvd for a
16:9 movie, you have to specify a spu stream for 4:3 letterboxed display
and also for 16:9 widescreen display. Up to this time I have run across
only one dvd which did not map the same stream to both modes. So not a
frequent case, but until now mplayer could not display the subtitles
correctly for these dvds, because it considered logical stream N to map
to mpeg stream N. But in this case the mapping is e.g. lang1->{0,1}
lang2->{2,3}, so when selecting lang1 mplayer would play lang1 stream
for letterbox, and when selecting lang2, it would play lang1 stream for
widescreen. The lang2 sub would be totally inaccessible, even with -sid,
because the code ignores values higher than the maximum number of subs.

So if you had problems like this, hopefully this will fix it. Patch is
against the last CVS snapshot accessible from the webpage (20050806).

Regards,
Lehel