diff --git a/dom/media/AudioSink.cpp b/dom/media/AudioSink.cpp index ad2fc73f465d..71b0b643f22e 100644 --- a/dom/media/AudioSink.cpp +++ b/dom/media/AudioSink.cpp @@ -159,26 +159,41 @@ AudioSink::Shutdown() void AudioSink::SetVolume(double aVolume) { - ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); - mVolume = aVolume; - mSetVolume = true; + AssertNotOnAudioThread(); + nsRefPtr self = this; + nsCOMPtr r = NS_NewRunnableFunction([=] () { + if (self->mState == AUDIOSINK_STATE_PLAYING) { + self->mAudioStream->SetVolume(aVolume); + } + }); + DispatchTask(r.forget()); } void AudioSink::SetPlaybackRate(double aPlaybackRate) { - ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); - NS_ASSERTION(mPlaybackRate != 0, "Don't set the playbackRate to 0 on AudioStream"); - mPlaybackRate = aPlaybackRate; - mSetPlaybackRate = true; + AssertNotOnAudioThread(); + MOZ_ASSERT(aPlaybackRate != 0, "Don't set the playbackRate to 0 on AudioStream"); + nsRefPtr self = this; + nsCOMPtr r = NS_NewRunnableFunction([=] () { + if (self->mState == AUDIOSINK_STATE_PLAYING) { + self->mAudioStream->SetPlaybackRate(aPlaybackRate); + } + }); + DispatchTask(r.forget()); } void AudioSink::SetPreservesPitch(bool aPreservesPitch) { - ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); - mPreservesPitch = aPreservesPitch; - mSetPreservesPitch = true; + AssertNotOnAudioThread(); + nsRefPtr self = this; + nsCOMPtr r = NS_NewRunnableFunction([=] () { + if (self->mState == AUDIOSINK_STATE_PLAYING) { + self->mAudioStream->SetPreservesPitch(aPreservesPitch); + } + }); + DispatchTask(r.forget()); } void