Bug 1298297 - Remove DECODER_STATE_ERROR from MDSM.
MozReview-Commit-ID: BWpPoXDDlux
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1028,17 +1028,16 @@ MediaDecoderStateMachine::ToStateStr(Sta
case DECODER_STATE_DECODING_METADATA: return "DECODING_METADATA";
case DECODER_STATE_WAIT_FOR_CDM: return "WAIT_FOR_CDM";
case DECODER_STATE_DORMANT: return "DORMANT";
case DECODER_STATE_DECODING: return "DECODING";
case DECODER_STATE_SEEKING: return "SEEKING";
case DECODER_STATE_BUFFERING: return "BUFFERING";
case DECODER_STATE_COMPLETED: return "COMPLETED";
case DECODER_STATE_SHUTDOWN: return "SHUTDOWN";
- case DECODER_STATE_ERROR: return "ERROR";
default: MOZ_ASSERT_UNREACHABLE("Invalid state.");
}
return "UNKNOWN";
}
const char*
MediaDecoderStateMachine::ToStateStr()
{
@@ -1095,17 +1094,16 @@ MediaDecoderStateMachine::EnterState(Sta
StartDecoding();
break;
case DECODER_STATE_BUFFERING:
StartBuffering();
break;
case DECODER_STATE_COMPLETED:
ScheduleStateMachine();
break;
- case DECODER_STATE_ERROR:
case DECODER_STATE_SHUTDOWN:
mIsShutdown = true;
break;
default:
break;
}
}
@@ -1950,24 +1948,21 @@ MediaDecoderStateMachine::DecodeError()
{
MOZ_ASSERT(OnTaskQueue());
if (IsShutdown()) {
// Already shutdown.
return;
}
- // Change state to error, which will cause the state machine to wait until
- // the MediaDecoder shuts it down.
- SetState(DECODER_STATE_ERROR);
- ScheduleStateMachine();
- DECODER_WARN("Decode error, changed state to ERROR");
-
- // MediaDecoder::DecodeError notifies the owner, and then shuts down the state
- // machine.
+ DECODER_WARN("Decode error");
+ // Change state to SHUTDOWN so we have no more processing.
+ SetState(DECODER_STATE_SHUTDOWN);
+
+ // Notify the decode error and MediaDecoder will shut down MDSM.
mOnPlaybackEvent.Notify(MediaEventType::DecodeError);
}
void
MediaDecoderStateMachine::OnMetadataRead(MetadataHolder* aMetadata)
{
MOZ_ASSERT(OnTaskQueue());
MOZ_ASSERT(mState == DECODER_STATE_DECODING_METADATA);
@@ -2275,17 +2270,16 @@ nsresult MediaDecoderStateMachine::RunSt
mDelayedScheduler.Reset(); // Must happen on state machine task queue.
mDispatchedStateMachine = false;
MediaResource* resource = mResource;
NS_ENSURE_TRUE(resource, NS_ERROR_NULL_POINTER);
switch (mState) {
- case DECODER_STATE_ERROR:
case DECODER_STATE_SHUTDOWN:
case DECODER_STATE_DORMANT:
case DECODER_STATE_WAIT_FOR_CDM:
case DECODER_STATE_DECODING_METADATA:
return NS_OK;
case DECODER_STATE_DECODING: {
if (IsDecodingFirstFrame()) {
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -157,18 +157,17 @@ public:
enum State {
DECODER_STATE_DECODING_METADATA,
DECODER_STATE_WAIT_FOR_CDM,
DECODER_STATE_DORMANT,
DECODER_STATE_DECODING,
DECODER_STATE_SEEKING,
DECODER_STATE_BUFFERING,
DECODER_STATE_COMPLETED,
- DECODER_STATE_SHUTDOWN,
- DECODER_STATE_ERROR
+ DECODER_STATE_SHUTDOWN
};
void DumpDebugInfo();
void AddOutputStream(ProcessedMediaStream* aStream, bool aFinishWhenEnded);
// Remove an output stream added with AddOutputStream.
void RemoveOutputStream(MediaStream* aStream);