Bug 1307725. Part 3 - add StateObject::HandleWaitingForData to handle NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA.
MozReview-Commit-ID: 9SO9cwVMQK7
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -216,16 +216,18 @@ public:
virtual bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart)
{
return false;
}
virtual bool HandleEndOfStream() { return false; }
+ virtual bool HandleWaitingForData() { return false; }
+
virtual RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) = 0;
virtual bool HandleAudioCaptured() { return false; }
protected:
using Master = MediaDecoderStateMachine;
explicit StateObject(Master* aPtr) : mMaster(aPtr) {}
TaskQueue* OwnerThread() const { return mMaster->mTaskQueue; }
@@ -640,16 +642,22 @@ public:
if (mMaster->CheckIfDecodeComplete()) {
SetState(DECODER_STATE_COMPLETED);
} else {
mMaster->MaybeStopPrerolling();
}
return true;
}
+ bool HandleWaitingForData() override
+ {
+ mMaster->MaybeStopPrerolling();
+ return true;
+ }
+
bool HandleAudioCaptured() override
{
mMaster->MaybeStopPrerolling();
// MediaSink is changed. Schedule Step() to check if we can start playback.
mMaster->ScheduleStateMachine();
return true;
}
@@ -1564,17 +1572,17 @@ MediaDecoderStateMachine::OnNotDecoded(M
}
// If the decoder is waiting for data, we tell it to call us back when the
// data arrives.
if (aError == NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA) {
MOZ_ASSERT(mReader->IsWaitForDataSupported(),
"Readers that send WAITING_FOR_DATA need to implement WaitForData");
mReader->WaitForData(aType);
- MaybeStopPrerolling();
+ mStateObj->HandleWaitingForData();
return;
}
if (aError == NS_ERROR_DOM_MEDIA_CANCELED) {
if (isAudio) {
EnsureAudioDecodeTaskQueued();
} else {
EnsureVideoDecodeTaskQueued();