зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1307699. Part 1 - move OnSeekTaskResolved/OnSeekTaskRejected into SeekingState. r=kaku
MozReview-Commit-ID: 7n9MSGxduZK --HG-- extra : rebase_source : 7ee888ea5152e8ee3e9a06ea4c90ee2ee741ca79
This commit is contained in:
Родитель
5205ad7fdd
Коммит
fe89153acd
|
@ -723,15 +723,24 @@ public:
|
|||
|
||||
// Do the seek.
|
||||
mMaster->mSeekTaskRequest.Begin(mMaster->mSeekTask->Seek(mMaster->Duration())
|
||||
->Then(OwnerThread(), __func__, mMaster,
|
||||
&MediaDecoderStateMachine::OnSeekTaskResolved,
|
||||
&MediaDecoderStateMachine::OnSeekTaskRejected));
|
||||
->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();
|
||||
}
|
||||
|
||||
State GetState() const override
|
||||
{
|
||||
return DECODER_STATE_SEEKING;
|
||||
|
@ -781,6 +790,50 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
void OnSeekTaskResolved(const SeekTaskResolveValue& aValue)
|
||||
{
|
||||
mMaster->mSeekTaskRequest.Complete();
|
||||
|
||||
if (aValue.mSeekedAudioData) {
|
||||
mMaster->Push(aValue.mSeekedAudioData, MediaData::AUDIO_DATA);
|
||||
mMaster->mDecodedAudioEndTime = std::max(
|
||||
aValue.mSeekedAudioData->GetEndTime(), mMaster->mDecodedAudioEndTime);
|
||||
}
|
||||
|
||||
if (aValue.mSeekedVideoData) {
|
||||
mMaster->Push(aValue.mSeekedVideoData, MediaData::VIDEO_DATA);
|
||||
mMaster->mDecodedVideoEndTime = std::max(
|
||||
aValue.mSeekedVideoData->GetEndTime(), mMaster->mDecodedVideoEndTime);
|
||||
}
|
||||
|
||||
if (aValue.mIsAudioQueueFinished) {
|
||||
mMaster->AudioQueue().Finish();
|
||||
}
|
||||
|
||||
if (aValue.mIsVideoQueueFinished) {
|
||||
mMaster->VideoQueue().Finish();
|
||||
}
|
||||
|
||||
mMaster->SeekCompleted();
|
||||
}
|
||||
|
||||
void OnSeekTaskRejected(const SeekTaskRejectValue& aValue)
|
||||
{
|
||||
mMaster->mSeekTaskRequest.Complete();
|
||||
|
||||
if (aValue.mIsAudioQueueFinished) {
|
||||
mMaster->AudioQueue().Finish();
|
||||
}
|
||||
|
||||
if (aValue.mIsVideoQueueFinished) {
|
||||
mMaster->VideoQueue().Finish();
|
||||
}
|
||||
|
||||
mMaster->DecodeError(aValue.mError);
|
||||
|
||||
mMaster->DiscardSeekTaskIfExist();
|
||||
}
|
||||
|
||||
SeekJob mSeekJob;
|
||||
};
|
||||
|
||||
|
@ -2186,58 +2239,6 @@ MediaDecoderStateMachine::InitiateSeek(SeekJob aSeekJob)
|
|||
mStateObj->Enter();
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderStateMachine::OnSeekTaskResolved(SeekTaskResolveValue aValue)
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
MOZ_ASSERT(mState == DECODER_STATE_SEEKING);
|
||||
|
||||
mSeekTaskRequest.Complete();
|
||||
|
||||
if (aValue.mSeekedAudioData) {
|
||||
Push(aValue.mSeekedAudioData.get(), MediaData::AUDIO_DATA);
|
||||
mDecodedAudioEndTime =
|
||||
std::max(aValue.mSeekedAudioData->GetEndTime(), mDecodedAudioEndTime);
|
||||
}
|
||||
|
||||
if (aValue.mSeekedVideoData) {
|
||||
Push(aValue.mSeekedVideoData.get(), MediaData::VIDEO_DATA);
|
||||
mDecodedVideoEndTime =
|
||||
std::max(aValue.mSeekedVideoData->GetEndTime(), mDecodedVideoEndTime);
|
||||
}
|
||||
|
||||
if (aValue.mIsAudioQueueFinished) {
|
||||
AudioQueue().Finish();
|
||||
}
|
||||
|
||||
if (aValue.mIsVideoQueueFinished) {
|
||||
VideoQueue().Finish();
|
||||
}
|
||||
|
||||
SeekCompleted();
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderStateMachine::OnSeekTaskRejected(SeekTaskRejectValue aValue)
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
MOZ_ASSERT(mState == DECODER_STATE_SEEKING);
|
||||
|
||||
mSeekTaskRequest.Complete();
|
||||
|
||||
if (aValue.mIsAudioQueueFinished) {
|
||||
AudioQueue().Finish();
|
||||
}
|
||||
|
||||
if (aValue.mIsVideoQueueFinished) {
|
||||
VideoQueue().Finish();
|
||||
}
|
||||
|
||||
DecodeError(aValue.mError);
|
||||
|
||||
DiscardSeekTaskIfExist();
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderStateMachine::DiscardSeekTaskIfExist()
|
||||
{
|
||||
|
|
|
@ -626,9 +626,6 @@ private:
|
|||
RefPtr<SeekTask> mSeekTask;
|
||||
MozPromiseRequestHolder<SeekTask::SeekTaskPromise> mSeekTaskRequest;
|
||||
|
||||
void OnSeekTaskResolved(SeekTaskResolveValue aValue);
|
||||
void OnSeekTaskRejected(SeekTaskRejectValue aValue);
|
||||
|
||||
// This method discards the seek task and then get the ownership of
|
||||
// MedaiDecoderReaderWarpper back via registering MDSM's callback into it.
|
||||
void DiscardSeekTaskIfExist();
|
||||
|
|
Загрузка…
Ссылка в новой задаче