Bug 1398139 - part1 : revert the changing of bug 1386478. draft
authorAlastor Wu <alwu@mozilla.com>
Fri, 15 Sep 2017 17:07:08 +0800
changeset 665321 61c5242746d2554e70c93aab406e29b8fbb1b4d6
parent 664736 dd6b788f149763c4014c27f2fe1a1d13228bda82
child 665322 8c3607cf220d921b39e86c4b0774c362d0ff9639
child 665394 45272d9d1b0ce9589fd75dda1e4915cfa77d4d99
push id80017
push useralwu@mozilla.com
push dateFri, 15 Sep 2017 09:15:19 +0000
bugs1398139, 1386478
milestone57.0a1
Bug 1398139 - part1 : revert the changing of bug 1386478. This changing causes the resampling rate tolerance so that the ME.current time might not be the same as ME.duration depending on the different resampling rate. MozReview-Commit-ID: H2dpyw5Bghv
dom/media/mediasink/AudioSink.cpp
--- a/dom/media/mediasink/AudioSink.cpp
+++ b/dom/media/mediasink/AudioSink.cpp
@@ -226,17 +226,19 @@ AudioSink::GetEndTime() const
     MonitorAutoLock mon(mMonitor);
     written = mWritten;
   }
   TimeUnit played = FramesToTimeUnit(written, mOutputRate) + mStartTime;
   if (!played.IsValid()) {
     NS_WARNING("Int overflow calculating audio end time");
     return TimeUnit::Zero();
   }
-  return played;
+  // As we may be resampling, rounding errors may occur. Ensure we never get
+  // past the original end time.
+  return std::min(mLastEndTime, played);
 }
 
 UniquePtr<AudioStream::Chunk>
 AudioSink::PopFrames(uint32_t aFrames)
 {
   class Chunk : public AudioStream::Chunk {
   public:
     Chunk(AudioData* aBuffer, uint32_t aFrames, AudioDataValue* aData)