avformat/matroskadec: force 48kHz sample rate when rescaling Opus inital padding
authorJames Almer <jamrial@gmail.com>
Mon, 6 Jun 2016 04:14:11 +0000 (01:14 -0300)
committerJames Almer <jamrial@gmail.com>
Tue, 7 Jun 2016 23:32:25 +0000 (20:32 -0300)
Mkvtoolnix stores the sample rate of the original stream as reported by the
"OpusHead" stream header instead of 48kHz, the actual sample rate of the Opus
stream.
Ignoring the stored sample rate and forcing 48kHz preserves the correct initial
padding when remuxing such files.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
libavformat/matroskadec.c

index 3270009..7880a10 100644 (file)
@@ -2353,7 +2353,8 @@ static int matroska_parse_tracks(AVFormatContext *s)
             if (track->codec_delay > 0) {
                 st->codecpar->initial_padding = av_rescale_q(track->codec_delay,
                                                              (AVRational){1, 1000000000},
-                                                             (AVRational){1, st->codecpar->sample_rate});
+                                                             (AVRational){1, st->codecpar->codec_id == AV_CODEC_ID_OPUS ?
+                                                                             48000 : st->codecpar->sample_rate});
             }
             if (track->seek_preroll > 0) {
                 st->codecpar->seek_preroll = av_rescale_q(track->seek_preroll,