Bug 1283718. Part 5 - move the call to EnsureVideoDecodeTaskQueued() out of MaybeFinishSeek() so we only request video in video callbacks. r=kaku
MozReview-Commit-ID: 3Hdwx26I9Mi
--- a/dom/media/NextFrameSeekTask.cpp
+++ b/dom/media/NextFrameSeekTask.cpp
@@ -242,29 +242,17 @@ NextFrameSeekTask::IsVideoSeekComplete()
// lose video samples for the promise is resolved asynchronously.
return !IsVideoRequestPending() && !NeedMoreVideo();
}
void
NextFrameSeekTask::MaybeFinishSeek()
{
AssertOwnerThread();
-
- const bool audioSeekComplete = IsAudioSeekComplete();
-
- const bool videoSeekComplete = IsVideoSeekComplete();
- if (!videoSeekComplete) {
- // We haven't reached the target. Ensure we have requested another sample.
- EnsureVideoDecodeTaskQueued();
- }
-
- SAMPLE_LOG("CheckIfSeekComplete() audioSeekComplete=%d videoSeekComplete=%d",
- audioSeekComplete, videoSeekComplete);
-
- if (audioSeekComplete && videoSeekComplete) {
+ if (IsAudioSeekComplete() && IsVideoSeekComplete()) {
UpdateSeekTargetTime();
Resolve(__func__); // Call to MDSM::SeekCompleted();
}
}
void
NextFrameSeekTask::OnAudioDecoded(MediaData* aAudioSample)
{
@@ -315,16 +303,21 @@ NextFrameSeekTask::OnVideoDecoded(MediaD
aVideoSample->mTime,
aVideoSample->GetEndTime(),
aVideoSample->mDiscontinuity);
if (aVideoSample->mTime > mCurrentTimeBeforeSeek) {
mSeekedVideoData = aVideoSample;
}
+ if (NeedMoreVideo()) {
+ EnsureVideoDecodeTaskQueued();
+ return;
+ }
+
MaybeFinishSeek();
}
void
NextFrameSeekTask::OnVideoNotDecoded(MediaDecoderReader::NotDecodedReason aReason)
{
AssertOwnerThread();
MOZ_ASSERT(!mSeekTaskPromise.IsEmpty(), "Seek shouldn't be finished");