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)
... | ... |
@@ -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; |