From b6907a7bb547750db73d3036ef9a260fbc6d0e65 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 10 Jan 2014 00:02:06 +0100 Subject: demux_lavf: add hack for MicroDVD for assuming frame based timing MicroDVD files _can_ contain real timestamps instead of frame timestamps if they declare a FPS. But this seems to be rare, so ignore that if the FPS happens to match with the libavformat microdvd parser's default FPS. This might actually break files that declare 23.976 FPS, but the video file is not 23.976 FPS, but the chance that this happens is probably very low, and the commit fixes the more common breakage with 25 FPS video. --- demux/demux_lavf.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'demux') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 325747deac..b705452dc8 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -458,6 +458,12 @@ 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; } + + // Hack for MicroDVD: if time_base matches the ffmpeg microdvd reader's + // default FPS (23.976), assume the MicroDVD file did not declare a + // FPS, and the MicroDVD file uses frame based timing. + if (codec->time_base.num == 125 && codec->time_base.den == 2997) + sh_sub->frame_based = true; break; } case AVMEDIA_TYPE_ATTACHMENT: { -- cgit v1.2.3