mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1055843 - Do not pause when playbackRate = 0. Instead don't play anything. r=padenot
This commit is contained in:
parent
1538e40c30
commit
87ac9d5c41
@ -3840,9 +3840,9 @@ HTMLMediaElement::SetPlaybackRate(double aPlaybackRate, ErrorResult& aRv)
|
||||
|
||||
mPlaybackRate = ClampPlaybackRate(aPlaybackRate);
|
||||
|
||||
if (mPlaybackRate < 0 ||
|
||||
mPlaybackRate > THRESHOLD_HIGH_PLAYBACKRATE_AUDIO ||
|
||||
mPlaybackRate < THRESHOLD_LOW_PLAYBACKRATE_AUDIO) {
|
||||
if (mPlaybackRate != 0.0 &&
|
||||
(mPlaybackRate < 0 || mPlaybackRate > THRESHOLD_HIGH_PLAYBACKRATE_AUDIO ||
|
||||
mPlaybackRate < THRESHOLD_LOW_PLAYBACKRATE_AUDIO)) {
|
||||
SetMutedInternal(mMuted | MUTED_BY_INVALID_PLAYBACK_RATE);
|
||||
} else {
|
||||
SetMutedInternal(mMuted & ~MUTED_BY_INVALID_PLAYBACK_RATE);
|
||||
|
@ -609,6 +609,9 @@ nsresult MediaDecoder::Play()
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
ReentrantMonitorAutoEnter mon(GetReentrantMonitor());
|
||||
NS_ASSERTION(mDecoderStateMachine != nullptr, "Should have state machine.");
|
||||
if (mPausedForPlaybackRateNull) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsresult res = ScheduleStateMachineThread();
|
||||
NS_ENSURE_SUCCESS(res,res);
|
||||
if ((mPlayState == PLAY_STATE_LOADING && mIsDormant) || mPlayState == PLAY_STATE_SEEKING) {
|
||||
@ -1437,17 +1440,23 @@ bool MediaDecoder::OnStateMachineThread() const
|
||||
|
||||
void MediaDecoder::SetPlaybackRate(double aPlaybackRate)
|
||||
{
|
||||
if (aPlaybackRate == 0) {
|
||||
if (aPlaybackRate == mInitialPlaybackRate) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (aPlaybackRate == 0.0) {
|
||||
mPausedForPlaybackRateNull = true;
|
||||
mInitialPlaybackRate = aPlaybackRate;
|
||||
Pause();
|
||||
return;
|
||||
} else if (mPausedForPlaybackRateNull) {
|
||||
// Play() uses mPausedForPlaybackRateNull value, so must reset it first
|
||||
mPausedForPlaybackRateNull = false;
|
||||
// If the playbackRate is no longer null, restart the playback, iff the
|
||||
// media was playing.
|
||||
if (mOwner && !mOwner->GetPaused()) {
|
||||
Play();
|
||||
}
|
||||
mPausedForPlaybackRateNull = false;
|
||||
}
|
||||
|
||||
if (mDecoderStateMachine) {
|
||||
|
Loading…
Reference in New Issue
Block a user