diff options
Diffstat (limited to 'av_sub.c')
-rw-r--r-- | av_sub.c | 11 |
1 files changed, 10 insertions, 1 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); |