Bug 1298617: [MSE] P2. Attempt to search the exactly matching sample first. r?gerald
MozReview-Commit-ID: AW1T51n6WMl
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -2245,16 +2245,28 @@ TrackBuffersManager::GetSample(TrackInfo
int32_t
TrackBuffersManager::FindCurrentPosition(TrackInfo::TrackType aTrack,
const TimeUnit& aFuzz)
{
MOZ_ASSERT(OnTaskQueue());
auto& trackData = GetTracksData(aTrack);
const TrackBuffer& track = GetTrackBuffer(aTrack);
+ // Perform an exact search first.
+ for (uint32_t i = 0; i < track.Length(); i++) {
+ const RefPtr<MediaRawData>& sample = track[i];
+ TimeInterval sampleInterval{
+ TimeUnit::FromMicroseconds(sample->mTimecode),
+ TimeUnit::FromMicroseconds(sample->mTimecode + sample->mDuration)};
+
+ if (sampleInterval.ContainsStrict(trackData.mNextSampleTimecode)) {
+ return i;
+ }
+ }
+
for (uint32_t i = 0; i < track.Length(); i++) {
const RefPtr<MediaRawData>& sample = track[i];
TimeInterval sampleInterval{
TimeUnit::FromMicroseconds(sample->mTimecode),
TimeUnit::FromMicroseconds(sample->mTimecode + sample->mDuration),
aFuzz};
if (sampleInterval.ContainsWithStrictEnd(trackData.mNextSampleTimecode)) {