From 2dfd5e5f535292c491bc967a8a8e4d109d9c5965 Mon Sep 17 00:00:00 2001 From: reimar Date: Mon, 9 Nov 2009 10:27:48 +0000 Subject: Fixup the dvdnav <-> sid mapping, dvdnav_spu_stream_to_lang and dvdnav_get_spu_logical_stream both take the same numbering (i.e. not the ids used in the MPEG-TS). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29858 b3059339-0415-0410-9bf9-f77b7e298cf2 --- stream/stream_dvdnav.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'stream') diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c index c0c3e7e1db..4c6a09ea4a 100644 --- a/stream/stream_dvdnav.c +++ b/stream/stream_dvdnav.c @@ -549,16 +549,16 @@ static void show_audio_subs_languages(dvdnav_t *nav) char tmp[] = "unknown"; lg = dvdnav_get_spu_logical_stream(nav, i); if(lg == 0xff) continue; - lang = dvdnav_spu_stream_to_lang(nav, lg); + lang = dvdnav_spu_stream_to_lang(nav, i); if(lang != 0xFFFF) { tmp[0] = lang >> 8; tmp[1] = lang & 0xFF; tmp[2] = 0; } - mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDsubtitleLanguage, i, tmp); + mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDsubtitleLanguage, lg, tmp); if (lang != 0xFFFF && lang && tmp[0]) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", i, tmp); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", lg, tmp); } } @@ -797,9 +797,9 @@ int mp_dvdnav_sid_from_lang(stream_t *stream, unsigned char *language) { for(k=0; k<32; k++) { lg = dvdnav_get_spu_logical_stream(priv->dvdnav, k); if(lg == 0xff) continue; - lang = dvdnav_spu_stream_to_lang(priv->dvdnav, lg); + lang = dvdnav_spu_stream_to_lang(priv->dvdnav, k); if(lang != 0xFFFF && lang == lcode) { - return k; + return lg; } } language += 2; @@ -816,12 +816,16 @@ int mp_dvdnav_sid_from_lang(stream_t *stream, unsigned char *language) { * \return 0 on error, 1 if successful */ int mp_dvdnav_lang_from_sid(stream_t *stream, int sid, unsigned char *buf) { - uint8_t lg; + uint8_t lg, k; uint16_t lang; dvdnav_priv_t *priv = stream->priv; if(sid < 0) return 0; - lg = dvdnav_get_spu_logical_stream(priv->dvdnav, sid); - lang = dvdnav_spu_stream_to_lang(priv->dvdnav, lg); + for (k=0; k<32; k++) + if (dvdnav_get_spu_logical_stream(priv->dvdnav, k) == sid) + break; + if (k == 32) + return 0; + lang = dvdnav_spu_stream_to_lang(priv->dvdnav, k); if(lang == 0xffff) return 0; buf[0] = lang >> 8; buf[1] = lang & 0xFF; @@ -842,7 +846,7 @@ int mp_dvdnav_number_of_subs(stream_t *stream) { for(k=0; k<32; k++) { lg = dvdnav_get_spu_logical_stream(priv->dvdnav, k); if(lg == 0xff) continue; - n++; + if(lg >= n) n = lg + 1; } return n; } -- cgit v1.2.3