Bug 1368619: Flush decoder on Android. r?jolin draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Tue, 30 May 2017 00:31:11 +0200
changeset 586315 af918786921ae5583313e82d1c80d853cb7ecca8
parent 586314 ece574cc476677dfe822b722d56e61c9de7e105f
child 586437 15a57c48f5ab47921858a72bd522be5b92ba0984
child 586488 7972c7b6305fff97b6489e9819359d78ac505792
push id61365
push userbmo:jyavenard@mozilla.com
push dateTue, 30 May 2017 07:37:44 +0000
reviewersjolin
bugs1368619, 1345898
milestone55.0a1
Bug 1368619: Flush decoder on Android. r?jolin In the situation described in bug 1345898, on android where the decoder is recycled rather than shut down, we would have potentially returned multiple frames with the same timestamp. It is necessary to flush the decoder. MozReview-Commit-ID: 6ovaD9PEdOG
dom/media/MediaFormatReader.cpp
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -2041,16 +2041,18 @@ MediaFormatReader::HandleDemuxedSamples(
         LOG("Decoder does not support recycling, recreate decoder.");
         // If flushing is required, it will clear our array of queued samples.
         // So make a copy now.
         nsTArray<RefPtr<MediaRawData>> samples{ Move(decoder.mQueuedSamples) };
         ShutdownDecoder(aTrack);
         if (sample->mKeyframe) {
           decoder.mQueuedSamples.AppendElements(Move(samples));
         }
+      } else if (decoder.HasWaitingPromise()) {
+        decoder.Flush();
       }
 
       decoder.mInfo = info;
 
       if (sample->mKeyframe) {
         ScheduleUpdate(aTrack);
       } else {
         auto time = TimeInterval(sample->mTime, sample->GetEndTime());