Bug 1299074. Part 3 - check |mSentFirstFrameLoadedEvent| to know whether we can finish decoding first frames.
MozReview-Commit-ID: 10VNH3rhPpy
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -2160,19 +2160,21 @@ MediaDecoderStateMachine::SeekCompleted(
// Reset the MediaDecoderReaderWrapper's callbask.
DiscardSeekTaskIfExist();
// NOTE: Discarding the mSeekTask must be done before here. The following code
// might ask the MediaDecoderReaderWrapper to request media data, however, the
// SeekTask::Discard() will ask MediaDecoderReaderWrapper to discard media
// data requests.
- if (mDecodingFirstFrame) {
- // We were resuming from dormant, or initiated a seek early.
- // We can fire loadeddata now.
+ // Notify FirstFrameLoaded now if we haven't since we've decoded some data
+ // for readyState to transition to HAVE_CURRENT_DATA and fire 'loadeddata'.
+ if (!mSentFirstFrameLoadedEvent) {
+ // Only MSE can start seeking before finishing decoding first frames.
+ MOZ_ASSERT(mReader->ForceZeroStartTime());
FinishDecodeFirstFrame();
}
// Ensure timestamps are up to date.
UpdatePlaybackPositionInternal(newCurrentTime);
// Try to decode another frame to detect if we're at the end...
DECODER_LOG("Seek completed, mCurrentPosition=%lld", mCurrentPosition.Ref());