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.
This commit is contained in:
wm4 2014-01-10 00:02:06 +01:00
parent cf02369aaf
commit b6907a7bb5
1 changed files with 6 additions and 0 deletions

View File

@ -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: {