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
--- 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;
}