Bug 1322800 part 9 - move NextFrameSeekTask::NextFrameSeekTask(); r?jwwang draft
authorKaku Kuo <kaku@mozilla.com>
Wed, 14 Dec 2016 15:28:23 +0800
changeset 450337 a9116197ff7686cac2230c1fb31a0d6d4b5389cb
parent 450336 b088252c9e09428294af891c6d18361286328d92
child 450338 04a12b0bf770991e2670e4db2054233b5485d541
push id38836
push userbmo:kaku@mozilla.com
push dateFri, 16 Dec 2016 10:40:27 +0000
reviewersjwwang
bugs1322800
milestone53.0a1
Bug 1322800 part 9 - move NextFrameSeekTask::NextFrameSeekTask(); r?jwwang MozReview-Commit-ID: DqyjLD2vb0V
dom/media/MediaDecoderStateMachine.cpp
dom/media/NextFrameSeekTask.cpp
dom/media/NextFrameSeekTask.h
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1618,20 +1618,36 @@ private:
 
   bool IsVideoSeekComplete() const
   {
     // Don't finish seek until there are no pending requests. Otherwise, we might
     // lose video samples for the promise is resolved asynchronously.
     return !IsVideoRequestPending() && !NeedMoreVideo();
   }
 
+  // Update the seek target's time before resolving this seek task, the updated
+  // time will be used in the MDSM::SeekCompleted() to update the MDSM's position.
+  void UpdateSeekTargetTime()
+  {
+    RefPtr<MediaData> data = mTask->mVideoQueue.PeekFront();
+    if (data) {
+      mTask->mTarget.SetTime(TimeUnit::FromMicroseconds(data->mTime));
+    } else if (mTask->mSeekedVideoData) {
+      mTask->mTarget.SetTime(TimeUnit::FromMicroseconds(mTask->mSeekedVideoData->mTime));
+    } else if (mTask->mIsVideoQueueFinished || mTask->mVideoQueue.AtEndOfStream()) {
+      mTask->mTarget.SetTime(mTask->mDuration);
+    } else {
+      MOZ_ASSERT(false, "No data!");
+    }
+  }
+
   void MaybeFinishSeek()
   {
     if (IsAudioSeekComplete() && IsVideoSeekComplete()) {
-      mTask->UpdateSeekTargetTime();
+      UpdateSeekTargetTime();
 
       auto time = mTask->mTarget.GetTime().ToMicroseconds();
       DiscardFrames(mTask->mAudioQueue, [time] (int64_t aSampleTime) {
         return aSampleTime < time;
       });
 
       mTask->Resolve(__func__); // Call to MDSM::SeekCompleted();
     }
--- a/dom/media/NextFrameSeekTask.cpp
+++ b/dom/media/NextFrameSeekTask.cpp
@@ -97,26 +97,10 @@ NextFrameSeekTask::Seek(const media::Tim
 {
   AssertOwnerThread();
 
   RefPtr<SeekTaskPromise> promise = mSeekTaskPromise.Ensure(__func__);
 
   return promise;
 }
 
-void
-NextFrameSeekTask::UpdateSeekTargetTime()
-{
-  AssertOwnerThread();
-
-  RefPtr<MediaData> data = mVideoQueue.PeekFront();
-  if (data) {
-    mTarget.SetTime(TimeUnit::FromMicroseconds(data->mTime));
-  } else if (mSeekedVideoData) {
-    mTarget.SetTime(TimeUnit::FromMicroseconds(mSeekedVideoData->mTime));
-  } else if (mIsVideoQueueFinished || mVideoQueue.AtEndOfStream()) {
-    mTarget.SetTime(mDuration);
-  } else {
-    MOZ_ASSERT(false, "No data!");
-  }
-}
 } // namespace media
 } // namespace mozilla
--- a/dom/media/NextFrameSeekTask.h
+++ b/dom/media/NextFrameSeekTask.h
@@ -49,20 +49,16 @@ public:
   void HandleAudioWaited(MediaData::Type aType) override;
 
   void HandleVideoWaited(MediaData::Type aType) override;
 
   void HandleNotWaited(const WaitForDataRejectValue& aRejection) override;
 
   ~NextFrameSeekTask();
 
-  // Update the seek target's time before resolving this seek task, the updated
-  // time will be used in the MDSM::SeekCompleted() to update the MDSM's position.
-  void UpdateSeekTargetTime();
-
   /*
    * Data shared with MDSM.
    */
   MediaQueue<MediaData>& mAudioQueue;
   MediaQueue<MediaData>& mVideoQueue;
 
   /*
    * Internal state.