Bug 1320466 part 4 - delegate OnAudioWaited, OnVideoWaited and OnNotWaited events to state objects; r?jwwang
MozReview-Commit-ID: I5tFVziVE02
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -192,16 +192,19 @@ public:
virtual void Step() {} // Perform a 'cycle' of this state object.
virtual State GetState() const = 0;
// Event handlers for various events.
virtual void HandleCDMProxyReady() {}
virtual void HandleAudioDecoded(MediaData* aAudio) {}
virtual void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) {}
virtual void HandleNotDecoded(MediaData::Type aType, const MediaResult& aError);
+ virtual void HandleAudioWaited(MediaData::Type aType);
+ virtual void HandleVideoWaited(MediaData::Type aType);
+ virtual void HandleNotWaited(const WaitForDataRejectValue& aRejection);
virtual void HandleEndOfStream() {}
virtual void HandleWaitingForData() {}
virtual void HandleAudioCaptured() {}
virtual RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget);
virtual RefPtr<ShutdownPromise> HandleShutdown();
@@ -1194,16 +1197,37 @@ StateObject::HandleNotDecoded(MediaData:
AudioQueue().Finish();
} else {
VideoQueue().Finish();
}
HandleEndOfStream();
}
+void
+MediaDecoderStateMachine::
+StateObject::HandleAudioWaited(MediaData::Type aType)
+{
+ mMaster->EnsureAudioDecodeTaskQueued();
+}
+
+void
+MediaDecoderStateMachine::
+StateObject::HandleVideoWaited(MediaData::Type aType)
+{
+ mMaster->EnsureVideoDecodeTaskQueued();
+}
+
+void
+MediaDecoderStateMachine::
+StateObject::HandleNotWaited(const WaitForDataRejectValue& aRejection)
+{
+
+}
+
RefPtr<MediaDecoder::SeekPromise>
MediaDecoderStateMachine::
StateObject::HandleSeek(SeekTarget aTarget)
{
SLOG("Changed state to SEEKING (to %lld)", aTarget.GetTime().ToMicroseconds());
SeekJob seekJob;
seekJob.mTarget = aTarget;
return SetState<SeekingState>(Move(seekJob), EventVisibility::Observable);
@@ -2044,31 +2068,32 @@ MediaDecoderStateMachine::OnVideoDecoded
mStateObj->HandleVideoDecoded(aVideo, aDecodeStartTime);
}
void
MediaDecoderStateMachine::OnAudioWaited(MediaData::Type aType)
{
MOZ_ASSERT(OnTaskQueue());
MOZ_ASSERT(aType == MediaData::AUDIO_DATA);
- EnsureAudioDecodeTaskQueued();
+ mStateObj->HandleAudioWaited(aType);
}
void
MediaDecoderStateMachine::OnVideoWaited(MediaData::Type aType)
{
MOZ_ASSERT(OnTaskQueue());
MOZ_ASSERT(aType == MediaData::VIDEO_DATA);
- EnsureVideoDecodeTaskQueued();
+ mStateObj->HandleVideoWaited(aType);
}
void
MediaDecoderStateMachine::OnNotWaited(const WaitForDataRejectValue& aRejection)
{
MOZ_ASSERT(OnTaskQueue());
+ mStateObj->HandleNotWaited(aRejection);
}
bool
MediaDecoderStateMachine::IsAudioDecoding()
{
MOZ_ASSERT(OnTaskQueue());
return HasAudio() && !AudioQueue().IsFinished();
}