Bug 1330254. Part 4 - let Handle{Audio,Video}Canceled and Handle{Audio,Video}Waited call Request{Audio,Video}Data instead. draft
authorJW Wang <jwwang@mozilla.com>
Mon, 09 Jan 2017 22:25:20 +0800
changeset 459494 38f1ee8f5349f7b546c5529d3511b8cc763c8907
parent 459493 a67c83e171f2c88b23c3ff694ea45318893bcb62
child 459650 a08591de1ab5d230f4eee2ae25cb886ccab35499
push id41235
push userjwwang@mozilla.com
push dateThu, 12 Jan 2017 02:06:10 +0000
bugs1330254, 1329897
milestone53.0a1
Bug 1330254. Part 4 - let Handle{Audio,Video}Canceled and Handle{Audio,Video}Waited call Request{Audio,Video}Data instead. The same reason as bug 1329897 P3. MozReview-Commit-ID: AhyFnUmXoOr
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -669,22 +669,24 @@ public:
     mMaster->PushVideo(aVideo);
     DispatchDecodeTasksIfNeeded();
     MaybeStopPrerolling();
     CheckSlowDecoding(aDecodeStart);
   }
 
   void HandleAudioCanceled() override
   {
-    EnsureAudioDecodeTaskQueued();
+    mMaster->RequestAudioData();
   }
 
   void HandleVideoCanceled() override
   {
-    EnsureVideoDecodeTaskQueued();
+    mMaster->RequestVideoData(
+      NeedToSkipToNextKeyframe(),
+      media::TimeUnit::FromMicroseconds(mMaster->GetMediaTime()));
   }
 
   void HandleEndOfAudio() override;
   void HandleEndOfVideo() override;
 
   void HandleWaitingForAudio() override
   {
     mMaster->WaitForData(MediaData::AUDIO_DATA);
@@ -694,22 +696,24 @@ public:
   void HandleWaitingForVideo() override
   {
     mMaster->WaitForData(MediaData::VIDEO_DATA);
     MaybeStopPrerolling();
   }
 
   void HandleAudioWaited(MediaData::Type aType) override
   {
-    EnsureAudioDecodeTaskQueued();
+    mMaster->RequestAudioData();
   }
 
   void HandleVideoWaited(MediaData::Type aType) override
   {
-    EnsureVideoDecodeTaskQueued();
+    mMaster->RequestVideoData(
+      NeedToSkipToNextKeyframe(),
+      media::TimeUnit::FromMicroseconds(mMaster->GetMediaTime()));
   }
 
   void HandleAudioCaptured() override
   {
     MaybeStopPrerolling();
     // MediaSink is changed. Schedule Step() to check if we can start playback.
     mMaster->ScheduleStateMachine();
   }