Bug 1320466 part 7 - remove callbacks of SeekTask; r=jwwang

MozReview-Commit-ID: KwyWGVG4NYG

--HG--
extra : rebase_source : 9771b318a9bf7b4a1ad8dea82624fa3146d9728f
This commit is contained in:
Kaku Kuo 2016-11-26 15:01:45 +08:00
Родитель 88081b6f24
Коммит 5883da3dd7
5 изменённых файлов: 0 добавлений и 152 удалений

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

@ -44,9 +44,6 @@ AccurateSeekTask::AccurateSeekTask(const void* aDecoderID,
// Bound the seek time to be inside the media range.
NS_ASSERTION(aEnd.ToMicroseconds() != -1, "Should know end time by now");
mTarget.SetTime(std::max(media::TimeUnit(), std::min(mTarget.GetTime(), aEnd)));
// Configure MediaDecoderReaderWrapper.
SetCallbacks();
}
AccurateSeekTask::~AccurateSeekTask()
@ -65,7 +62,6 @@ AccurateSeekTask::Discard()
// Disconnect MediaDecoderReaderWrapper.
mSeekRequest.DisconnectIfExists();
CancelCallbacks();
mIsDiscarded = true;
}
@ -392,7 +388,6 @@ AccurateSeekTask::OnAudioDecoded(MediaData* aAudioSample)
} else {
nsresult rv = DropAudioUpToSeekTarget(audio);
if (NS_FAILED(rv)) {
CancelCallbacks();
RejectIfExist(rv, __func__);
return;
}
@ -453,7 +448,6 @@ AccurateSeekTask::OnNotDecoded(MediaData::Type aType,
}
// This is a decode error, delegate to the generic error path.
CancelCallbacks();
RejectIfExist(aError, __func__);
}
@ -480,7 +474,6 @@ AccurateSeekTask::OnVideoDecoded(MediaData* aVideoSample)
} else {
nsresult rv = DropVideoUpToSeekTarget(video.get());
if (NS_FAILED(rv)) {
CancelCallbacks();
RejectIfExist(rv, __func__);
return;
}
@ -493,58 +486,4 @@ AccurateSeekTask::OnVideoDecoded(MediaData* aVideoSample)
MaybeFinishSeek();
}
void
AccurateSeekTask::SetCallbacks()
{
AssertOwnerThread();
mAudioCallback = mReader->AudioCallback().Connect(
OwnerThread(), [this] (AudioCallbackData aData) {
if (aData.is<MediaData*>()) {
OnAudioDecoded(aData.as<MediaData*>());
} else {
OnNotDecoded(MediaData::AUDIO_DATA,
aData.as<MediaResult>());
}
});
mVideoCallback = mReader->VideoCallback().Connect(
OwnerThread(), [this] (VideoCallbackData aData) {
typedef Tuple<MediaData*, TimeStamp> Type;
if (aData.is<Type>()) {
OnVideoDecoded(Get<0>(aData.as<Type>()));
} else {
OnNotDecoded(MediaData::VIDEO_DATA,
aData.as<MediaResult>());
}
});
mAudioWaitCallback = mReader->AudioWaitCallback().Connect(
OwnerThread(), [this] (WaitCallbackData aData) {
if (aData.is<MediaData::Type>()) {
HandleAudioWaited(aData.as<MediaData::Type>());
} else {
HandleNotWaited(aData.as<WaitForDataRejectValue>());
}
});
mVideoWaitCallback = mReader->VideoWaitCallback().Connect(
OwnerThread(), [this] (WaitCallbackData aData) {
if (aData.is<MediaData::Type>()) {
HandleVideoWaited(aData.as<MediaData::Type>());
} else {
HandleNotWaited(aData.as<WaitForDataRejectValue>());
}
});
}
void
AccurateSeekTask::CancelCallbacks()
{
AssertOwnerThread();
mAudioCallback.DisconnectIfExists();
mVideoCallback.DisconnectIfExists();
mAudioWaitCallback.DisconnectIfExists();
mVideoWaitCallback.DisconnectIfExists();
}
} // namespace mozilla

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

@ -66,10 +66,6 @@ private:
void OnNotDecoded(MediaData::Type, const MediaResult&);
void SetCallbacks();
void CancelCallbacks();
void AdjustFastSeekIfNeeded(MediaData* aSample);
/*
@ -90,11 +86,6 @@ private:
* Track the current seek promise made by the reader.
*/
MozPromiseRequestHolder<MediaDecoderReader::SeekPromise> mSeekRequest;
MediaEventListener mAudioCallback;
MediaEventListener mVideoCallback;
MediaEventListener mAudioWaitCallback;
MediaEventListener mVideoWaitCallback;
};
} // namespace mozilla

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

@ -771,9 +771,6 @@ public:
Reader()->SetVideoBlankDecode(false);
}
// 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()) {
@ -835,9 +832,6 @@ public:
mSeekTaskRequest.DisconnectIfExists();
mSeekJob.RejectIfExists(__func__);
mSeekTask->Discard();
// Reset the MediaDecoderReaderWrapper's callbask.
mMaster->SetMediaDecoderReaderWrapperCallback();
}
State GetState() const override
@ -2020,7 +2014,6 @@ MediaDecoderStateMachine::OnNotDecoded(MediaData::Type aType,
const MediaResult& aError)
{
MOZ_ASSERT(OnTaskQueue());
MOZ_ASSERT(mState != DECODER_STATE_SEEKING);
SAMPLE_LOG("OnNotDecoded (aType=%u, aError=%u)", aType, aError.Code());

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

@ -36,9 +36,6 @@ NextFrameSeekTask::NextFrameSeekTask(const void* aDecoderID,
{
AssertOwnerThread();
MOZ_ASSERT(aInfo.HasVideo());
// Configure MediaDecoderReaderWrapper.
SetCallbacks();
}
NextFrameSeekTask::~NextFrameSeekTask()
@ -55,9 +52,6 @@ NextFrameSeekTask::Discard()
// Disconnect MDSM.
RejectIfExist(NS_ERROR_DOM_MEDIA_CANCELED, __func__);
// Disconnect MediaDecoderReader.
CancelCallbacks();
mIsDiscarded = true;
}
@ -147,7 +141,6 @@ NextFrameSeekTask::HandleNotWaited(const WaitForDataRejectValue& aRejection)
{
if (NeedMoreVideo()) {
// Reject if we can't finish video seeking.
CancelCallbacks();
RejectIfExist(NS_ERROR_DOM_MEDIA_CANCELED, __func__);
return;
}
@ -339,10 +332,6 @@ NextFrameSeekTask::OnVideoNotDecoded(const MediaResult& aError)
MOZ_ASSERT(false, "Shouldn't want more data for ended video.");
break;
default:
// We might lose the audio sample after canceling the callbacks.
// However it doesn't really matter because MDSM is gonna shut down
// when seek fails.
CancelCallbacks();
// Reject the promise since we can't finish video seek anyway.
RejectIfExist(aError, __func__);
break;
@ -353,61 +342,6 @@ NextFrameSeekTask::OnVideoNotDecoded(const MediaResult& aError)
MaybeFinishSeek();
}
void
NextFrameSeekTask::SetCallbacks()
{
AssertOwnerThread();
// Register dummy callbcak for audio decoding since we don't need to handle
// the decoded audio samples.
mAudioCallback = mReader->AudioCallback().Connect(
OwnerThread(), [this] (AudioCallbackData aData) {
if (aData.is<MediaData*>()) {
OnAudioDecoded(aData.as<MediaData*>());
} else {
OnAudioNotDecoded(aData.as<MediaResult>());
}
});
mVideoCallback = mReader->VideoCallback().Connect(
OwnerThread(), [this] (VideoCallbackData aData) {
typedef Tuple<MediaData*, TimeStamp> Type;
if (aData.is<Type>()) {
OnVideoDecoded(Get<0>(aData.as<Type>()));
} else {
OnVideoNotDecoded(aData.as<MediaResult>());
}
});
mAudioWaitCallback = mReader->AudioWaitCallback().Connect(
OwnerThread(), [this] (WaitCallbackData aData) {
if (aData.is<MediaData::Type>()) {
HandleAudioWaited(aData.as<MediaData::Type>());
} else {
HandleNotWaited(aData.as<WaitForDataRejectValue>());
}
});
mVideoWaitCallback = mReader->VideoWaitCallback().Connect(
OwnerThread(), [this] (WaitCallbackData aData) {
if (aData.is<MediaData::Type>()) {
HandleVideoWaited(aData.as<MediaData::Type>());
} else {
HandleNotWaited(aData.as<WaitForDataRejectValue>());
}
});
}
void
NextFrameSeekTask::CancelCallbacks()
{
AssertOwnerThread();
mAudioCallback.DisconnectIfExists();
mVideoCallback.DisconnectIfExists();
mAudioWaitCallback.DisconnectIfExists();
mVideoWaitCallback.DisconnectIfExists();
}
void
NextFrameSeekTask::UpdateSeekTargetTime()
{

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

@ -77,10 +77,6 @@ private:
void OnVideoNotDecoded(const MediaResult& aError);
void SetCallbacks();
void CancelCallbacks();
// 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();
@ -96,11 +92,6 @@ private:
*/
const int64_t mCurrentTime;
media::TimeUnit mDuration;
MediaEventListener mAudioCallback;
MediaEventListener mVideoCallback;
MediaEventListener mAudioWaitCallback;
MediaEventListener mVideoWaitCallback;
};
} // namespace media