Bug 1298617: [MSE] P2. Attempt to search the exactly matching sample first. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Sun, 28 Aug 2016 02:38:59 +1200
changeset 406724 6a30b35a047fbbd9e634dae656baa2a21c6cb5b7
parent 406723 e275f42c6a48b5bb3bafac87f6b4a1125aee87ce
child 406725 c02d41d67f01d1f152816f9e177b04c779a6d0f2
push id27810
push userbmo:jyavenard@mozilla.com
push dateMon, 29 Aug 2016 11:03:10 +0000
reviewersgerald
bugs1298617
milestone51.0a1
Bug 1298617: [MSE] P2. Attempt to search the exactly matching sample first. r?gerald MozReview-Commit-ID: AW1T51n6WMl
dom/media/mediasource/TrackBuffersManager.cpp
--- 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)) {