void MediaOmxCommonDecoder::ResumeStateMachine() { MOZ_ASSERT(NS_IsMainThread()); DECODER_LOG(LogLevel::Debug, ("%s current time %f", __PRETTY_FUNCTION__, mLogicalPosition)); if (mShuttingDown) { return; } if (!GetStateMachine()) { return; } GetStateMachine()->DispatchAudioOffloading(false); mFallbackToStateMachine = true; mAudioOffloadPlayer = nullptr; SeekTarget target = SeekTarget(mLogicalPosition, SeekTarget::Accurate, MediaDecoderEventVisibility::Suppressed); // Call Seek of MediaDecoderStateMachine to suppress seek events. GetStateMachine()->InvokeSeek(target); mNextState = mPlayState; ChangeState(PLAY_STATE_LOADING); // exit dormant state GetStateMachine()->DispatchSetDormant(false); UpdateLogicalPosition(); }
void MediaOmxCommonDecoder::ResumeStateMachine() { MOZ_ASSERT(NS_IsMainThread()); ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); DECODER_LOG(PR_LOG_DEBUG, ("%s current time %f", __PRETTY_FUNCTION__, mLogicalPosition)); if (mShuttingDown) { return; } if (!GetStateMachine()) { return; } mFallbackToStateMachine = true; mAudioOffloadPlayer = nullptr; SeekTarget target = SeekTarget(mLogicalPosition, SeekTarget::Accurate, MediaDecoderEventVisibility::Suppressed); // Call Seek of MediaDecoderStateMachine to suppress seek events. RefPtr<nsRunnable> event = NS_NewRunnableMethodWithArg<SeekTarget>( GetStateMachine(), &MediaDecoderStateMachine::Seek, target); GetStateMachine()->TaskQueue()->Dispatch(event.forget()); mNextState = mPlayState; ChangeState(PLAY_STATE_LOADING); // exit dormant state event = NS_NewRunnableMethodWithArg<bool>( GetStateMachine(), &MediaDecoderStateMachine::SetDormant, false); GetStateMachine()->TaskQueue()->Dispatch(event.forget()); UpdateLogicalPosition(); }