зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1266304. Part 2 - remove unnecessary template parameters. r=kaku.
MozReview-Commit-ID: E2TnNbMvJaR
This commit is contained in:
Родитель
69b738fc15
Коммит
67a95734d1
|
@ -19,6 +19,7 @@ extern LazyLogModule gMediaDecoderLog;
|
||||||
// until it gets a sample from both channels, such that we can be guaranteed
|
// until it gets a sample from both channels, such that we can be guaranteed
|
||||||
// to know the start time by the time On{Audio,Video}Decoded is called on MDSM.
|
// to know the start time by the time On{Audio,Video}Decoded is called on MDSM.
|
||||||
class StartTimeRendezvous {
|
class StartTimeRendezvous {
|
||||||
|
typedef MediaDecoderReader::MediaDataPromise MediaDataPromise;
|
||||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(StartTimeRendezvous);
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(StartTimeRendezvous);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -56,23 +57,17 @@ public:
|
||||||
return mHaveStartTimePromise.Ensure(__func__);
|
return mHaveStartTimePromise.Ensure(__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename PromiseType>
|
template<MediaData::Type SampleType>
|
||||||
struct PromiseSampleType {
|
RefPtr<MediaDataPromise>
|
||||||
typedef typename PromiseType::ResolveValueType::element_type Type;
|
ProcessFirstSample(MediaData* aData)
|
||||||
};
|
|
||||||
|
|
||||||
template<typename PromiseType, MediaData::Type SampleType>
|
|
||||||
RefPtr<PromiseType>
|
|
||||||
ProcessFirstSample(typename PromiseSampleType<PromiseType>::Type* aData)
|
|
||||||
{
|
{
|
||||||
typedef typename PromiseSampleType<PromiseType>::Type DataType;
|
typedef typename MediaDataPromise::Private PromisePrivate;
|
||||||
typedef typename PromiseType::Private PromisePrivate;
|
|
||||||
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
|
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
|
||||||
|
|
||||||
MaybeSetChannelStartTime<SampleType>(aData->mTime);
|
MaybeSetChannelStartTime<SampleType>(aData->mTime);
|
||||||
|
|
||||||
RefPtr<PromisePrivate> p = new PromisePrivate(__func__);
|
RefPtr<PromisePrivate> p = new PromisePrivate(__func__);
|
||||||
RefPtr<DataType> data = aData;
|
RefPtr<MediaData> data = aData;
|
||||||
RefPtr<StartTimeRendezvous> self = this;
|
RefPtr<StartTimeRendezvous> self = this;
|
||||||
AwaitStartTime()->Then(
|
AwaitStartTime()->Then(
|
||||||
mOwnerThread, __func__,
|
mOwnerThread, __func__,
|
||||||
|
@ -194,7 +189,7 @@ MediaDecoderReaderWrapper::RequestAudioData()
|
||||||
|
|
||||||
if (!mStartTimeRendezvous->HaveStartTime()) {
|
if (!mStartTimeRendezvous->HaveStartTime()) {
|
||||||
p = p->Then(mOwnerThread, __func__, mStartTimeRendezvous.get(),
|
p = p->Then(mOwnerThread, __func__, mStartTimeRendezvous.get(),
|
||||||
&StartTimeRendezvous::ProcessFirstSample<MediaDataPromise, MediaData::AUDIO_DATA>,
|
&StartTimeRendezvous::ProcessFirstSample<MediaData::AUDIO_DATA>,
|
||||||
&StartTimeRendezvous::FirstSampleRejected<MediaData::AUDIO_DATA>)
|
&StartTimeRendezvous::FirstSampleRejected<MediaData::AUDIO_DATA>)
|
||||||
->CompletionPromise();
|
->CompletionPromise();
|
||||||
}
|
}
|
||||||
|
@ -223,7 +218,7 @@ MediaDecoderReaderWrapper::RequestVideoData(bool aSkipToNextKeyframe,
|
||||||
|
|
||||||
if (!mStartTimeRendezvous->HaveStartTime()) {
|
if (!mStartTimeRendezvous->HaveStartTime()) {
|
||||||
p = p->Then(mOwnerThread, __func__, mStartTimeRendezvous.get(),
|
p = p->Then(mOwnerThread, __func__, mStartTimeRendezvous.get(),
|
||||||
&StartTimeRendezvous::ProcessFirstSample<MediaDataPromise, MediaData::VIDEO_DATA>,
|
&StartTimeRendezvous::ProcessFirstSample<MediaData::VIDEO_DATA>,
|
||||||
&StartTimeRendezvous::FirstSampleRejected<MediaData::VIDEO_DATA>)
|
&StartTimeRendezvous::FirstSampleRejected<MediaData::VIDEO_DATA>)
|
||||||
->CompletionPromise();
|
->CompletionPromise();
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,7 +366,6 @@ private:
|
||||||
RefPtr<SharedTrackInfo> mInfo;
|
RefPtr<SharedTrackInfo> mInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename PromiseType>
|
|
||||||
struct DecoderDataWithPromise : public DecoderData {
|
struct DecoderDataWithPromise : public DecoderData {
|
||||||
DecoderDataWithPromise(MediaFormatReader* aOwner,
|
DecoderDataWithPromise(MediaFormatReader* aOwner,
|
||||||
MediaData::Type aType,
|
MediaData::Type aType,
|
||||||
|
@ -374,7 +373,7 @@ private:
|
||||||
DecoderData(aOwner, aType, aDecodeAhead)
|
DecoderData(aOwner, aType, aDecodeAhead)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
MozPromiseHolder<PromiseType> mPromise;
|
MozPromiseHolder<MediaDataPromise> mPromise;
|
||||||
|
|
||||||
bool HasPromise() override
|
bool HasPromise() override
|
||||||
{
|
{
|
||||||
|
@ -391,8 +390,8 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
DecoderDataWithPromise<MediaDataPromise> mAudio;
|
DecoderDataWithPromise mAudio;
|
||||||
DecoderDataWithPromise<MediaDataPromise> mVideo;
|
DecoderDataWithPromise mVideo;
|
||||||
|
|
||||||
// Returns true when the decoder for this track needs input.
|
// Returns true when the decoder for this track needs input.
|
||||||
bool NeedInput(DecoderData& aDecoder);
|
bool NeedInput(DecoderData& aDecoder);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче