Bug 1359058: P2. Rely on container flags when seeking in plain MP4. r=gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 26 Apr 2017 16:43:54 +0200
changeset 585161 947858eaa56ae76bc786fd44da444cd99261b7e7
parent 585160 40b3ad18e3414d5e954ea1136f1962ed3f7aed3d
child 630646 a48d99e5ecad1b0a003861ce7bfe36f4aa939c99
push id61027
push userbmo:jyavenard@mozilla.com
push dateFri, 26 May 2017 16:19:42 +0000
reviewersgerald
bugs1359058, 1300296
milestone55.0a1
Bug 1359058: P2. Rely on container flags when seeking in plain MP4. r=gerald This reverts part of bug 1300296. In the worse case we'll get a decoding error. But we're only trading a bad behaviour for another. MozReview-Commit-ID: H0gF3FqZsU6
dom/media/fmp4/MP4Demuxer.cpp
--- a/dom/media/fmp4/MP4Demuxer.cpp
+++ b/dom/media/fmp4/MP4Demuxer.cpp
@@ -410,32 +410,20 @@ RefPtr<MP4TrackDemuxer::SeekPromise>
 MP4TrackDemuxer::Seek(const media::TimeUnit& aTime)
 {
   auto seekTime = aTime;
   mQueuedSample = nullptr;
 
   mIterator->Seek(seekTime.ToMicroseconds());
 
   // Check what time we actually seeked to.
-  RefPtr<MediaRawData> sample;
-  do {
-    sample = GetNextSample();
-    if (!sample) {
-      return SeekPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_END_OF_STREAM,
-                                          __func__);
-    }
-    if (!sample->Size()) {
-      // This sample can't be decoded, continue searching.
-      continue;
-    }
-    if (sample->mKeyframe) {
-      mQueuedSample = sample;
-      seekTime = mQueuedSample->mTime;
-    }
-  } while (!mQueuedSample);
+  mQueuedSample = GetNextSample();
+  if (mQueuedSample) {
+    seekTime = mQueuedSample->mTime;
+  }
 
   SetNextKeyFrameTime();
 
   return SeekPromise::CreateAndResolve(seekTime, __func__);
 }
 
 already_AddRefed<MediaRawData>
 MP4TrackDemuxer::GetNextSample()