mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
Bug 1283394. Part 3 - check if seek is completed in AudioWaitCallback(). r=kaku
MozReview-Commit-ID: ACopopP2gnf --HG-- extra : rebase_source : 37e82c4dec1e4419b670c40eb0f3057e068ed02c
This commit is contained in:
parent
4ecd4baeee
commit
1f9f27d78b
@ -171,22 +171,23 @@ NextFrameSeekTask::Seek(const media::TimeUnit&)
|
||||
// If so, we cannot resolve the SeekTaskPromise immediately because there is
|
||||
// a latency of running the resolving runnable. Instead, if there is a pending
|
||||
// media request, we wait for it.
|
||||
if ((mVideoQueue.GetSize() > 0
|
||||
&& !mReader->IsRequestingAudioData() && !mReader->IsWaitingAudioData()
|
||||
&& !mReader->IsRequestingVideoData() && !mReader->IsWaitingVideoData())
|
||||
|| mVideoQueue.AtEndOfStream()) {
|
||||
UpdateSeekTargetTime();
|
||||
SeekTaskResolveValue val = {}; // Zero-initialize data members.
|
||||
return SeekTask::SeekTaskPromise::CreateAndResolve(val, __func__);
|
||||
} else {
|
||||
// Only invoke EnsureVideoDecodeTaskQueued() if we have no video data; we
|
||||
// might be here because we are waiting audio data, and don't bother to make
|
||||
// more requests to reader in this case.
|
||||
if (mVideoQueue.GetSize() == 0) {
|
||||
EnsureVideoDecodeTaskQueued();
|
||||
}
|
||||
bool hasPendingRequests = mReader->IsRequestingAudioData() ||
|
||||
mReader->IsWaitingAudioData() ||
|
||||
mReader->IsRequestingVideoData() ||
|
||||
mReader->IsWaitingVideoData();
|
||||
|
||||
bool needMoreVideo = mVideoQueue.GetSize() == 0 && !mVideoQueue.IsFinished();
|
||||
|
||||
if (needMoreVideo) {
|
||||
EnsureVideoDecodeTaskQueued();
|
||||
}
|
||||
if (hasPendingRequests || needMoreVideo) {
|
||||
return mSeekTaskPromise.Ensure(__func__);
|
||||
}
|
||||
|
||||
UpdateSeekTargetTime();
|
||||
SeekTaskResolveValue val = {}; // Zero-initialize data members.
|
||||
return SeekTask::SeekTaskPromise::CreateAndResolve(val, __func__);
|
||||
}
|
||||
|
||||
bool
|
||||
@ -440,6 +441,7 @@ NextFrameSeekTask::SetCallbacks()
|
||||
OwnerThread(), [this] (WaitCallbackData aData) {
|
||||
// We don't make an audio decode request here, instead, let MDSM to
|
||||
// trigger further audio decode tasks if MDSM itself needs to play audio.
|
||||
CheckIfSeekComplete();
|
||||
});
|
||||
|
||||
mVideoWaitCallback = mReader->VideoWaitCallback().Connect(
|
||||
|
Loading…
Reference in New Issue
Block a user