Bug 1400674 - P3: Never drain audio decoders. r?jwwang draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Thu, 12 Oct 2017 19:06:07 +0200
changeset 680145 d8fda62f5de5ea464f48d26c2e361ef91173398c
parent 680144 ebfec8e3498c13cbb54f674b5b939b9cfc0f327c
child 681014 ef7ff5b88b788905cfc168f3fbb177a4c243b354
push id84412
push userbmo:jyavenard@mozilla.com
push dateFri, 13 Oct 2017 16:15:59 +0000
reviewersjwwang
bugs1400674
milestone58.0a1
Bug 1400674 - P3: Never drain audio decoders. r?jwwang None of our audio decoders require draining, and as all audio frames are keyframes, we can always resume decoding from where we left of when encountering a gap in the data. The vorbis decoder always "eats" the first sample provided, causing unecessary seek and drain. This issue will be addressed in another change. MozReview-Commit-ID: LNd3Pz4QT4v
dom/media/MediaFormatReader.cpp
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -2185,16 +2185,17 @@ MediaFormatReader::DrainDecoder(TrackTyp
 {
   MOZ_ASSERT(OnTaskQueue());
 
   auto& decoder = GetDecoderData(aTrack);
   if (decoder.mDrainState == DrainState::Draining) {
     return;
   }
   if (!decoder.mDecoder ||
+      aTrack == TrackType::kAudioTrack ||
       (decoder.mDrainState != DrainState::PartialDrainPending &&
        decoder.mNumSamplesInput == decoder.mNumSamplesOutput)) {
     // No frames to drain.
     LOGV("Draining %s with nothing to drain", TrackTypeToStr(aTrack));
     decoder.mDrainState = DrainState::DrainAborted;
     ScheduleUpdate(aTrack);
     return;
   }