зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1320466 part 7 - remove callbacks of SeekTask; r=jwwang
MozReview-Commit-ID: KwyWGVG4NYG --HG-- extra : rebase_source : 9771b318a9bf7b4a1ad8dea82624fa3146d9728f
This commit is contained in:
Родитель
88081b6f24
Коммит
5883da3dd7
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче