mirror of
https://github.com/mpv-player/mpv
synced 2024-12-23 23:32:26 +00: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:
parent
0728cf9637
commit
4ddc96baae
@ -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;
|
||||
}
|
||||
|
10
mpcommon.c
10
mpcommon.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user