Bug 1313955 - Dormant recovery seek uses wrong time. r?jwwang draft
authorDan Glastonbury <dglastonbury@mozilla.com>
Tue, 01 Nov 2016 10:04:04 +1000
changeset 432413 20b622d7b7f96172fb2ce5007b6e52c7c62f5a83
parent 431855 37ab1d54a08e7e1431660b22377428b74dcd090a
child 535643 5831a1717a654df2cfe39c327d2c526f6f61cb04
push id34303
push userbmo:dglastonbury@mozilla.com
push dateTue, 01 Nov 2016 23:32:10 +0000
reviewersjwwang
bugs1313955
milestone52.0a1
Bug 1313955 - Dormant recovery seek uses wrong time. r?jwwang Dormant mode is setting recovery seek to MDSM::mCurrentPosition which doesn't match what MediaSink position which is used to leave the last frame in the image container. Switch to using mMediaSink->GetPosition for dormant recovery seek target. MozReview-Commit-ID: 7YLecRR8XrN
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1143,17 +1143,20 @@ public:
 bool
 MediaDecoderStateMachine::
 StateObject::HandleDormant(bool aDormant)
 {
   if (!aDormant) {
     return true;
   }
   SeekJob seekJob;
-  seekJob.mTarget = SeekTarget(mMaster->mCurrentPosition,
+  int64_t seekTargetTime = mMaster->mMediaSink->IsStarted()
+                           ? mMaster->GetClock() : mMaster->GetMediaTime();
+
+  seekJob.mTarget = SeekTarget(seekTargetTime,
                                SeekTarget::Accurate,
                                MediaDecoderEventVisibility::Suppressed);
   // SeekJob asserts |mTarget.IsValid() == !mPromise.IsEmpty()| so we
   // need to create the promise even it is not used at all.
   RefPtr<MediaDecoder::SeekPromise> unused = seekJob.mPromise.Ensure(__func__);
   SetState<DormantState>(Move(seekJob));
   return true;
 }