Browse code

matroskadec: Improve TTA duration calculation

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)

James Almer authored on 2013/08/18 02:48:33
Showing 1 changed files
... ...
@@ -1690,7 +1690,7 @@ static int matroska_read_header(AVFormatContext *s)
1690 1690
             avio_wl16(&b, track->audio.channels);
1691 1691
             avio_wl16(&b, track->audio.bitdepth);
1692 1692
             avio_wl32(&b, track->audio.out_samplerate);
1693
-            avio_wl32(&b, matroska->ctx->duration * track->audio.out_samplerate);
1693
+            avio_wl32(&b, av_rescale((matroska->duration * matroska->time_scale), track->audio.out_samplerate, AV_TIME_BASE * 1000));
1694 1694
         } else if (codec_id == AV_CODEC_ID_RV10 || codec_id == AV_CODEC_ID_RV20 ||
1695 1695
                    codec_id == AV_CODEC_ID_RV30 || codec_id == AV_CODEC_ID_RV40) {
1696 1696
             extradata_offset = 26;