matroskadec: Improve TTA duration calculation
authorJames Almer <jamrial@gmail.com>
Sat, 17 Aug 2013 17:48:33 +0000 (14:48 -0300)
committerJames Almer <jamrial@gmail.com>
Wed, 18 Sep 2013 18:06:31 +0000 (15:06 -0300)
Calculate the duration as accurately as possible to improve decoding of samples
where the last frame is smaller than the rest.

Signed-off-by: James Almer <jamrial@gmail.com>
Approved-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit af248fa1174200acb537a6ab1198bb2fed38e884)

libavformat/matroskadec.c

index 9a15a2b..d72c4ef 100644 (file)
@@ -1738,7 +1738,7 @@ static int matroska_read_header(AVFormatContext *s)
             avio_wl16(&b, track->audio.channels);
             avio_wl16(&b, track->audio.bitdepth);
             avio_wl32(&b, track->audio.out_samplerate);
-            avio_wl32(&b, matroska->ctx->duration * track->audio.out_samplerate);
+            avio_wl32(&b, av_rescale((matroska->duration * matroska->time_scale), track->audio.out_samplerate, AV_TIME_BASE * 1000));
         } else if (codec_id == AV_CODEC_ID_RV10 || codec_id == AV_CODEC_ID_RV20 ||
                    codec_id == AV_CODEC_ID_RV30 || codec_id == AV_CODEC_ID_RV40) {
             extradata_offset = 26;