Bug 1274933: Reject data promise when EOS is encountered following waiting for data. r?gerald
MozReview-Commit-ID: 1hKplz5wFnJ
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1200,16 +1200,25 @@ MediaFormatReader::Update(TrackType aTra
}
// Now that draining has completed, we check if we have received
// new data again as the result may now be different from the earlier
// run.
if (UpdateReceivedNewData(aTrack) || decoder.mSeekRequest.Exists()) {
LOGV("Nothing more to do");
return;
}
+ } else if (decoder.mDemuxEOS && !decoder.mNeedDraining &&
+ !decoder.mDraining && !decoder.mDrainComplete &&
+ decoder.mQueuedSamples.IsEmpty()) {
+ // It is possible to transition from WAITING_FOR_DATA directly to EOS
+ // state during the internal seek; in which case no draining would occur.
+ // There is no more samples left to be decoded and we are already in
+ // EOS state. We can immediately reject the data promise.
+ LOG("Rejecting %s promise: EOS", TrackTypeToStr(aTrack));
+ decoder.RejectPromise(END_OF_STREAM, __func__);
}
}
if (decoder.mNeedDraining) {
DrainDecoder(aTrack);
return;
}