Bug 1368662: Better fix for bug 1345898. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Tue, 30 May 2017 13:44:46 +0200
changeset 586488 7972c7b6305fff97b6489e9819359d78ac505792
parent 586315 af918786921ae5583313e82d1c80d853cb7ecca8
child 586871 470a276c2649cb3df9b9c21363eb05753ee72027
push id61429
push userbmo:jyavenard@mozilla.com
push dateTue, 30 May 2017 14:54:14 +0000
reviewersgerald
bugs1368662, 1345898
milestone55.0a1
Bug 1368662: Better fix for bug 1345898. r?gerald In bug 1345898, we flushed the decoder rather than draining it when we are waiting for data. However, more accurately we are in the middle of an internal seek. There are more occasions during which we could be performing an internal seek during which we don't care about the frames being decoded. So flushing is better. MozReview-Commit-ID: ATpTFdp8mRL
dom/media/MediaFormatReader.cpp
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -2014,19 +2014,19 @@ MediaFormatReader::HandleDemuxedSamples(
   while (decoder.mQueuedSamples.Length()) {
     RefPtr<MediaRawData> sample = decoder.mQueuedSamples[0];
     RefPtr<TrackInfoSharedPtr> info = sample->mTrackInfo;
 
     if (info && decoder.mLastStreamSourceID != info->GetID()) {
       bool recyclable = MediaPrefs::MediaDecoderCheckRecycling()
                         && decoder.mDecoder->SupportDecoderRecycling();
       if (!recyclable
+          && decoder.mTimeThreshold.isNothing()
           && (decoder.mNextStreamSourceID.isNothing()
-              || decoder.mNextStreamSourceID.ref() != info->GetID())
-          && !decoder.HasWaitingPromise()) {
+              || decoder.mNextStreamSourceID.ref() != info->GetID())) {
         LOG("%s stream id has changed from:%d to:%d, draining decoder.",
           TrackTypeToStr(aTrack), decoder.mLastStreamSourceID,
           info->GetID());
         decoder.RequestDrain();
         decoder.mNextStreamSourceID = Some(info->GetID());
         ScheduleUpdate(aTrack);
         return;
       }