From 943f76e6ce979ce1e1e7e29e4e20f8ec56682df7 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 21 Feb 2016 16:25:02 +0100 Subject: demux_mkv: add hack to fix opus gapless behavior I think the conclusion is that AV_PKT_DATA_SKIP_SAMPLES is misdesigned (at least for some formats), and an alternative mechanism using durations would be better. (Combining it with a proper timebase would keep sample-accuracy.) --- demux/demux_mkv.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'demux/demux_mkv.c') diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 4eb4df260f..761985c204 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1679,6 +1679,12 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track) AV_WL32(data + 10, track->a_osfreq); // Bogus: last frame won't be played. AV_WL32(data + 14, 0); + } else if (strcmp(codec, "opus")) { + // Hardcode the rate libavcodec's opus decoder outputs, so that + // AV_PKT_DATA_SKIP_SAMPLES actually works. The Matroska header only + // has an arbitrary "input" samplerate, while libavcodec is fixed to + // output 48000. + sh_a->samplerate = 48000; } // Some files have broken default DefaultDuration set, which will lead to -- cgit v1.2.3