diff options
author | joey <joey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-09-28 13:51:20 +0000 |
---|---|---|
committer | joey <joey@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2004-09-28 13:51:20 +0000 |
commit | baef32bc2c0075af1d7687163000b34a0ded4ff2 (patch) | |
tree | 9f932d67d8e2f70fd8758404973d11a8ec3d6d3b /libmpdemux | |
parent | 4ff50686d9a0725984186fd7d912420a7d7b8ade (diff) | |
download | mpv-baef32bc2c0075af1d7687163000b34a0ded4ff2.tar.bz2 mpv-baef32bc2c0075af1d7687163000b34a0ded4ff2.tar.xz |
fix sub_select fiasco with global sub numbering. now multiple sub sources can be managed in essentially one list.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13502 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_mkv.c | 20 | ||||
-rw-r--r-- | libmpdemux/demux_ogg.c | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index be27e69c00..3a7f710782 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -227,6 +227,7 @@ typedef struct __attribute__((__packed__)) /* for e.g. "-slang ger" */ extern char *dvdsub_lang; extern char *audio_lang; +extern int dvdsub_id; static mkv_track_t * @@ -2043,6 +2044,24 @@ demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track) void demux_mkv_seek (demuxer_t *demuxer, float rel_seek_secs, int flags); +/** \brief Given a matroska track number, find the subtitle number that mplayer would ask for. + * \param d The demuxer for which the subtitle id should be returned. + * \param num The matroska track number we are looking up. + */ +static int demux_mkv_sub_reverse_id(mkv_demuxer_t *d, int num) +{ + int i, id; + + for (i=0, id=0; i < d->num_tracks; i++) + if (d->tracks[i] != NULL && d->tracks[i]->type == MATROSKA_TRACK_SUBTITLE) { + if (d->tracks[i]->tnum == num) + return id; + id++; + } + + return -1; +} + int demux_mkv_open (demuxer_t *demuxer) { @@ -2256,6 +2275,7 @@ demux_mkv_open (demuxer_t *demuxer) { mp_msg (MSGT_DEMUX, MSGL_INFO, "[mkv] Will display subtitle track %u\n", track->tnum); + dvdsub_id = demux_mkv_sub_reverse_id(mkv_d, track->tnum); demuxer->sub->id = track->tnum; } else diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index 2f03444de6..92415fb754 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -146,6 +146,7 @@ typedef struct ogg_demuxer { extern int index_mode; extern char *dvdsub_lang, *audio_lang; +extern int dvdsub_id; //-------- subtitle support - should be moved to decoder layer, and queue // - subtitles up in demuxer buffer... @@ -444,6 +445,7 @@ static void demux_ogg_check_comments(demuxer_t *d, ogg_stream_t *os, int id, vor if (os->text && d->sub->id == -1 && demux_ogg_check_lang(val, dvdsub_lang)) { d->sub->id = id; + dvdsub_id = index; mp_msg(MSGT_DEMUX, MSGL_V, "Ogg demuxer: Displaying subtitle stream id %d which matched -slang %s\n", id, val); } else |