Bug 1266304. Part 2 - remove unnecessary template parameters. r=kaku.

MozReview-Commit-ID: E2TnNbMvJaR
This commit is contained in:
JW Wang 2016-04-22 14:16:56 +08:00
Родитель 69b738fc15
Коммит 67a95734d1
2 изменённых файлов: 11 добавлений и 17 удалений

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

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