Bug 1347538: Don't reject seeks with EOS. r?kinetik draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Fri, 24 Mar 2017 18:36:50 +0100
changeset 511517 dcb3012f95039c4547acc6f2bbc4f965c6ed9842
parent 511516 ffd50d31f388c9eb657f7e273db74c7dbecf5de8
child 550716 daa96db1eb707f458c8bd250860dbd970bc02202
push id50879
push userbmo:jyavenard@mozilla.com
push dateFri, 24 Mar 2017 17:37:17 +0000
reviewerskinetik
bugs1347538
milestone55.0a1
Bug 1347538: Don't reject seeks with EOS. r?kinetik The MediaDecoderStateMachine treat seek's EOS as fatal errors, so instead we always resolve the seek promise, and let the next GetSample return EOS. MozReview-Commit-ID: 6MGaJ3C8xrH
dom/media/webm/WebMDemuxer.cpp
--- a/dom/media/webm/WebMDemuxer.cpp
+++ b/dom/media/webm/WebMDemuxer.cpp
@@ -1068,16 +1068,20 @@ WebMTrackDemuxer::Seek(const media::Time
   // Seeks to aTime. Upon success, SeekPromise will be resolved with the
   // actual time seeked to. Typically the random access point time
 
   media::TimeUnit seekTime = aTime;
   mSamples.Reset();
   mParent->SeekInternal(mType, aTime);
   nsresult rv = mParent->GetNextPacket(mType, &mSamples);
   if (NS_FAILED(rv)) {
+    if (rv == NS_ERROR_DOM_MEDIA_END_OF_STREAM) {
+      // Ignore the error for now, the next GetSample will be rejected with EOS.
+      return SeekPromise::CreateAndResolve(media::TimeUnit(), __func__);
+    }
     return SeekPromise::CreateAndReject(rv, __func__);
   }
   mNeedKeyframe = true;
 
   // Check what time we actually seeked to.
   if (mSamples.GetSize() > 0) {
     const RefPtr<MediaRawData>& sample = mSamples.First();
     seekTime = media::TimeUnit::FromMicroseconds(sample->mTime);