From e0d9ec60ad02e09d246e8de63f4dde7b11790032 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sun, 16 Dec 2012 11:02:42 +0200 Subject: demux_mkv: work around bad OutputSamplingFrequency values Something produces corrupt Matroska files with audio tracks that have SamplingFrequency set to 44100 and OutputSamplingFrequency to 96000, when the correct playback rate is 44100. Add a special case for this 44100/96000 combination and override it to 44100/44100; it's unlikely that anyone would ever want to use this 44100/96000 combination for real in valid files. --- demux/demux_mkv.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'demux/demux_mkv.c') diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 37b2c7e9b9..da1dd13c6e 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -503,6 +503,14 @@ static void parse_trackaudio(struct demuxer *demuxer, struct mkv_track *track, "[mkv] | + Output sampling frequency: %f\n", track->a_osfreq); } else track->a_osfreq = track->a_sfreq; + // Something creates files with osfreq incorrectly set + if (track->a_sfreq == 44100 && track->a_osfreq == 96000) { + mp_msg(MSGT_DEMUX, MSGL_WARN, "[mkv] Audio track has codec frequency " + "%.1f and playback frequency %.1f.\n[mkv] This looks wrong. " + "Assuming this file is corrupt and ignoring the latter.\n", + track->a_sfreq, track->a_osfreq); + track->a_osfreq = track->a_sfreq; + } if (audio->n_bit_depth) { track->a_bps = audio->bit_depth; mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Bit depth: %u\n", -- cgit v1.2.3