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:
JW Wang 2016-10-05 14:22:54 +08:00
Родитель 5205ad7fdd
Коммит fe89153acd
2 изменённых файлов: 56 добавлений и 58 удалений

Просмотреть файл

@ -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();