Bug 1389844 - P3. Handle case where currentTime isn't contained in buffered range. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 16 Aug 2017 19:35:27 +0200
changeset 647628 f788c0c8426c062ab23e92d366159598d9734505
parent 647627 b96d6cc5b35280f9443dbc51d463b55348bcc925
child 726581 c8ae1e1ef414415d24864c37118bda7447f10d8e
push id74486
push userbmo:jyavenard@mozilla.com
push dateWed, 16 Aug 2017 17:44:54 +0000
reviewersgerald
bugs1389844
milestone57.0a1
Bug 1389844 - P3. Handle case where currentTime isn't contained in buffered range. r?gerald When playback starts, currentTime is always 0, and even if the buffered data doesn't contain currentTime it is possible for playback to progress as we always allow up to 500ms gap in the buffered data. As such, we must use fuzzing on the interval's start time when determining if we have future data. MozReview-Commit-ID: Ki9QxmKhfdY
dom/media/mediasource/MediaSourceDecoder.cpp
--- a/dom/media/mediasource/MediaSourceDecoder.cpp
+++ b/dom/media/mediasource/MediaSourceDecoder.cpp
@@ -291,17 +291,17 @@ MediaSourceDecoder::NextFrameBufferedSta
   // Next frame hasn't been decoded yet.
   // Use the buffered range to consider if we have the next frame available.
   auto currentPosition = CurrentPosition();
   TimeIntervals buffered = GetBuffered();
   buffered.SetFuzz(MediaSourceDemuxer::EOS_FUZZ / 2);
   TimeInterval interval(
     currentPosition,
     currentPosition + DEFAULT_NEXT_FRAME_AVAILABLE_BUFFERED);
-  return buffered.ContainsStrict(ClampIntervalToEnd(interval))
+  return buffered.ContainsWithStrictEnd(ClampIntervalToEnd(interval))
          ? MediaDecoderOwner::NEXT_FRAME_AVAILABLE
          : MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
 }
 
 bool
 MediaSourceDecoder::CanPlayThroughImpl()
 {
   MOZ_ASSERT(NS_IsMainThread());
@@ -326,17 +326,17 @@ MediaSourceDecoder::CanPlayThroughImpl()
   }
   // If we have data up to the mediasource's duration or 10s ahead, we can
   // assume that we can play without interruption.
   TimeIntervals buffered = GetBuffered();
   buffered.SetFuzz(MediaSourceDemuxer::EOS_FUZZ / 2);
   TimeUnit timeAhead =
     std::min(duration, currentPosition + TimeUnit::FromSeconds(10));
   TimeInterval interval(currentPosition, timeAhead);
-  return buffered.ContainsStrict(ClampIntervalToEnd(interval));
+  return buffered.ContainsWithStrictEnd(ClampIntervalToEnd(interval));
 }
 
 TimeInterval
 MediaSourceDecoder::ClampIntervalToEnd(const TimeInterval& aInterval)
 {
   MOZ_ASSERT(NS_IsMainThread());
   AbstractThread::AutoEnter context(AbstractMainThread());