Bug 1307699. Part 2 - move mSeekTaskRequest into SeekingState.
MozReview-Commit-ID: 8FrGqEDgclk
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -670,18 +670,16 @@ public:
explicit SeekingState(Master* aPtr, SeekJob aSeekJob)
: StateObject(aPtr), mSeekJob(Move(aSeekJob)) {}
void Enter() override
{
// Discard the existing seek task.
mMaster->DiscardSeekTaskIfExist();
- mMaster->mSeekTaskRequest.DisconnectIfExists();
-
// SeekTask will register its callbacks to MediaDecoderReaderWrapper.
mMaster->CancelMediaDecoderReaderWrapperCallback();
// Create a new SeekTask instance for the incoming seek task.
if (mSeekJob.mTarget.IsAccurate() ||
mSeekJob.mTarget.IsFast()) {
mMaster->mSeekTask = new AccurateSeekTask(
mMaster->mDecoderID, OwnerThread(), Reader(), mSeekJob.mTarget,
@@ -717,33 +715,33 @@ public:
if (mSeekJob.mTarget.IsVideoOnly()) {
mMaster->Reset(TrackInfo::kVideoTrack);
} else {
mMaster->Reset();
}
}
// Do the seek.
- mMaster->mSeekTaskRequest.Begin(mMaster->mSeekTask->Seek(mMaster->Duration())
+ mSeekTaskRequest.Begin(mMaster->mSeekTask->Seek(mMaster->Duration())
->Then(OwnerThread(), __func__,
[this] (const SeekTaskResolveValue& aValue) {
OnSeekTaskResolved(aValue);
},
[this] (const SeekTaskRejectValue& aValue) {
OnSeekTaskRejected(aValue);
}));
MOZ_ASSERT(!mMaster->mQueuedSeek.Exists());
MOZ_ASSERT(!mMaster->mCurrentSeek.Exists());
mMaster->mCurrentSeek = Move(mSeekJob);
}
void Exit() override
{
- mMaster->mSeekTaskRequest.DisconnectIfExists();
+ mSeekTaskRequest.DisconnectIfExists();
}
State GetState() const override
{
return DECODER_STATE_SEEKING;
}
bool HandleDormant(bool aDormant) override
@@ -787,17 +785,17 @@ public:
RefPtr<MediaDecoder::SeekPromise> p = seekJob.mPromise.Ensure(__func__);
mMaster->InitiateSeek(Move(seekJob));
return p.forget();
}
private:
void OnSeekTaskResolved(const SeekTaskResolveValue& aValue)
{
- mMaster->mSeekTaskRequest.Complete();
+ mSeekTaskRequest.Complete();
if (aValue.mSeekedAudioData) {
mMaster->Push(aValue.mSeekedAudioData, MediaData::AUDIO_DATA);
mMaster->mDecodedAudioEndTime = std::max(
aValue.mSeekedAudioData->GetEndTime(), mMaster->mDecodedAudioEndTime);
}
if (aValue.mSeekedVideoData) {
@@ -814,32 +812,33 @@ private:
mMaster->VideoQueue().Finish();
}
mMaster->SeekCompleted();
}
void OnSeekTaskRejected(const SeekTaskRejectValue& aValue)
{
- mMaster->mSeekTaskRequest.Complete();
+ mSeekTaskRequest.Complete();
if (aValue.mIsAudioQueueFinished) {
mMaster->AudioQueue().Finish();
}
if (aValue.mIsVideoQueueFinished) {
mMaster->VideoQueue().Finish();
}
mMaster->DecodeError(aValue.mError);
mMaster->DiscardSeekTaskIfExist();
}
SeekJob mSeekJob;
+ MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
};
class MediaDecoderStateMachine::BufferingState
: public MediaDecoderStateMachine::StateObject
{
public:
explicit BufferingState(Master* aPtr) : StateObject(aPtr) {}
@@ -2687,18 +2686,16 @@ MediaDecoderStateMachine::Reset(TrackSet
}
if (aTracks.contains(TrackInfo::kAudioTrack)) {
mDecodedAudioEndTime = 0;
mAudioCompleted = false;
AudioQueue().Reset();
}
- mSeekTaskRequest.DisconnectIfExists();
-
mPlaybackOffset = 0;
mReader->ResetDecode(aTracks);
}
int64_t
MediaDecoderStateMachine::GetClock(TimeStamp* aTimeStamp) const
{
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -619,17 +619,16 @@ private:
}
// Queued seek - moves to mCurrentSeek when DecodeFirstFrame completes.
SeekJob mQueuedSeek;
SeekJob mCurrentSeek;
// mSeekTask is responsible for executing the current seek request.
RefPtr<SeekTask> mSeekTask;
- MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
// This method discards the seek task and then get the ownership of
// MedaiDecoderReaderWarpper back via registering MDSM's callback into it.
void DiscardSeekTaskIfExist();
// Media Fragment end time in microseconds. Access controlled by decoder monitor.
int64_t mFragmentEndTime;