diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-07-11 09:04:29 +0000 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-11-02 04:14:43 +0200 |
commit | 9e537d1f6e90c4aca4778e47c082367639df28ca (patch) | |
tree | 27b4ea29765f9ad1836ba2cd9c63d67d863aea88 | |
parent | 3b92d754814e1e3db98192d6fbd29df1a73ed7ff (diff) | |
download | mpv-9e537d1f6e90c4aca4778e47c082367639df28ca.tar.bz2 mpv-9e537d1f6e90c4aca4778e47c082367639df28ca.tar.xz |
subs: Add support for DVB and XSUB subtitles, not yet working properly
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31694 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | av_sub.c | 11 | ||||
-rw-r--r-- | libmpdemux/demux_lavf.c | 4 | ||||
-rw-r--r-- | mpcommon.c | 2 |
3 files changed, 15 insertions, 2 deletions
@@ -50,11 +50,20 @@ int decode_avsub(struct sh_sub *sh, uint8_t **data, int *size, double *pts, doub if (*pts != MP_NOPTS_VALUE && *endpts != MP_NOPTS_VALUE) pkt.convergence_duration = (*endpts - *pts) * 1000; if (!ctx) { + enum CodecID cid = CODEC_ID_NONE; AVCodec *sub_codec; avcodec_init(); avcodec_register_all(); ctx = avcodec_alloc_context(); - sub_codec = avcodec_find_decoder(CODEC_ID_HDMV_PGS_SUBTITLE); + switch (sh->type) { + case 'b': + cid = CODEC_ID_DVB_SUBTITLE; break; + case 'p': + cid = CODEC_ID_HDMV_PGS_SUBTITLE; break; + case 'x': + cid = CODEC_ID_XSUB; break; + } + sub_codec = avcodec_find_decoder(cid); if (!ctx || !sub_codec || avcodec_open(ctx, sub_codec) < 0) { mp_msg(MSGT_SUBREADER, MSGL_FATAL, "Could not open subtitle decoder\n"); av_freep(&ctx); diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index f94770fe3c..cecf5589de 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -425,6 +425,10 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { type = 'a'; else if(codec->codec_id == CODEC_ID_DVD_SUBTITLE) type = 'v'; + else if(codec->codec_id == CODEC_ID_XSUB) + type = 'x'; + else if(codec->codec_id == CODEC_ID_DVB_SUBTITLE) + type = 'b'; else if(codec->codec_id == CODEC_ID_DVB_TELETEXT) type = 'd'; else if(codec->codec_id == CODEC_ID_HDMV_PGS_SUBTITLE) diff --git a/mpcommon.c b/mpcommon.c index b03248c937..962c0da4d2 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -94,7 +94,7 @@ static bool is_text_sub(int type) static bool is_av_sub(int type) { - return type == 'p'; + return type == 'b' || type == 'p' || type == 'x'; } void update_subtitles(struct MPContext *mpctx, struct MPOpts *opts, |