Bug 1283718. Part 5 - move the call to EnsureVideoDecodeTaskQueued() out of MaybeFinishSeek() so we only request video in video callbacks. r=kaku draft
authorJW Wang <jwwang@mozilla.com>
Thu, 07 Jul 2016 11:45:57 +0800
changeset 386079 9e9aa7e5acd2517904bb282746bba48cc43ce94c
parent 386078 404b594b91473fecf2d445e402685ce080ae55aa
child 386080 bebed5ab2639686f75eb8aa122fe4e3aac3a98ca
push id22615
push userjwwang@mozilla.com
push dateMon, 11 Jul 2016 03:16:53 +0000
reviewerskaku
bugs1283718
milestone50.0a1
Bug 1283718. Part 5 - move the call to EnsureVideoDecodeTaskQueued() out of MaybeFinishSeek() so we only request video in video callbacks. r=kaku MozReview-Commit-ID: 3Hdwx26I9Mi
dom/media/NextFrameSeekTask.cpp
--- a/dom/media/NextFrameSeekTask.cpp
+++ b/dom/media/NextFrameSeekTask.cpp
@@ -242,29 +242,17 @@ NextFrameSeekTask::IsVideoSeekComplete()
   // lose video samples for the promise is resolved asynchronously.
   return !IsVideoRequestPending() && !NeedMoreVideo();
 }
 
 void
 NextFrameSeekTask::MaybeFinishSeek()
 {
   AssertOwnerThread();
-
-  const bool audioSeekComplete = IsAudioSeekComplete();
-
-  const bool videoSeekComplete = IsVideoSeekComplete();
-  if (!videoSeekComplete) {
-    // We haven't reached the target. Ensure we have requested another sample.
-    EnsureVideoDecodeTaskQueued();
-  }
-
-  SAMPLE_LOG("CheckIfSeekComplete() audioSeekComplete=%d videoSeekComplete=%d",
-    audioSeekComplete, videoSeekComplete);
-
-  if (audioSeekComplete && videoSeekComplete) {
+  if (IsAudioSeekComplete() && IsVideoSeekComplete()) {
     UpdateSeekTargetTime();
     Resolve(__func__); // Call to MDSM::SeekCompleted();
   }
 }
 
 void
 NextFrameSeekTask::OnAudioDecoded(MediaData* aAudioSample)
 {
@@ -315,16 +303,21 @@ NextFrameSeekTask::OnVideoDecoded(MediaD
              aVideoSample->mTime,
              aVideoSample->GetEndTime(),
              aVideoSample->mDiscontinuity);
 
   if (aVideoSample->mTime > mCurrentTimeBeforeSeek) {
     mSeekedVideoData = aVideoSample;
   }
 
+  if (NeedMoreVideo()) {
+    EnsureVideoDecodeTaskQueued();
+    return;
+  }
+
   MaybeFinishSeek();
 }
 
 void
 NextFrameSeekTask::OnVideoNotDecoded(MediaDecoderReader::NotDecodedReason aReason)
 {
   AssertOwnerThread();
   MOZ_ASSERT(!mSeekTaskPromise.IsEmpty(), "Seek shouldn't be finished");