From 2a2dfd232707ae05254cd0dcb75aac933e9fcf7d Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 13 Feb 2014 22:54:15 +0100 Subject: sub: handle vobsub-in-mp4 The mplayer decoder (spudec.c) actually handled this. There was explicit code for binary palettes (16 32 bit values), and the subtitle resolution was handled by video resolution coincidentally matching the subtitle resolution. Whoever puts vobsub into mp4 should be punished. Fixes the sample gundam_sample.mp4, closes github issue #547. --- demux/demux_lavf.c | 2 ++ demux/stheader.h | 1 + 2 files changed, 3 insertions(+) (limited to 'demux') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index e3ac84b50d..d85e4b8095 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -458,6 +458,8 @@ static void handle_stream(demuxer_t *demuxer, int i) memcpy(sh_sub->extradata, codec->extradata, codec->extradata_size); sh_sub->extradata_len = codec->extradata_size; } + sh_sub->w = codec->width; + sh_sub->h = codec->height; // Hack for MicroDVD: if time_base matches the ffmpeg microdvd reader's // default FPS (23.976), assume the MicroDVD file did not declare a diff --git a/demux/stheader.h b/demux/stheader.h index 25f60ba032..177bf50b39 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -87,6 +87,7 @@ typedef struct sh_video { typedef struct sh_sub { unsigned char *extradata; // extra header data passed from demuxer int extradata_len; + int w, h; // mp4 vobsubs int frame_based; // timestamps are frame-based bool is_utf8; // if false, subtitle packet charset is unknown struct ass_track *track; // loaded by libass -- cgit v1.2.3