Bug 1382780 - part2 : separate the value of actual playback rate and media element's attribute. draft
authorAlastor Wu <alwu@mozilla.com>
Thu, 24 Aug 2017 16:58:45 +0800
changeset 651974 a1f694724e19b08aaa2e8a26618f35b5ef3effef
parent 651973 e37600974d4eb2ed60f0dbf79abf081ca78100dc
child 651975 3222c963e5cd849ab9d644e9e022122418cc2ea4
push id75908
push useralwu@mozilla.com
push dateThu, 24 Aug 2017 09:41:30 +0000
bugs1382780
milestone57.0a1
Bug 1382780 - part2 : separate the value of actual playback rate and media element's attribute. According to [1], we should separate the value of actual playback rate and media elemenet's attribute. But still keep a MAX and MIN threshold to control the highest and lowser playback rate for decoder. [1] http://w3c-test.org/html/semantics/embedded-content/media-elements/playing-the-media-resource/playbackRate.html MozReview-Commit-ID: EGCa4yrNXO6
dom/html/HTMLMediaElement.cpp
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -6720,28 +6720,32 @@ HTMLMediaElement::SetPlaybackRate(double
 {
   // Changing the playback rate of a media that has more than two channels is
   // not supported.
   if (aPlaybackRate < 0) {
     aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
     return;
   }
 
-  mPlaybackRate = ClampPlaybackRate(aPlaybackRate);
+  if (mPlaybackRate == aPlaybackRate) {
+    return;
+  }
+
+  mPlaybackRate = aPlaybackRate;
 
   if (mPlaybackRate != 0.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);
   }
 
   if (mDecoder) {
-    mDecoder->SetPlaybackRate(mPlaybackRate);
+    mDecoder->SetPlaybackRate(ClampPlaybackRate(mPlaybackRate));
   }
   DispatchAsyncEvent(NS_LITERAL_STRING("ratechange"));
 }
 
 NS_IMETHODIMP HTMLMediaElement::SetPlaybackRate(double aPlaybackRate)
 {
   ErrorResult rv;
   SetPlaybackRate(aPlaybackRate, rv);