summaryrefslogtreecommitdiffstats
path: root/av_sub.c
diff options
context:
space:
mode:
Diffstat (limited to 'av_sub.c')
-rw-r--r--av_sub.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/av_sub.c b/av_sub.c
index 9a7c832594..d55a5674de 100644
--- a/av_sub.c
+++ b/av_sub.c
@@ -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);