summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2012-12-16 11:02:42 +0200
committerwm4 <wm4@nowhere>2013-01-13 13:25:57 +0100
commite0d9ec60ad02e09d246e8de63f4dde7b11790032 (patch)
tree99e7aeb1637972f39dc970647554ad58ca5527f3
parentc1232c9a01b7a6ae70fb0f919a4a6ffec986c613 (diff)
downloadmpv-e0d9ec60ad02e09d246e8de63f4dde7b11790032.tar.bz2
mpv-e0d9ec60ad02e09d246e8de63f4dde7b11790032.tar.xz
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.
-rw-r--r--demux/demux_mkv.c8
1 files changed, 8 insertions, 0 deletions
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",