1
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 06:03:45 +01:00

Support mov subtitle format directly instead of converting to text in the demuxer

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25883 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2008-01-27 16:13:21 +00:00
parent 0728cf9637
commit 4ddc96baae
2 changed files with 12 additions and 11 deletions

View File

@ -1327,8 +1327,10 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_SubtitleID, "mov", priv->track_db);
if (trak->fourcc == mmioFOURCC('m','p','4','s'))
init_vobsub(sh, trak);
else
sh->type = 't';
else {
sh->type = 'm';
sub_utf8 = 1;
}
} else
mp_msg(MSGT_DEMUX, MSGL_V, "Generic track - not completely understood! (id: %d)\n",
trak->id);
@ -2188,13 +2190,6 @@ if(trak->pos==0 && trak->stream_header_len>0){
int len = trak->samples[samplenr].size;
double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale;
stream_seek(demuxer->stream, pos);
if (sh->type != 'v') {
stream_skip(demuxer->stream, 2); // size
len -= 2;
if (len < 0) len = 0;
if (len > MOV_MAX_SUBLEN) len = MOV_MAX_SUBLEN;
sub_utf8 = 1;
}
ds_read_packet(demuxer->sub, demuxer->stream, len, subpts, pos, 0);
priv->current_sub = samplenr;
}

View File

@ -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 @@ void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset)
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 @@ void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset)
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 @@ void update_subtitles(sh_video_t *sh_video, demux_stream_t *d_dvdsub, int reset)
(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;