mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Bug 1184634
- Rename "TaskQueue()" accessor to "OwnerThread()". r=gerald
Otherwise this name will collide with the rename of MediaTaskQueue to TaskQueue. It's also a better naming convention, because it generalizes to things that are owned by an AbstractThread that is not a Task Queue. We rename to Queue() in TestMozPromise, because that's more accurate.
This commit is contained in:
parent
407d2c5f90
commit
78001ffc43
@ -235,7 +235,7 @@ void MediaDecoder::UpdateDormantState(bool aDormantTimeout, bool aActivity)
|
|||||||
mDecoderStateMachine,
|
mDecoderStateMachine,
|
||||||
&MediaDecoderStateMachine::SetDormant,
|
&MediaDecoderStateMachine::SetDormant,
|
||||||
true);
|
true);
|
||||||
mDecoderStateMachine->TaskQueue()->Dispatch(event.forget());
|
mDecoderStateMachine->OwnerThread()->Dispatch(event.forget());
|
||||||
|
|
||||||
if (IsEnded()) {
|
if (IsEnded()) {
|
||||||
mWasEndedWhenEnteredDormant = true;
|
mWasEndedWhenEnteredDormant = true;
|
||||||
@ -251,7 +251,7 @@ void MediaDecoder::UpdateDormantState(bool aDormantTimeout, bool aActivity)
|
|||||||
mDecoderStateMachine,
|
mDecoderStateMachine,
|
||||||
&MediaDecoderStateMachine::SetDormant,
|
&MediaDecoderStateMachine::SetDormant,
|
||||||
false);
|
false);
|
||||||
mDecoderStateMachine->TaskQueue()->Dispatch(event.forget());
|
mDecoderStateMachine->OwnerThread()->Dispatch(event.forget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,7 +623,7 @@ void MediaDecoder::CallSeek(const SeekTarget& aTarget)
|
|||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
mSeekRequest.DisconnectIfExists();
|
mSeekRequest.DisconnectIfExists();
|
||||||
mSeekRequest.Begin(ProxyMediaCall(mDecoderStateMachine->TaskQueue(),
|
mSeekRequest.Begin(ProxyMediaCall(mDecoderStateMachine->OwnerThread(),
|
||||||
mDecoderStateMachine.get(), __func__,
|
mDecoderStateMachine.get(), __func__,
|
||||||
&MediaDecoderStateMachine::Seek, aTarget)
|
&MediaDecoderStateMachine::Seek, aTarget)
|
||||||
->Then(AbstractThread::MainThread(), __func__, this,
|
->Then(AbstractThread::MainThread(), __func__, this,
|
||||||
@ -1376,7 +1376,7 @@ MediaDecoder::NotifyWaitingForResourcesStatusChanged()
|
|||||||
RefPtr<nsRunnable> task =
|
RefPtr<nsRunnable> task =
|
||||||
NS_NewRunnableMethod(mDecoderStateMachine,
|
NS_NewRunnableMethod(mDecoderStateMachine,
|
||||||
&MediaDecoderStateMachine::NotifyWaitingForResourcesStatusChanged);
|
&MediaDecoderStateMachine::NotifyWaitingForResourcesStatusChanged);
|
||||||
mDecoderStateMachine->TaskQueue()->Dispatch(task.forget());
|
mDecoderStateMachine->OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ MediaDecoderReader::DecodeToFirstVideoData()
|
|||||||
}, [self] () -> bool {
|
}, [self] () -> bool {
|
||||||
MOZ_ASSERT(self->OnTaskQueue());
|
MOZ_ASSERT(self->OnTaskQueue());
|
||||||
return self->VideoQueue().GetSize();
|
return self->VideoQueue().GetSize();
|
||||||
})->Then(TaskQueue(), __func__, [self, p] () {
|
})->Then(OwnerThread(), __func__, [self, p] () {
|
||||||
p->Resolve(self->VideoQueue().PeekFront(), __func__);
|
p->Resolve(self->VideoQueue().PeekFront(), __func__);
|
||||||
}, [p] () {
|
}, [p] () {
|
||||||
// We don't have a way to differentiate EOS, error, and shutdown here. :-(
|
// We don't have a way to differentiate EOS, error, and shutdown here. :-(
|
||||||
@ -207,7 +207,7 @@ MediaDecoderReader::ThrottledNotifyDataArrived(const Interval<int64_t>& aInterva
|
|||||||
nsRefPtr<MediaDecoderReader> self = this;
|
nsRefPtr<MediaDecoderReader> self = this;
|
||||||
mThrottledNotify.Begin(
|
mThrottledNotify.Begin(
|
||||||
mTimer->WaitUntil(mLastThrottledNotify + mThrottleDuration, __func__)
|
mTimer->WaitUntil(mLastThrottledNotify + mThrottleDuration, __func__)
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self] () -> void {
|
[self] () -> void {
|
||||||
self->mThrottledNotify.Complete();
|
self->mThrottledNotify.Complete();
|
||||||
NS_ENSURE_TRUE_VOID(!self->mShutdown);
|
NS_ENSURE_TRUE_VOID(!self->mShutdown);
|
||||||
|
@ -115,7 +115,7 @@ public:
|
|||||||
|
|
||||||
virtual bool OnTaskQueue()
|
virtual bool OnTaskQueue()
|
||||||
{
|
{
|
||||||
return TaskQueue()->IsCurrentThreadIn();
|
return OwnerThread()->IsCurrentThreadIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resets all state related to decoding, emptying all buffers etc.
|
// Resets all state related to decoding, emptying all buffers etc.
|
||||||
@ -273,7 +273,7 @@ public:
|
|||||||
NS_NewRunnableMethodWithArg<media::Interval<int64_t>>(this, aThrottleUpdates ? &MediaDecoderReader::ThrottledNotifyDataArrived
|
NS_NewRunnableMethodWithArg<media::Interval<int64_t>>(this, aThrottleUpdates ? &MediaDecoderReader::ThrottledNotifyDataArrived
|
||||||
: &MediaDecoderReader::NotifyDataArrived,
|
: &MediaDecoderReader::NotifyDataArrived,
|
||||||
media::Interval<int64_t>(aOffset, aOffset + aLength));
|
media::Interval<int64_t>(aOffset, aOffset + aLength));
|
||||||
TaskQueue()->Dispatch(r.forget(), AbstractThread::DontAssertDispatchSuccess);
|
OwnerThread()->Dispatch(r.forget(), AbstractThread::DontAssertDispatchSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify the reader that data from the resource was evicted (MediaSource only)
|
// Notify the reader that data from the resource was evicted (MediaSource only)
|
||||||
@ -307,10 +307,10 @@ public:
|
|||||||
self->mStartTime.emplace(aStartTime);
|
self->mStartTime.emplace(aStartTime);
|
||||||
self->UpdateBuffered();
|
self->UpdateBuffered();
|
||||||
});
|
});
|
||||||
TaskQueue()->Dispatch(r.forget());
|
OwnerThread()->Dispatch(r.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaTaskQueue* TaskQueue() {
|
MediaTaskQueue* OwnerThread() {
|
||||||
return mTaskQueue;
|
return mTaskQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,7 +734,7 @@ MediaDecoderStateMachine::OnNotDecoded(MediaData::Type aType,
|
|||||||
nsRefPtr<MediaDecoderStateMachine> self = this;
|
nsRefPtr<MediaDecoderStateMachine> self = this;
|
||||||
WaitRequestRef(aType).Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
WaitRequestRef(aType).Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::WaitForData, aType)
|
&MediaDecoderReader::WaitForData, aType)
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self] (MediaData::Type aType) -> void {
|
[self] (MediaData::Type aType) -> void {
|
||||||
ReentrantMonitorAutoEnter mon(self->mDecoder->GetReentrantMonitor());
|
ReentrantMonitorAutoEnter mon(self->mDecoder->GetReentrantMonitor());
|
||||||
self->WaitRequestRef(aType).Complete();
|
self->WaitRequestRef(aType).Complete();
|
||||||
@ -1304,7 +1304,7 @@ void MediaDecoderStateMachine::Shutdown()
|
|||||||
// Put a task in the decode queue to shutdown the reader.
|
// Put a task in the decode queue to shutdown the reader.
|
||||||
// the queue to spin down.
|
// the queue to spin down.
|
||||||
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__, &MediaDecoderReader::Shutdown)
|
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__, &MediaDecoderReader::Shutdown)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::FinishShutdown,
|
&MediaDecoderStateMachine::FinishShutdown,
|
||||||
&MediaDecoderStateMachine::FinishShutdown);
|
&MediaDecoderStateMachine::FinishShutdown);
|
||||||
DECODER_LOG("Shutdown started");
|
DECODER_LOG("Shutdown started");
|
||||||
@ -1491,7 +1491,7 @@ MediaDecoderStateMachine::EnqueueDecodeFirstFrameTask()
|
|||||||
|
|
||||||
nsCOMPtr<nsIRunnable> task(
|
nsCOMPtr<nsIRunnable> task(
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::CallDecodeFirstFrame));
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::CallDecodeFirstFrame));
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1610,7 +1610,7 @@ MediaDecoderStateMachine::InitiateSeek()
|
|||||||
mSeekRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
mSeekRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::Seek, mCurrentSeek.mTarget.mTime,
|
&MediaDecoderReader::Seek, mCurrentSeek.mTarget.mTime,
|
||||||
Duration().ToMicroseconds())
|
Duration().ToMicroseconds())
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self] (int64_t) -> void {
|
[self] (int64_t) -> void {
|
||||||
ReentrantMonitorAutoEnter mon(self->mDecoder->GetReentrantMonitor());
|
ReentrantMonitorAutoEnter mon(self->mDecoder->GetReentrantMonitor());
|
||||||
self->mSeekRequest.Complete();
|
self->mSeekRequest.Complete();
|
||||||
@ -1669,7 +1669,7 @@ MediaDecoderStateMachine::EnsureAudioDecodeTaskQueued()
|
|||||||
|
|
||||||
mAudioDataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(),
|
mAudioDataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(),
|
||||||
__func__, &MediaDecoderReader::RequestAudioData)
|
__func__, &MediaDecoderReader::RequestAudioData)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::OnAudioDecoded,
|
&MediaDecoderStateMachine::OnAudioDecoded,
|
||||||
&MediaDecoderStateMachine::OnAudioNotDecoded));
|
&MediaDecoderStateMachine::OnAudioNotDecoded));
|
||||||
|
|
||||||
@ -1730,7 +1730,7 @@ MediaDecoderStateMachine::EnsureVideoDecodeTaskQueued()
|
|||||||
mVideoDataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
mVideoDataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::RequestVideoData,
|
&MediaDecoderReader::RequestVideoData,
|
||||||
skipToNextKeyFrame, currentTime, forceDecodeAhead)
|
skipToNextKeyFrame, currentTime, forceDecodeAhead)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::OnVideoDecoded,
|
&MediaDecoderStateMachine::OnVideoDecoded,
|
||||||
&MediaDecoderStateMachine::OnVideoNotDecoded));
|
&MediaDecoderStateMachine::OnVideoNotDecoded));
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
@ -1891,10 +1891,10 @@ MediaDecoderStateMachine::OnMetadataRead(MetadataHolder* aMetadata)
|
|||||||
// Set up the start time rendezvous if it doesn't already exist (which is
|
// Set up the start time rendezvous if it doesn't already exist (which is
|
||||||
// generally the case, unless we're coming out of dormant mode).
|
// generally the case, unless we're coming out of dormant mode).
|
||||||
if (!mStartTimeRendezvous) {
|
if (!mStartTimeRendezvous) {
|
||||||
mStartTimeRendezvous = new StartTimeRendezvous(TaskQueue(), HasAudio(), HasVideo(),
|
mStartTimeRendezvous = new StartTimeRendezvous(OwnerThread(), HasAudio(), HasVideo(),
|
||||||
mReader->ForceZeroStartTime() || IsRealTime());
|
mReader->ForceZeroStartTime() || IsRealTime());
|
||||||
|
|
||||||
mStartTimeRendezvous->AwaitStartTime()->Then(TaskQueue(), __func__,
|
mStartTimeRendezvous->AwaitStartTime()->Then(OwnerThread(), __func__,
|
||||||
[self] () -> void {
|
[self] () -> void {
|
||||||
NS_ENSURE_TRUE_VOID(!self->IsShutdown());
|
NS_ENSURE_TRUE_VOID(!self->IsShutdown());
|
||||||
self->mReader->DispatchSetStartTime(self->StartTime());
|
self->mReader->DispatchSetStartTime(self->StartTime());
|
||||||
@ -1906,7 +1906,7 @@ MediaDecoderStateMachine::OnMetadataRead(MetadataHolder* aMetadata)
|
|||||||
if (mInfo.mMetadataDuration.isSome()) {
|
if (mInfo.mMetadataDuration.isSome()) {
|
||||||
RecomputeDuration();
|
RecomputeDuration();
|
||||||
} else if (mInfo.mUnadjustedMetadataEndTime.isSome()) {
|
} else if (mInfo.mUnadjustedMetadataEndTime.isSome()) {
|
||||||
mStartTimeRendezvous->AwaitStartTime()->Then(TaskQueue(), __func__,
|
mStartTimeRendezvous->AwaitStartTime()->Then(OwnerThread(), __func__,
|
||||||
[self] () -> void {
|
[self] () -> void {
|
||||||
NS_ENSURE_TRUE_VOID(!self->IsShutdown());
|
NS_ENSURE_TRUE_VOID(!self->IsShutdown());
|
||||||
TimeUnit unadjusted = self->mInfo.mUnadjustedMetadataEndTime.ref();
|
TimeUnit unadjusted = self->mInfo.mUnadjustedMetadataEndTime.ref();
|
||||||
@ -2032,11 +2032,11 @@ MediaDecoderStateMachine::DecodeFirstFrame()
|
|||||||
mAudioDataRequest.Begin(
|
mAudioDataRequest.Begin(
|
||||||
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::RequestAudioData)
|
&MediaDecoderReader::RequestAudioData)
|
||||||
->Then(TaskQueue(), __func__, mStartTimeRendezvous.get(),
|
->Then(OwnerThread(), __func__, mStartTimeRendezvous.get(),
|
||||||
&StartTimeRendezvous::ProcessFirstSample<AudioDataPromise>,
|
&StartTimeRendezvous::ProcessFirstSample<AudioDataPromise>,
|
||||||
&StartTimeRendezvous::FirstSampleRejected<AudioData>)
|
&StartTimeRendezvous::FirstSampleRejected<AudioData>)
|
||||||
->CompletionPromise()
|
->CompletionPromise()
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::OnAudioDecoded,
|
&MediaDecoderStateMachine::OnAudioDecoded,
|
||||||
&MediaDecoderStateMachine::OnAudioNotDecoded)
|
&MediaDecoderStateMachine::OnAudioNotDecoded)
|
||||||
);
|
);
|
||||||
@ -2046,11 +2046,11 @@ MediaDecoderStateMachine::DecodeFirstFrame()
|
|||||||
mVideoDataRequest.Begin(
|
mVideoDataRequest.Begin(
|
||||||
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::RequestVideoData, false, int64_t(0), false)
|
&MediaDecoderReader::RequestVideoData, false, int64_t(0), false)
|
||||||
->Then(TaskQueue(), __func__, mStartTimeRendezvous.get(),
|
->Then(OwnerThread(), __func__, mStartTimeRendezvous.get(),
|
||||||
&StartTimeRendezvous::ProcessFirstSample<VideoDataPromise>,
|
&StartTimeRendezvous::ProcessFirstSample<VideoDataPromise>,
|
||||||
&StartTimeRendezvous::FirstSampleRejected<VideoData>)
|
&StartTimeRendezvous::FirstSampleRejected<VideoData>)
|
||||||
->CompletionPromise()
|
->CompletionPromise()
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::OnVideoDecoded,
|
&MediaDecoderStateMachine::OnVideoDecoded,
|
||||||
&MediaDecoderStateMachine::OnVideoNotDecoded));
|
&MediaDecoderStateMachine::OnVideoNotDecoded));
|
||||||
}
|
}
|
||||||
@ -2265,10 +2265,10 @@ MediaDecoderStateMachine::FinishShutdown()
|
|||||||
// state machine.
|
// state machine.
|
||||||
DECODER_LOG("Shutting down state machine task queue");
|
DECODER_LOG("Shutting down state machine task queue");
|
||||||
RefPtr<DecoderDisposer> disposer = new DecoderDisposer(mDecoder, this);
|
RefPtr<DecoderDisposer> disposer = new DecoderDisposer(mDecoder, this);
|
||||||
TaskQueue()->BeginShutdown()->Then(AbstractThread::MainThread(), __func__,
|
OwnerThread()->BeginShutdown()->Then(AbstractThread::MainThread(), __func__,
|
||||||
disposer.get(),
|
disposer.get(),
|
||||||
&DecoderDisposer::OnTaskQueueShutdown,
|
&DecoderDisposer::OnTaskQueueShutdown,
|
||||||
&DecoderDisposer::OnTaskQueueShutdown);
|
&DecoderDisposer::OnTaskQueueShutdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult MediaDecoderStateMachine::RunStateMachine()
|
nsresult MediaDecoderStateMachine::RunStateMachine()
|
||||||
@ -2301,7 +2301,7 @@ nsresult MediaDecoderStateMachine::RunStateMachine()
|
|||||||
DECODER_LOG("Dispatching AsyncReadMetadata");
|
DECODER_LOG("Dispatching AsyncReadMetadata");
|
||||||
mMetadataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
mMetadataRequest.Begin(ProxyMediaCall(DecodeTaskQueue(), mReader.get(), __func__,
|
||||||
&MediaDecoderReader::AsyncReadMetadata)
|
&MediaDecoderReader::AsyncReadMetadata)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaDecoderStateMachine::OnMetadataRead,
|
&MediaDecoderStateMachine::OnMetadataRead,
|
||||||
&MediaDecoderStateMachine::OnMetadataNotRead));
|
&MediaDecoderStateMachine::OnMetadataNotRead));
|
||||||
|
|
||||||
@ -2965,7 +2965,7 @@ MediaDecoderStateMachine::ScheduleStateMachine()
|
|||||||
|
|
||||||
nsCOMPtr<nsIRunnable> task =
|
nsCOMPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::RunStateMachine);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::RunStateMachine);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -2999,7 +2999,7 @@ bool MediaDecoderStateMachine::OnDecodeTaskQueue() const
|
|||||||
|
|
||||||
bool MediaDecoderStateMachine::OnTaskQueue() const
|
bool MediaDecoderStateMachine::OnTaskQueue() const
|
||||||
{
|
{
|
||||||
return TaskQueue()->IsCurrentThreadIn();
|
return OwnerThread()->IsCurrentThreadIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MediaDecoderStateMachine::IsStateMachineScheduled() const
|
bool MediaDecoderStateMachine::IsStateMachineScheduled() const
|
||||||
@ -3154,7 +3154,7 @@ void MediaDecoderStateMachine::DispatchAudioCaptured()
|
|||||||
self->ScheduleStateMachine();
|
self->ScheduleStateMachine();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
TaskQueue()->Dispatch(r.forget());
|
OwnerThread()->Dispatch(r.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MediaDecoderStateMachine::AddOutputStream(ProcessedMediaStream* aStream,
|
void MediaDecoderStateMachine::AddOutputStream(ProcessedMediaStream* aStream,
|
||||||
|
@ -168,7 +168,7 @@ public:
|
|||||||
{
|
{
|
||||||
nsCOMPtr<nsIRunnable> runnable =
|
nsCOMPtr<nsIRunnable> runnable =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::Shutdown);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::Shutdown);
|
||||||
TaskQueue()->Dispatch(runnable.forget());
|
OwnerThread()->Dispatch(runnable.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FinishShutdown();
|
void FinishShutdown();
|
||||||
@ -208,7 +208,7 @@ public:
|
|||||||
{
|
{
|
||||||
nsCOMPtr<nsIRunnable> runnable =
|
nsCOMPtr<nsIRunnable> runnable =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::StartBuffering);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::StartBuffering);
|
||||||
TaskQueue()->Dispatch(runnable.forget());
|
OwnerThread()->Dispatch(runnable.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is called on the state machine thread and audio thread.
|
// This is called on the state machine thread and audio thread.
|
||||||
@ -264,7 +264,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns the state machine task queue.
|
// Returns the state machine task queue.
|
||||||
MediaTaskQueue* TaskQueue() const { return mTaskQueue; }
|
MediaTaskQueue* OwnerThread() const { return mTaskQueue; }
|
||||||
|
|
||||||
// Calls ScheduleStateMachine() after taking the decoder lock. Also
|
// Calls ScheduleStateMachine() after taking the decoder lock. Also
|
||||||
// notifies the decoder thread in case it's waiting on the decoder lock.
|
// notifies the decoder thread in case it's waiting on the decoder lock.
|
||||||
@ -280,7 +280,7 @@ public:
|
|||||||
{
|
{
|
||||||
nsCOMPtr<nsIRunnable> task =
|
nsCOMPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::RunStateMachine);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::RunStateMachine);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invokes ScheduleStateMachine to run in |aMicroseconds| microseconds,
|
// Invokes ScheduleStateMachine to run in |aMicroseconds| microseconds,
|
||||||
@ -305,7 +305,7 @@ public:
|
|||||||
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self, aEndTime] () {
|
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction([self, aEndTime] () {
|
||||||
self->mFragmentEndTime = aEndTime;
|
self->mFragmentEndTime = aEndTime;
|
||||||
});
|
});
|
||||||
TaskQueue()->Dispatch(r.forget());
|
OwnerThread()->Dispatch(r.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop reference to decoder. Only called during shutdown dance.
|
// Drop reference to decoder. Only called during shutdown dance.
|
||||||
@ -359,7 +359,7 @@ public:
|
|||||||
// have the intended effect.
|
// have the intended effect.
|
||||||
MOZ_DIAGNOSTIC_ASSERT(self->mPlayState == MediaDecoder::PLAY_STATE_LOADING);
|
MOZ_DIAGNOSTIC_ASSERT(self->mPlayState == MediaDecoder::PLAY_STATE_LOADING);
|
||||||
});
|
});
|
||||||
TaskQueue()->Dispatch(r.forget());
|
OwnerThread()->Dispatch(r.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnAudioDecoded(AudioData* aSample);
|
void OnAudioDecoded(AudioData* aSample);
|
||||||
@ -667,7 +667,7 @@ public:
|
|||||||
{
|
{
|
||||||
RefPtr<nsRunnable> r =
|
RefPtr<nsRunnable> r =
|
||||||
NS_NewRunnableMethodWithArg<int64_t>(this, &MediaDecoderStateMachine::OnPlaybackOffsetUpdate, aPlaybackOffset);
|
NS_NewRunnableMethodWithArg<int64_t>(this, &MediaDecoderStateMachine::OnPlaybackOffsetUpdate, aPlaybackOffset);
|
||||||
TaskQueue()->Dispatch(r.forget());
|
OwnerThread()->Dispatch(r.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -679,7 +679,7 @@ public:
|
|||||||
{
|
{
|
||||||
nsCOMPtr<nsIRunnable> runnable =
|
nsCOMPtr<nsIRunnable> runnable =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::OnAudioSinkComplete);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::OnAudioSinkComplete);
|
||||||
TaskQueue()->Dispatch(runnable.forget());
|
OwnerThread()->Dispatch(runnable.forget());
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -690,7 +690,7 @@ private:
|
|||||||
{
|
{
|
||||||
nsCOMPtr<nsIRunnable> runnable =
|
nsCOMPtr<nsIRunnable> runnable =
|
||||||
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::OnAudioSinkError);
|
NS_NewRunnableMethod(this, &MediaDecoderStateMachine::OnAudioSinkError);
|
||||||
TaskQueue()->Dispatch(runnable.forget());
|
OwnerThread()->Dispatch(runnable.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return true if the video decoder's decode speed can not catch up the
|
// Return true if the video decoder's decode speed can not catch up the
|
||||||
@ -751,7 +751,7 @@ private:
|
|||||||
Reset();
|
Reset();
|
||||||
mTarget = aTarget;
|
mTarget = aTarget;
|
||||||
mRequest.Begin(mMediaTimer->WaitUntil(mTarget, __func__)->Then(
|
mRequest.Begin(mMediaTimer->WaitUntil(mTarget, __func__)->Then(
|
||||||
mSelf->TaskQueue(), __func__, mSelf,
|
mSelf->OwnerThread(), __func__, mSelf,
|
||||||
&MediaDecoderStateMachine::OnDelayedSchedule,
|
&MediaDecoderStateMachine::OnDelayedSchedule,
|
||||||
&MediaDecoderStateMachine::NotReached));
|
&MediaDecoderStateMachine::NotReached));
|
||||||
}
|
}
|
||||||
@ -920,7 +920,7 @@ private:
|
|||||||
// The task queue in which we run decode tasks. This is referred to as
|
// The task queue in which we run decode tasks. This is referred to as
|
||||||
// the "decode thread", though in practise tasks can run on a different
|
// the "decode thread", though in practise tasks can run on a different
|
||||||
// thread every time they're called.
|
// thread every time they're called.
|
||||||
MediaTaskQueue* DecodeTaskQueue() const { return mReader->TaskQueue(); }
|
MediaTaskQueue* DecodeTaskQueue() const { return mReader->OwnerThread(); }
|
||||||
|
|
||||||
// The time that playback started from the system clock. This is used for
|
// The time that playback started from the system clock. This is used for
|
||||||
// timing the presentation of video frames when there's no audio.
|
// timing the presentation of video frames when there's no audio.
|
||||||
|
@ -286,7 +286,7 @@ MediaFormatReader::AsyncReadMetadata()
|
|||||||
nsRefPtr<MetadataPromise> p = mMetadataPromise.Ensure(__func__);
|
nsRefPtr<MetadataPromise> p = mMetadataPromise.Ensure(__func__);
|
||||||
|
|
||||||
mDemuxerInitRequest.Begin(mDemuxer->Init()
|
mDemuxerInitRequest.Begin(mDemuxer->Init()
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnDemuxerInitDone,
|
&MediaFormatReader::OnDemuxerInitDone,
|
||||||
&MediaFormatReader::OnDemuxerInitFailed));
|
&MediaFormatReader::OnDemuxerInitFailed));
|
||||||
return p;
|
return p;
|
||||||
@ -609,7 +609,7 @@ MediaFormatReader::DoDemuxVideo()
|
|||||||
{
|
{
|
||||||
// TODO Use DecodeAhead value rather than 1.
|
// TODO Use DecodeAhead value rather than 1.
|
||||||
mVideo.mDemuxRequest.Begin(mVideo.mTrackDemuxer->GetSamples(1)
|
mVideo.mDemuxRequest.Begin(mVideo.mTrackDemuxer->GetSamples(1)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnVideoDemuxCompleted,
|
&MediaFormatReader::OnVideoDemuxCompleted,
|
||||||
&MediaFormatReader::OnVideoDemuxFailed));
|
&MediaFormatReader::OnVideoDemuxFailed));
|
||||||
}
|
}
|
||||||
@ -666,7 +666,7 @@ MediaFormatReader::DoDemuxAudio()
|
|||||||
{
|
{
|
||||||
// TODO Use DecodeAhead value rather than 1.
|
// TODO Use DecodeAhead value rather than 1.
|
||||||
mAudio.mDemuxRequest.Begin(mAudio.mTrackDemuxer->GetSamples(1)
|
mAudio.mDemuxRequest.Begin(mAudio.mTrackDemuxer->GetSamples(1)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnAudioDemuxCompleted,
|
&MediaFormatReader::OnAudioDemuxCompleted,
|
||||||
&MediaFormatReader::OnAudioDemuxFailed));
|
&MediaFormatReader::OnAudioDemuxFailed));
|
||||||
}
|
}
|
||||||
@ -788,7 +788,7 @@ MediaFormatReader::ScheduleUpdate(TrackType aTrack)
|
|||||||
decoder.mUpdateScheduled = true;
|
decoder.mUpdateScheduled = true;
|
||||||
RefPtr<nsIRunnable> task(
|
RefPtr<nsIRunnable> task(
|
||||||
NS_NewRunnableMethodWithArg<TrackType>(this, &MediaFormatReader::Update, aTrack));
|
NS_NewRunnableMethodWithArg<TrackType>(this, &MediaFormatReader::Update, aTrack));
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -921,7 +921,7 @@ MediaFormatReader::DecodeDemuxedSamples(TrackType aTrack,
|
|||||||
decoder.mTimeThreshold = Some(TimeUnit::FromMicroseconds(sample->mTime));
|
decoder.mTimeThreshold = Some(TimeUnit::FromMicroseconds(sample->mTime));
|
||||||
nsRefPtr<MediaFormatReader> self = this;
|
nsRefPtr<MediaFormatReader> self = this;
|
||||||
decoder.mSeekRequest.Begin(decoder.mTrackDemuxer->Seek(decoder.mTimeThreshold.ref())
|
decoder.mSeekRequest.Begin(decoder.mTrackDemuxer->Seek(decoder.mTimeThreshold.ref())
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self, aTrack] (media::TimeUnit aTime) {
|
[self, aTrack] (media::TimeUnit aTime) {
|
||||||
auto& decoder = self->GetDecoderData(aTrack);
|
auto& decoder = self->GetDecoderData(aTrack);
|
||||||
decoder.mSeekRequest.Complete();
|
decoder.mSeekRequest.Complete();
|
||||||
@ -1187,7 +1187,7 @@ MediaFormatReader::Output(TrackType aTrack, MediaData* aSample)
|
|||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethodWithArgs<TrackType, MediaData*>(
|
NS_NewRunnableMethodWithArgs<TrackType, MediaData*>(
|
||||||
this, &MediaFormatReader::NotifyNewOutput, aTrack, aSample);
|
this, &MediaFormatReader::NotifyNewOutput, aTrack, aSample);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1196,7 +1196,7 @@ MediaFormatReader::DrainComplete(TrackType aTrack)
|
|||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethodWithArg<TrackType>(
|
NS_NewRunnableMethodWithArg<TrackType>(
|
||||||
this, &MediaFormatReader::NotifyDrainComplete, aTrack);
|
this, &MediaFormatReader::NotifyDrainComplete, aTrack);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1205,7 +1205,7 @@ MediaFormatReader::InputExhausted(TrackType aTrack)
|
|||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethodWithArg<TrackType>(
|
NS_NewRunnableMethodWithArg<TrackType>(
|
||||||
this, &MediaFormatReader::NotifyInputExhausted, aTrack);
|
this, &MediaFormatReader::NotifyInputExhausted, aTrack);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1214,7 +1214,7 @@ MediaFormatReader::Error(TrackType aTrack)
|
|||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethodWithArg<TrackType>(
|
NS_NewRunnableMethodWithArg<TrackType>(
|
||||||
this, &MediaFormatReader::NotifyError, aTrack);
|
this, &MediaFormatReader::NotifyError, aTrack);
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1251,7 +1251,7 @@ MediaFormatReader::SkipVideoDemuxToNextKeyFrame(media::TimeUnit aTimeThreshold)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mSkipRequest.Begin(mVideo.mTrackDemuxer->SkipToNextRandomAccessPoint(aTimeThreshold)
|
mSkipRequest.Begin(mVideo.mTrackDemuxer->SkipToNextRandomAccessPoint(aTimeThreshold)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnVideoSkipCompleted,
|
&MediaFormatReader::OnVideoSkipCompleted,
|
||||||
&MediaFormatReader::OnVideoSkipFailed));
|
&MediaFormatReader::OnVideoSkipFailed));
|
||||||
return;
|
return;
|
||||||
@ -1368,7 +1368,7 @@ MediaFormatReader::DoVideoSeek()
|
|||||||
LOGV("Seeking video to %lld", mPendingSeekTime.ref().ToMicroseconds());
|
LOGV("Seeking video to %lld", mPendingSeekTime.ref().ToMicroseconds());
|
||||||
media::TimeUnit seekTime = mPendingSeekTime.ref();
|
media::TimeUnit seekTime = mPendingSeekTime.ref();
|
||||||
mVideo.mSeekRequest.Begin(mVideo.mTrackDemuxer->Seek(seekTime)
|
mVideo.mSeekRequest.Begin(mVideo.mTrackDemuxer->Seek(seekTime)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnVideoSeekCompleted,
|
&MediaFormatReader::OnVideoSeekCompleted,
|
||||||
&MediaFormatReader::OnVideoSeekFailed));
|
&MediaFormatReader::OnVideoSeekFailed));
|
||||||
}
|
}
|
||||||
@ -1396,7 +1396,7 @@ MediaFormatReader::DoAudioSeek()
|
|||||||
LOGV("Seeking audio to %lld", mPendingSeekTime.ref().ToMicroseconds());
|
LOGV("Seeking audio to %lld", mPendingSeekTime.ref().ToMicroseconds());
|
||||||
media::TimeUnit seekTime = mPendingSeekTime.ref();
|
media::TimeUnit seekTime = mPendingSeekTime.ref();
|
||||||
mAudio.mSeekRequest.Begin(mAudio.mTrackDemuxer->Seek(seekTime)
|
mAudio.mSeekRequest.Begin(mAudio.mTrackDemuxer->Seek(seekTime)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaFormatReader::OnAudioSeekCompleted,
|
&MediaFormatReader::OnAudioSeekCompleted,
|
||||||
&MediaFormatReader::OnAudioSeekFailed));
|
&MediaFormatReader::OnAudioSeekFailed));
|
||||||
}
|
}
|
||||||
|
@ -336,7 +336,7 @@ AndroidMediaReader::Seek(int64_t aTarget, int64_t aEndTime)
|
|||||||
mVideoSeekTimeUs = aTarget;
|
mVideoSeekTimeUs = aTarget;
|
||||||
|
|
||||||
nsRefPtr<AndroidMediaReader> self = this;
|
nsRefPtr<AndroidMediaReader> self = this;
|
||||||
mSeekRequest.Begin(DecodeToFirstVideoData()->Then(TaskQueue(), __func__, [self] (VideoData* v) {
|
mSeekRequest.Begin(DecodeToFirstVideoData()->Then(OwnerThread(), __func__, [self] (VideoData* v) {
|
||||||
self->mSeekRequest.Complete();
|
self->mSeekRequest.Complete();
|
||||||
self->mAudioSeekTimeUs = v->mTime;
|
self->mAudioSeekTimeUs = v->mTime;
|
||||||
self->mSeekPromise.Resolve(self->mAudioSeekTimeUs, __func__);
|
self->mSeekPromise.Resolve(self->mAudioSeekTimeUs, __func__);
|
||||||
|
@ -647,7 +647,7 @@ MP4Reader::ScheduleUpdate(TrackType aTrack)
|
|||||||
decoder.mUpdateScheduled = true;
|
decoder.mUpdateScheduled = true;
|
||||||
RefPtr<nsIRunnable> task(
|
RefPtr<nsIRunnable> task(
|
||||||
NS_NewRunnableMethodWithArg<TrackType>(this, &MP4Reader::Update, aTrack));
|
NS_NewRunnableMethodWithArg<TrackType>(this, &MP4Reader::Update, aTrack));
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -53,7 +53,7 @@ private:
|
|||||||
virtual ~TestBinding()
|
virtual ~TestBinding()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
nsRefPtr<MediaTaskQueue> queue = reader->TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = reader->OwnerThread();
|
||||||
nsCOMPtr<nsIRunnable> task = NS_NewRunnableMethod(reader, &MP4Reader::Shutdown);
|
nsCOMPtr<nsIRunnable> task = NS_NewRunnableMethod(reader, &MP4Reader::Shutdown);
|
||||||
// Hackily bypass the tail dispatcher so that we can AwaitShutdownAndIdle.
|
// Hackily bypass the tail dispatcher so that we can AwaitShutdownAndIdle.
|
||||||
// In production code we'd use BeginShutdown + promises.
|
// In production code we'd use BeginShutdown + promises.
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
mTaskQueue->AwaitShutdownAndIdle();
|
mTaskQueue->AwaitShutdownAndIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaTaskQueue* TaskQueue() { return mTaskQueue; }
|
MediaTaskQueue* Queue() { return mTaskQueue; }
|
||||||
private:
|
private:
|
||||||
nsRefPtr<MediaTaskQueue> mTaskQueue;
|
nsRefPtr<MediaTaskQueue> mTaskQueue;
|
||||||
};
|
};
|
||||||
@ -91,7 +91,7 @@ RunOnTaskQueue(MediaTaskQueue* aQueue, FunctionType aFun)
|
|||||||
TEST(MozPromise, BasicResolve)
|
TEST(MozPromise, BasicResolve)
|
||||||
{
|
{
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue] () -> void {
|
RunOnTaskQueue(queue, [queue] () -> void {
|
||||||
TestPromise::CreateAndResolve(42, __func__)->Then(queue, __func__,
|
TestPromise::CreateAndResolve(42, __func__)->Then(queue, __func__,
|
||||||
[queue] (int aResolveValue) -> void { EXPECT_EQ(aResolveValue, 42); queue->BeginShutdown(); },
|
[queue] (int aResolveValue) -> void { EXPECT_EQ(aResolveValue, 42); queue->BeginShutdown(); },
|
||||||
@ -102,7 +102,7 @@ TEST(MozPromise, BasicResolve)
|
|||||||
TEST(MozPromise, BasicReject)
|
TEST(MozPromise, BasicReject)
|
||||||
{
|
{
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue] () -> void {
|
RunOnTaskQueue(queue, [queue] () -> void {
|
||||||
TestPromise::CreateAndReject(42.0, __func__)->Then(queue, __func__,
|
TestPromise::CreateAndReject(42.0, __func__)->Then(queue, __func__,
|
||||||
DO_FAIL,
|
DO_FAIL,
|
||||||
@ -113,7 +113,7 @@ TEST(MozPromise, BasicReject)
|
|||||||
TEST(MozPromise, AsyncResolve)
|
TEST(MozPromise, AsyncResolve)
|
||||||
{
|
{
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue] () -> void {
|
RunOnTaskQueue(queue, [queue] () -> void {
|
||||||
nsRefPtr<TestPromise::Private> p = new TestPromise::Private(__func__);
|
nsRefPtr<TestPromise::Private> p = new TestPromise::Private(__func__);
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ TEST(MozPromise, CompletionPromises)
|
|||||||
{
|
{
|
||||||
bool invokedPass = false;
|
bool invokedPass = false;
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue, &invokedPass] () -> void {
|
RunOnTaskQueue(queue, [queue, &invokedPass] () -> void {
|
||||||
TestPromise::CreateAndResolve(40, __func__)
|
TestPromise::CreateAndResolve(40, __func__)
|
||||||
->Then(queue, __func__,
|
->Then(queue, __func__,
|
||||||
@ -174,7 +174,7 @@ TEST(MozPromise, CompletionPromises)
|
|||||||
TEST(MozPromise, PromiseAllResolve)
|
TEST(MozPromise, PromiseAllResolve)
|
||||||
{
|
{
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue] () -> void {
|
RunOnTaskQueue(queue, [queue] () -> void {
|
||||||
|
|
||||||
nsTArray<nsRefPtr<TestPromise>> promises;
|
nsTArray<nsRefPtr<TestPromise>> promises;
|
||||||
@ -198,7 +198,7 @@ TEST(MozPromise, PromiseAllResolve)
|
|||||||
TEST(MozPromise, PromiseAllReject)
|
TEST(MozPromise, PromiseAllReject)
|
||||||
{
|
{
|
||||||
AutoTaskQueue atq;
|
AutoTaskQueue atq;
|
||||||
nsRefPtr<MediaTaskQueue> queue = atq.TaskQueue();
|
nsRefPtr<MediaTaskQueue> queue = atq.Queue();
|
||||||
RunOnTaskQueue(queue, [queue] () -> void {
|
RunOnTaskQueue(queue, [queue] () -> void {
|
||||||
|
|
||||||
nsTArray<nsRefPtr<TestPromise>> promises;
|
nsTArray<nsRefPtr<TestPromise>> promises;
|
||||||
|
@ -163,7 +163,7 @@ MediaSourceReader::RequestAudioData()
|
|||||||
case SOURCE_NEW:
|
case SOURCE_NEW:
|
||||||
GetAudioReader()->ResetDecode();
|
GetAudioReader()->ResetDecode();
|
||||||
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(mLastAudioTime), 0)
|
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(mLastAudioTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::CompleteAudioSeekAndDoRequest,
|
&MediaSourceReader::CompleteAudioSeekAndDoRequest,
|
||||||
&MediaSourceReader::CompleteAudioSeekAndRejectPromise));
|
&MediaSourceReader::CompleteAudioSeekAndRejectPromise));
|
||||||
break;
|
break;
|
||||||
@ -188,7 +188,7 @@ MediaSourceReader::RequestAudioData()
|
|||||||
void MediaSourceReader::DoAudioRequest()
|
void MediaSourceReader::DoAudioRequest()
|
||||||
{
|
{
|
||||||
mAudioRequest.Begin(GetAudioReader()->RequestAudioData()
|
mAudioRequest.Begin(GetAudioReader()->RequestAudioData()
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::OnAudioDecoded,
|
&MediaSourceReader::OnAudioDecoded,
|
||||||
&MediaSourceReader::OnAudioNotDecoded));
|
&MediaSourceReader::OnAudioNotDecoded));
|
||||||
}
|
}
|
||||||
@ -211,7 +211,7 @@ MediaSourceReader::OnAudioDecoded(AudioData* aSample)
|
|||||||
MSE_DEBUG("mTime=%lld < mTimeThreshold=%lld",
|
MSE_DEBUG("mTime=%lld < mTimeThreshold=%lld",
|
||||||
ourTime, mTimeThreshold);
|
ourTime, mTimeThreshold);
|
||||||
mAudioRequest.Begin(GetAudioReader()->RequestAudioData()
|
mAudioRequest.Begin(GetAudioReader()->RequestAudioData()
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::OnAudioDecoded,
|
&MediaSourceReader::OnAudioDecoded,
|
||||||
&MediaSourceReader::OnAudioNotDecoded));
|
&MediaSourceReader::OnAudioNotDecoded));
|
||||||
return;
|
return;
|
||||||
@ -281,7 +281,7 @@ MediaSourceReader::OnAudioNotDecoded(NotDecodedReason aReason)
|
|||||||
if (result == SOURCE_NEW) {
|
if (result == SOURCE_NEW) {
|
||||||
GetAudioReader()->ResetDecode();
|
GetAudioReader()->ResetDecode();
|
||||||
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(mLastAudioTime), 0)
|
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(mLastAudioTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::CompleteAudioSeekAndDoRequest,
|
&MediaSourceReader::CompleteAudioSeekAndDoRequest,
|
||||||
&MediaSourceReader::CompleteAudioSeekAndRejectPromise));
|
&MediaSourceReader::CompleteAudioSeekAndRejectPromise));
|
||||||
return;
|
return;
|
||||||
@ -339,7 +339,7 @@ MediaSourceReader::RequestVideoData(bool aSkipToNextKeyframe,
|
|||||||
case SOURCE_NEW:
|
case SOURCE_NEW:
|
||||||
GetVideoReader()->ResetDecode();
|
GetVideoReader()->ResetDecode();
|
||||||
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(mLastVideoTime), 0)
|
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(mLastVideoTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::CompleteVideoSeekAndDoRequest,
|
&MediaSourceReader::CompleteVideoSeekAndDoRequest,
|
||||||
&MediaSourceReader::CompleteVideoSeekAndRejectPromise));
|
&MediaSourceReader::CompleteVideoSeekAndRejectPromise));
|
||||||
break;
|
break;
|
||||||
@ -368,7 +368,7 @@ MediaSourceReader::DoVideoRequest()
|
|||||||
mVideoRequest.Begin(GetVideoReader()->RequestVideoData(mDropVideoBeforeThreshold,
|
mVideoRequest.Begin(GetVideoReader()->RequestVideoData(mDropVideoBeforeThreshold,
|
||||||
GetReaderVideoTime(mTimeThreshold),
|
GetReaderVideoTime(mTimeThreshold),
|
||||||
mForceVideoDecodeAhead)
|
mForceVideoDecodeAhead)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::OnVideoDecoded,
|
&MediaSourceReader::OnVideoDecoded,
|
||||||
&MediaSourceReader::OnVideoNotDecoded));
|
&MediaSourceReader::OnVideoNotDecoded));
|
||||||
}
|
}
|
||||||
@ -438,7 +438,7 @@ MediaSourceReader::OnVideoNotDecoded(NotDecodedReason aReason)
|
|||||||
if (result == SOURCE_NEW) {
|
if (result == SOURCE_NEW) {
|
||||||
GetVideoReader()->ResetDecode();
|
GetVideoReader()->ResetDecode();
|
||||||
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(mLastVideoTime), 0)
|
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(mLastVideoTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::CompleteVideoSeekAndDoRequest,
|
&MediaSourceReader::CompleteVideoSeekAndDoRequest,
|
||||||
&MediaSourceReader::CompleteVideoSeekAndRejectPromise));
|
&MediaSourceReader::CompleteVideoSeekAndRejectPromise));
|
||||||
return;
|
return;
|
||||||
@ -509,7 +509,7 @@ MediaSourceReader::ContinueShutdown()
|
|||||||
{
|
{
|
||||||
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
|
||||||
if (mTrackBuffers.Length()) {
|
if (mTrackBuffers.Length()) {
|
||||||
mTrackBuffers[0]->Shutdown()->Then(TaskQueue(), __func__, this,
|
mTrackBuffers[0]->Shutdown()->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::ContinueShutdown,
|
&MediaSourceReader::ContinueShutdown,
|
||||||
&MediaSourceReader::ContinueShutdown);
|
&MediaSourceReader::ContinueShutdown);
|
||||||
mShutdownTrackBuffers.AppendElement(mTrackBuffers[0]);
|
mShutdownTrackBuffers.AppendElement(mTrackBuffers[0]);
|
||||||
@ -742,7 +742,7 @@ MediaSourceReader::CreateSubDecoder(const nsACString& aType, int64_t aTimestampO
|
|||||||
// borrowing.
|
// borrowing.
|
||||||
nsRefPtr<SourceBufferDecoder> decoder =
|
nsRefPtr<SourceBufferDecoder> decoder =
|
||||||
new SourceBufferDecoder(new SourceBufferResource(aType), mDecoder, aTimestampOffset);
|
new SourceBufferDecoder(new SourceBufferResource(aType), mDecoder, aTimestampOffset);
|
||||||
nsRefPtr<MediaDecoderReader> reader(CreateReaderForType(aType, decoder, TaskQueue()));
|
nsRefPtr<MediaDecoderReader> reader(CreateReaderForType(aType, decoder, OwnerThread()));
|
||||||
if (!reader) {
|
if (!reader) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -829,7 +829,7 @@ MediaSourceReader::NotifyTimeRangesChanged()
|
|||||||
//post a task to the decode queue to try to complete the pending seek.
|
//post a task to the decode queue to try to complete the pending seek.
|
||||||
RefPtr<nsIRunnable> task(NS_NewRunnableMethod(
|
RefPtr<nsIRunnable> task(NS_NewRunnableMethod(
|
||||||
this, &MediaSourceReader::AttemptSeek));
|
this, &MediaSourceReader::AttemptSeek));
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
} else {
|
} else {
|
||||||
MaybeNotifyHaveData();
|
MaybeNotifyHaveData();
|
||||||
}
|
}
|
||||||
@ -946,7 +946,7 @@ MediaSourceReader::DoAudioSeek()
|
|||||||
}
|
}
|
||||||
GetAudioReader()->ResetDecode();
|
GetAudioReader()->ResetDecode();
|
||||||
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(seekTime), 0)
|
mAudioSeekRequest.Begin(GetAudioReader()->Seek(GetReaderAudioTime(seekTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::OnAudioSeekCompleted,
|
&MediaSourceReader::OnAudioSeekCompleted,
|
||||||
&MediaSourceReader::OnAudioSeekFailed));
|
&MediaSourceReader::OnAudioSeekFailed));
|
||||||
MSE_DEBUG("reader=%p", GetAudioReader());
|
MSE_DEBUG("reader=%p", GetAudioReader());
|
||||||
@ -1018,7 +1018,7 @@ MediaSourceReader::DoVideoSeek()
|
|||||||
}
|
}
|
||||||
GetVideoReader()->ResetDecode();
|
GetVideoReader()->ResetDecode();
|
||||||
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(seekTime), 0)
|
mVideoSeekRequest.Begin(GetVideoReader()->Seek(GetReaderVideoTime(seekTime), 0)
|
||||||
->Then(TaskQueue(), __func__, this,
|
->Then(OwnerThread(), __func__, this,
|
||||||
&MediaSourceReader::OnVideoSeekCompleted,
|
&MediaSourceReader::OnVideoSeekCompleted,
|
||||||
&MediaSourceReader::OnVideoSeekFailed));
|
&MediaSourceReader::OnVideoSeekFailed));
|
||||||
MSE_DEBUG("reader=%p", GetVideoReader());
|
MSE_DEBUG("reader=%p", GetVideoReader());
|
||||||
@ -1220,7 +1220,7 @@ MediaSourceReader::Ended(bool aEnded)
|
|||||||
// seek or wait
|
// seek or wait
|
||||||
RefPtr<nsIRunnable> task(NS_NewRunnableMethod(
|
RefPtr<nsIRunnable> task(NS_NewRunnableMethod(
|
||||||
this, &MediaSourceReader::NotifyTimeRangesChanged));
|
this, &MediaSourceReader::NotifyTimeRangesChanged));
|
||||||
TaskQueue()->Dispatch(task.forget());
|
OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ TrackBuffer::Shutdown()
|
|||||||
RefPtr<MediaTaskQueue> queue = mTaskQueue;
|
RefPtr<MediaTaskQueue> queue = mTaskQueue;
|
||||||
mTaskQueue = nullptr;
|
mTaskQueue = nullptr;
|
||||||
queue->BeginShutdown()
|
queue->BeginShutdown()
|
||||||
->Then(mParentDecoder->GetReader()->TaskQueue(), __func__, this,
|
->Then(mParentDecoder->GetReader()->OwnerThread(), __func__, this,
|
||||||
&TrackBuffer::ContinueShutdown, &TrackBuffer::ContinueShutdown);
|
&TrackBuffer::ContinueShutdown, &TrackBuffer::ContinueShutdown);
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
@ -127,7 +127,7 @@ TrackBuffer::ContinueShutdown()
|
|||||||
ReentrantMonitorAutoEnter mon(mParentDecoder->GetReentrantMonitor());
|
ReentrantMonitorAutoEnter mon(mParentDecoder->GetReentrantMonitor());
|
||||||
if (mDecoders.Length()) {
|
if (mDecoders.Length()) {
|
||||||
mDecoders[0]->GetReader()->Shutdown()
|
mDecoders[0]->GetReader()->Shutdown()
|
||||||
->Then(mParentDecoder->GetReader()->TaskQueue(), __func__, this,
|
->Then(mParentDecoder->GetReader()->OwnerThread(), __func__, this,
|
||||||
&TrackBuffer::ContinueShutdown, &TrackBuffer::ContinueShutdown);
|
&TrackBuffer::ContinueShutdown, &TrackBuffer::ContinueShutdown);
|
||||||
mShutdownDecoders.AppendElement(mDecoders[0]);
|
mShutdownDecoders.AppendElement(mDecoders[0]);
|
||||||
mDecoders.RemoveElementAt(0);
|
mDecoders.RemoveElementAt(0);
|
||||||
@ -267,10 +267,10 @@ TrackBuffer::BufferAppend()
|
|||||||
|
|
||||||
nsRefPtr<TrackBuffer> self = this;
|
nsRefPtr<TrackBuffer> self = this;
|
||||||
|
|
||||||
ProxyMediaCall(mParentDecoder->GetReader()->TaskQueue(), this, __func__,
|
ProxyMediaCall(mParentDecoder->GetReader()->OwnerThread(), this, __func__,
|
||||||
&TrackBuffer::UpdateBufferedRanges,
|
&TrackBuffer::UpdateBufferedRanges,
|
||||||
mLastAppendRange, /* aNotifyParent */ true)
|
mLastAppendRange, /* aNotifyParent */ true)
|
||||||
->Then(mParentDecoder->GetReader()->TaskQueue(), __func__,
|
->Then(mParentDecoder->GetReader()->OwnerThread(), __func__,
|
||||||
[self] {
|
[self] {
|
||||||
self->mInitializationPromise.ResolveIfExists(self->HasInitSegment(), __func__);
|
self->mInitializationPromise.ResolveIfExists(self->HasInitSegment(), __func__);
|
||||||
},
|
},
|
||||||
@ -348,7 +348,7 @@ TrackBuffer::NotifyTimeRangesChanged()
|
|||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
NS_NewRunnableMethod(mParentDecoder->GetReader(),
|
NS_NewRunnableMethod(mParentDecoder->GetReader(),
|
||||||
&MediaSourceReader::NotifyTimeRangesChanged);
|
&MediaSourceReader::NotifyTimeRangesChanged);
|
||||||
mParentDecoder->GetReader()->TaskQueue()->Dispatch(task.forget());
|
mParentDecoder->GetReader()->OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -363,7 +363,7 @@ TrackBuffer::NotifyReaderDataRemoved(MediaDecoderReader* aReader)
|
|||||||
reader->NotifyDataRemoved();
|
reader->NotifyDataRemoved();
|
||||||
self->UpdateBufferedRanges(Interval<int64_t>(), /* aNotifyParent */ false);
|
self->UpdateBufferedRanges(Interval<int64_t>(), /* aNotifyParent */ false);
|
||||||
});
|
});
|
||||||
aReader->TaskQueue()->Dispatch(task.forget());
|
aReader->OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
class DecoderSorter
|
class DecoderSorter
|
||||||
@ -677,7 +677,7 @@ TrackBuffer::NewDecoder(TimeUnit aTimestampOffset)
|
|||||||
mLastEndTimestamp.reset();
|
mLastEndTimestamp.reset();
|
||||||
mLastTimestampOffset = aTimestampOffset;
|
mLastTimestampOffset = aTimestampOffset;
|
||||||
|
|
||||||
decoder->SetTaskQueue(decoder->GetReader()->TaskQueue());
|
decoder->SetTaskQueue(decoder->GetReader()->OwnerThread());
|
||||||
return decoder.forget();
|
return decoder.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -693,7 +693,7 @@ TrackBuffer::QueueInitializeDecoder(SourceBufferDecoder* aDecoder)
|
|||||||
&TrackBuffer::InitializeDecoder,
|
&TrackBuffer::InitializeDecoder,
|
||||||
aDecoder);
|
aDecoder);
|
||||||
// We need to initialize the reader on its own task queue
|
// We need to initialize the reader on its own task queue
|
||||||
aDecoder->GetReader()->TaskQueue()->Dispatch(task.forget());
|
aDecoder->GetReader()->OwnerThread()->Dispatch(task.forget());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,7 +794,7 @@ TrackBuffer::InitializeDecoder(SourceBufferDecoder* aDecoder)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mMetadataRequest.Begin(promise->Then(reader->TaskQueue(), __func__,
|
mMetadataRequest.Begin(promise->Then(reader->OwnerThread(), __func__,
|
||||||
recipient.get(),
|
recipient.get(),
|
||||||
&MetadataRecipient::OnMetadataRead,
|
&MetadataRecipient::OnMetadataRead,
|
||||||
&MetadataRecipient::OnMetadataNotRead));
|
&MetadataRecipient::OnMetadataNotRead));
|
||||||
@ -865,7 +865,7 @@ void
|
|||||||
TrackBuffer::OnMetadataNotRead(ReadMetadataFailureReason aReason,
|
TrackBuffer::OnMetadataNotRead(ReadMetadataFailureReason aReason,
|
||||||
SourceBufferDecoder* aDecoder)
|
SourceBufferDecoder* aDecoder)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aDecoder->GetReader()->TaskQueue()->IsCurrentThreadIn());
|
MOZ_ASSERT(aDecoder->GetReader()->OwnerThread()->IsCurrentThreadIn());
|
||||||
|
|
||||||
mParentDecoder->GetReentrantMonitor().AssertNotCurrentThreadIn();
|
mParentDecoder->GetReentrantMonitor().AssertNotCurrentThreadIn();
|
||||||
ReentrantMonitorAutoEnter mon(mParentDecoder->GetReentrantMonitor());
|
ReentrantMonitorAutoEnter mon(mParentDecoder->GetReentrantMonitor());
|
||||||
@ -937,10 +937,10 @@ TrackBuffer::CompleteInitializeDecoder(SourceBufferDecoder* aDecoder)
|
|||||||
MSE_DEBUG("Reader %p activated",
|
MSE_DEBUG("Reader %p activated",
|
||||||
aDecoder->GetReader());
|
aDecoder->GetReader());
|
||||||
nsRefPtr<TrackBuffer> self = this;
|
nsRefPtr<TrackBuffer> self = this;
|
||||||
ProxyMediaCall(mParentDecoder->GetReader()->TaskQueue(), this, __func__,
|
ProxyMediaCall(mParentDecoder->GetReader()->OwnerThread(), this, __func__,
|
||||||
&TrackBuffer::UpdateBufferedRanges,
|
&TrackBuffer::UpdateBufferedRanges,
|
||||||
Interval<int64_t>(), /* aNotifyParent */ true)
|
Interval<int64_t>(), /* aNotifyParent */ true)
|
||||||
->Then(mParentDecoder->GetReader()->TaskQueue(), __func__,
|
->Then(mParentDecoder->GetReader()->OwnerThread(), __func__,
|
||||||
[self] {
|
[self] {
|
||||||
self->mInitializationPromise.ResolveIfExists(self->HasInitSegment(), __func__);
|
self->mInitializationPromise.ResolveIfExists(self->HasInitSegment(), __func__);
|
||||||
},
|
},
|
||||||
@ -1196,7 +1196,7 @@ TrackBuffer::RemoveDecoder(SourceBufferDecoder* aDecoder)
|
|||||||
// Remove associated buffered range from our cache.
|
// Remove associated buffered range from our cache.
|
||||||
mReadersBuffered.erase(aDecoder);
|
mReadersBuffered.erase(aDecoder);
|
||||||
}
|
}
|
||||||
aDecoder->GetReader()->TaskQueue()->Dispatch(task.forget());
|
aDecoder->GetReader()->OwnerThread()->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRefPtr<TrackBuffer::RangeRemovalPromise>
|
nsRefPtr<TrackBuffer::RangeRemovalPromise>
|
||||||
@ -1269,10 +1269,10 @@ TrackBuffer::RangeRemoval(TimeUnit aStart, TimeUnit aEnd)
|
|||||||
|
|
||||||
// Make sure our buffered ranges got updated before resolving promise.
|
// Make sure our buffered ranges got updated before resolving promise.
|
||||||
nsRefPtr<TrackBuffer> self = this;
|
nsRefPtr<TrackBuffer> self = this;
|
||||||
ProxyMediaCall(mParentDecoder->GetReader()->TaskQueue(), this, __func__,
|
ProxyMediaCall(mParentDecoder->GetReader()->OwnerThread(), this, __func__,
|
||||||
&TrackBuffer::UpdateBufferedRanges,
|
&TrackBuffer::UpdateBufferedRanges,
|
||||||
Interval<int64_t>(), /* aNotifyParent */ false)
|
Interval<int64_t>(), /* aNotifyParent */ false)
|
||||||
->Then(mParentDecoder->GetReader()->TaskQueue(), __func__,
|
->Then(mParentDecoder->GetReader()->OwnerThread(), __func__,
|
||||||
[self] {
|
[self] {
|
||||||
self->mRangeRemovalPromise.ResolveIfExists(true, __func__);
|
self->mRangeRemovalPromise.ResolveIfExists(true, __func__);
|
||||||
},
|
},
|
||||||
|
@ -682,7 +682,7 @@ MediaCodecReader::AsyncReadMetadata()
|
|||||||
|
|
||||||
nsRefPtr<MediaCodecReader> self = this;
|
nsRefPtr<MediaCodecReader> self = this;
|
||||||
mMediaResourceRequest.Begin(CreateMediaCodecs()
|
mMediaResourceRequest.Begin(CreateMediaCodecs()
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self] (bool) -> void {
|
[self] (bool) -> void {
|
||||||
self->mMediaResourceRequest.Complete();
|
self->mMediaResourceRequest.Complete();
|
||||||
self->HandleResourceAllocated();
|
self->HandleResourceAllocated();
|
||||||
|
@ -121,7 +121,7 @@ MediaOmxCommonDecoder::PauseStateMachine()
|
|||||||
GetStateMachine(),
|
GetStateMachine(),
|
||||||
&MediaDecoderStateMachine::SetDormant,
|
&MediaDecoderStateMachine::SetDormant,
|
||||||
true);
|
true);
|
||||||
GetStateMachine()->TaskQueue()->Dispatch(event.forget());
|
GetStateMachine()->OwnerThread()->Dispatch(event.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -150,7 +150,7 @@ MediaOmxCommonDecoder::ResumeStateMachine()
|
|||||||
GetStateMachine(),
|
GetStateMachine(),
|
||||||
&MediaDecoderStateMachine::Seek,
|
&MediaDecoderStateMachine::Seek,
|
||||||
target);
|
target);
|
||||||
GetStateMachine()->TaskQueue()->Dispatch(event.forget());
|
GetStateMachine()->OwnerThread()->Dispatch(event.forget());
|
||||||
|
|
||||||
mNextState = mPlayState;
|
mNextState = mPlayState;
|
||||||
ChangeState(PLAY_STATE_LOADING);
|
ChangeState(PLAY_STATE_LOADING);
|
||||||
@ -160,7 +160,7 @@ MediaOmxCommonDecoder::ResumeStateMachine()
|
|||||||
GetStateMachine(),
|
GetStateMachine(),
|
||||||
&MediaDecoderStateMachine::SetDormant,
|
&MediaDecoderStateMachine::SetDormant,
|
||||||
false);
|
false);
|
||||||
GetStateMachine()->TaskQueue()->Dispatch(event.forget());
|
GetStateMachine()->OwnerThread()->Dispatch(event.forget());
|
||||||
UpdateLogicalPosition();
|
UpdateLogicalPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ MediaOmxReader::AsyncReadMetadata()
|
|||||||
|
|
||||||
nsRefPtr<MediaOmxReader> self = this;
|
nsRefPtr<MediaOmxReader> self = this;
|
||||||
mMediaResourceRequest.Begin(mOmxDecoder->AllocateMediaResources()
|
mMediaResourceRequest.Begin(mOmxDecoder->AllocateMediaResources()
|
||||||
->Then(TaskQueue(), __func__,
|
->Then(OwnerThread(), __func__,
|
||||||
[self] (bool) -> void {
|
[self] (bool) -> void {
|
||||||
self->mMediaResourceRequest.Complete();
|
self->mMediaResourceRequest.Complete();
|
||||||
self->HandleResourceAllocated();
|
self->HandleResourceAllocated();
|
||||||
@ -539,7 +539,7 @@ MediaOmxReader::Seek(int64_t aTarget, int64_t aEndTime)
|
|||||||
mVideoSeekTimeUs = aTarget;
|
mVideoSeekTimeUs = aTarget;
|
||||||
|
|
||||||
nsRefPtr<MediaOmxReader> self = this;
|
nsRefPtr<MediaOmxReader> self = this;
|
||||||
mSeekRequest.Begin(DecodeToFirstVideoData()->Then(TaskQueue(), __func__, [self] (VideoData* v) {
|
mSeekRequest.Begin(DecodeToFirstVideoData()->Then(OwnerThread(), __func__, [self] (VideoData* v) {
|
||||||
self->mSeekRequest.Complete();
|
self->mSeekRequest.Complete();
|
||||||
self->mAudioSeekTimeUs = v->mTime;
|
self->mAudioSeekTimeUs = v->mTime;
|
||||||
self->mSeekPromise.Resolve(self->mAudioSeekTimeUs, __func__);
|
self->mSeekPromise.Resolve(self->mAudioSeekTimeUs, __func__);
|
||||||
@ -601,7 +601,7 @@ int64_t MediaOmxReader::ProcessCachedData(int64_t aOffset)
|
|||||||
if (OnTaskQueue()) {
|
if (OnTaskQueue()) {
|
||||||
runnable->Run();
|
runnable->Run();
|
||||||
} else {
|
} else {
|
||||||
TaskQueue()->Dispatch(runnable.forget());
|
OwnerThread()->Dispatch(runnable.forget());
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceLength - aOffset - bufferLength;
|
return resourceLength - aOffset - bufferLength;
|
||||||
|
@ -260,7 +260,7 @@ RawReader::Seek(int64_t aTime, int64_t aEndTime)
|
|||||||
MOZ_ASSERT(self->OnTaskQueue());
|
MOZ_ASSERT(self->OnTaskQueue());
|
||||||
return self->mVideoQueue.Peek() &&
|
return self->mVideoQueue.Peek() &&
|
||||||
self->mVideoQueue.Peek()->GetEndTime() >= aTime;
|
self->mVideoQueue.Peek()->GetEndTime() >= aTime;
|
||||||
})->Then(TaskQueue(), __func__, [self, p, aTime] () {
|
})->Then(OwnerThread(), __func__, [self, p, aTime] () {
|
||||||
while (self->mVideoQueue.GetSize() >= 2) {
|
while (self->mVideoQueue.GetSize() >= 2) {
|
||||||
nsRefPtr<VideoData> releaseMe = self->mVideoQueue.PopFront();
|
nsRefPtr<VideoData> releaseMe = self->mVideoQueue.PopFront();
|
||||||
}
|
}
|
||||||
|
@ -245,14 +245,14 @@ MediaDecodeTask::Decode()
|
|||||||
{
|
{
|
||||||
MOZ_ASSERT(!NS_IsMainThread());
|
MOZ_ASSERT(!NS_IsMainThread());
|
||||||
|
|
||||||
mBufferDecoder->BeginDecoding(mDecoderReader->TaskQueue());
|
mBufferDecoder->BeginDecoding(mDecoderReader->OwnerThread());
|
||||||
|
|
||||||
// Tell the decoder reader that we are not going to play the data directly,
|
// Tell the decoder reader that we are not going to play the data directly,
|
||||||
// and that we should not reject files with more channels than the audio
|
// and that we should not reject files with more channels than the audio
|
||||||
// backend support.
|
// backend support.
|
||||||
mDecoderReader->SetIgnoreAudioOutputFormat();
|
mDecoderReader->SetIgnoreAudioOutputFormat();
|
||||||
|
|
||||||
mDecoderReader->AsyncReadMetadata()->Then(mDecoderReader->TaskQueue(), __func__, this,
|
mDecoderReader->AsyncReadMetadata()->Then(mDecoderReader->OwnerThread(), __func__, this,
|
||||||
&MediaDecodeTask::OnMetadataRead,
|
&MediaDecodeTask::OnMetadataRead,
|
||||||
&MediaDecodeTask::OnMetadataNotRead);
|
&MediaDecodeTask::OnMetadataNotRead);
|
||||||
}
|
}
|
||||||
@ -281,7 +281,7 @@ MediaDecodeTask::OnMetadataNotRead(ReadMetadataFailureReason aReason)
|
|||||||
void
|
void
|
||||||
MediaDecodeTask::RequestSample()
|
MediaDecodeTask::RequestSample()
|
||||||
{
|
{
|
||||||
mDecoderReader->RequestAudioData()->Then(mDecoderReader->TaskQueue(), __func__, this,
|
mDecoderReader->RequestAudioData()->Then(mDecoderReader->OwnerThread(), __func__, this,
|
||||||
&MediaDecodeTask::SampleDecoded,
|
&MediaDecodeTask::SampleDecoded,
|
||||||
&MediaDecodeTask::SampleNotDecoded);
|
&MediaDecodeTask::SampleNotDecoded);
|
||||||
}
|
}
|
||||||
@ -504,10 +504,10 @@ AsyncDecodeWebAudio(const char* aContentType, uint8_t* aBuffer,
|
|||||||
NS_DispatchToMainThread(event);
|
NS_DispatchToMainThread(event);
|
||||||
} else {
|
} else {
|
||||||
// If we did this without a temporary:
|
// If we did this without a temporary:
|
||||||
// task->Reader()->TaskQueue()->Dispatch(task.forget())
|
// task->Reader()->OwnerThread()->Dispatch(task.forget())
|
||||||
// we might evaluate the task.forget() before calling Reader(). Enforce
|
// we might evaluate the task.forget() before calling Reader(). Enforce
|
||||||
// a non-crashy order-of-operations.
|
// a non-crashy order-of-operations.
|
||||||
MediaTaskQueue* taskQueue = task->Reader()->TaskQueue();
|
MediaTaskQueue* taskQueue = task->Reader()->OwnerThread();
|
||||||
taskQueue->Dispatch(task.forget());
|
taskQueue->Dispatch(task.forget());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user