# HG changeset patch # User reimar # Date 1278839069 0 # Node ID f15df2e3081b392160c06cb13b9bb76f7a35df69 # Parent d0f8ed8e1f27bb54677aa88158bcad15bb874df4 Add support for DVB and XSUB subtitles, not yet working properly. diff -r d0f8ed8e1f27 -r f15df2e3081b av_sub.c --- a/av_sub.c Sun Jul 11 09:03:59 2010 +0000 +++ b/av_sub.c Sun Jul 11 09:04:29 2010 +0000 @@ -49,11 +49,20 @@ 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 -r d0f8ed8e1f27 -r f15df2e3081b libmpdemux/demux_lavf.c --- a/libmpdemux/demux_lavf.c Sun Jul 11 09:03:59 2010 +0000 +++ b/libmpdemux/demux_lavf.c Sun Jul 11 09:04:29 2010 +0000 @@ -422,6 +422,10 @@ 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 -r d0f8ed8e1f27 -r f15df2e3081b mpcommon.c --- a/mpcommon.c Sun Jul 11 09:03:59 2010 +0000 +++ b/mpcommon.c Sun Jul 11 09:04:29 2010 +0000 @@ -92,7 +92,7 @@ static int is_av_sub(int type) { - return type == 'p'; + return type == 'b' || type == 'p' || type == 'x'; } void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvdsub, int reset)