Bug 1322800 part 9 - move NextFrameSeekTask::NextFrameSeekTask(); r?jwwang
MozReview-Commit-ID: DqyjLD2vb0V
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1618,20 +1618,36 @@ private:
bool IsVideoSeekComplete() const
{
// Don't finish seek until there are no pending requests. Otherwise, we might
// lose video samples for the promise is resolved asynchronously.
return !IsVideoRequestPending() && !NeedMoreVideo();
}
+ // Update the seek target's time before resolving this seek task, the updated
+ // time will be used in the MDSM::SeekCompleted() to update the MDSM's position.
+ void UpdateSeekTargetTime()
+ {
+ RefPtr<MediaData> data = mTask->mVideoQueue.PeekFront();
+ if (data) {
+ mTask->mTarget.SetTime(TimeUnit::FromMicroseconds(data->mTime));
+ } else if (mTask->mSeekedVideoData) {
+ mTask->mTarget.SetTime(TimeUnit::FromMicroseconds(mTask->mSeekedVideoData->mTime));
+ } else if (mTask->mIsVideoQueueFinished || mTask->mVideoQueue.AtEndOfStream()) {
+ mTask->mTarget.SetTime(mTask->mDuration);
+ } else {
+ MOZ_ASSERT(false, "No data!");
+ }
+ }
+
void MaybeFinishSeek()
{
if (IsAudioSeekComplete() && IsVideoSeekComplete()) {
- mTask->UpdateSeekTargetTime();
+ UpdateSeekTargetTime();
auto time = mTask->mTarget.GetTime().ToMicroseconds();
DiscardFrames(mTask->mAudioQueue, [time] (int64_t aSampleTime) {
return aSampleTime < time;
});
mTask->Resolve(__func__); // Call to MDSM::SeekCompleted();
}
--- a/dom/media/NextFrameSeekTask.cpp
+++ b/dom/media/NextFrameSeekTask.cpp
@@ -97,26 +97,10 @@ NextFrameSeekTask::Seek(const media::Tim
{
AssertOwnerThread();
RefPtr<SeekTaskPromise> promise = mSeekTaskPromise.Ensure(__func__);
return promise;
}
-void
-NextFrameSeekTask::UpdateSeekTargetTime()
-{
- AssertOwnerThread();
-
- RefPtr<MediaData> data = mVideoQueue.PeekFront();
- if (data) {
- mTarget.SetTime(TimeUnit::FromMicroseconds(data->mTime));
- } else if (mSeekedVideoData) {
- mTarget.SetTime(TimeUnit::FromMicroseconds(mSeekedVideoData->mTime));
- } else if (mIsVideoQueueFinished || mVideoQueue.AtEndOfStream()) {
- mTarget.SetTime(mDuration);
- } else {
- MOZ_ASSERT(false, "No data!");
- }
-}
} // namespace media
} // namespace mozilla
--- a/dom/media/NextFrameSeekTask.h
+++ b/dom/media/NextFrameSeekTask.h
@@ -49,20 +49,16 @@ public:
void HandleAudioWaited(MediaData::Type aType) override;
void HandleVideoWaited(MediaData::Type aType) override;
void HandleNotWaited(const WaitForDataRejectValue& aRejection) override;
~NextFrameSeekTask();
- // Update the seek target's time before resolving this seek task, the updated
- // time will be used in the MDSM::SeekCompleted() to update the MDSM's position.
- void UpdateSeekTargetTime();
-
/*
* Data shared with MDSM.
*/
MediaQueue<MediaData>& mAudioQueue;
MediaQueue<MediaData>& mVideoQueue;
/*
* Internal state.