From 6a14ac8e9a94c8d4321cfb00380f574c03c14157 Mon Sep 17 00:00:00 2001 From: Robert Kausch Date: Sat, 22 Sep 2018 11:56:12 +0200 Subject: [PATCH] Fix sample time calculation for times >= 2^32. In MP4Track::GetSampleTimes and MP4Track::GetSampleIdFromTime, sampleCount is a 32 bit value that is later multiplied by sampleDelta in 32 bit math. We need this multiplication to happen in 64 bit math to handle long tracks, so promote sampleCount to a 64 bit variable. --- src/mp4track.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mp4track.cpp b/src/mp4track.cpp index cfa1a1f..a96aedd 100644 --- a/src/mp4track.cpp +++ b/src/mp4track.cpp @@ -1071,7 +1071,7 @@ void MP4Track::GetSampleTimes(MP4SampleId sampleId, } for (uint32_t sttsIndex = m_cachedSttsIndex; sttsIndex < numStts; sttsIndex++) { - uint32_t sampleCount = + uint64_t sampleCount = m_pSttsSampleCountProperty->GetValue(sttsIndex); uint32_t sampleDelta = m_pSttsSampleDeltaProperty->GetValue(sttsIndex); @@ -1109,7 +1109,7 @@ MP4SampleId MP4Track::GetSampleIdFromTime( MP4Duration elapsed = 0; for (uint32_t sttsIndex = 0; sttsIndex < numStts; sttsIndex++) { - uint32_t sampleCount = + uint64_t sampleCount = m_pSttsSampleCountProperty->GetValue(sttsIndex); uint32_t sampleDelta = m_pSttsSampleDeltaProperty->GetValue(sttsIndex);