Mercurial > mplayer.hg
diff mpcommon.c @ 25855:57a1511f4e76
Support mov subtitle format directly instead of converting to text in the demuxer
author | reimar |
---|---|
date | Sun, 27 Jan 2008 16:13:21 +0000 |
parents | 00e4d59a0be4 |
children | d42e4a4942a4 |
line wrap: on
line diff
--- a/mpcommon.c Sun Jan 27 15:32:09 2008 +0000 +++ b/mpcommon.c Sun Jan 27 16:13:21 2008 +0000 @@ -10,6 +10,7 @@ #ifdef HAVE_TV_TELETEXT #include "stream/tv.h" #endif +#include "libavutil/intreadwrite.h" double sub_last_pts = -303; @@ -99,7 +100,7 @@ if (spudec_changed(vo_spudec)) vo_osd_changed(OSDTYPE_SPU); - } else if (dvdsub_id >= 0 && (type == 't' || type == 'a')) { + } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a')) { double curpts = sh_video->pts + sub_delay; double endpts; vo_sub = &subs; @@ -109,6 +110,11 @@ break; endpts = d_dvdsub->first->endpts; len = ds_get_packet_sub(d_dvdsub, &packet); + if (type == 'm') { + if (len < 2) continue; + len = FFMIN(len - 2, AV_RB16(packet)); + packet += 2; + } #ifdef USE_ASS if (type == 'a' && ass_enabled) { // ssa/ass subs with libass sh_sub_t* sh = d_dvdsub->sh; @@ -119,7 +125,7 @@ (long long)((endpts-pts)*1000 + 0.5)); continue; } - if (type == 't' && ass_enabled) { // plaintext subs with libass + if ((type == 't' || type == 'm') && ass_enabled) { // plaintext subs with libass sh_sub_t* sh = d_dvdsub->sh; ass_track = sh ? sh->ass_track : NULL; vo_sub = NULL;