Bug 1316211. P15 - remove MDR from the base class of MFR. r=gerald

MozReview-Commit-ID: Jf5pCxkhexg

--HG--
extra : rebase_source : 3ec9423d4d0f3b60ee9e5f6f19af18188530e1d9
extra : source : 4fbc225bfc79abacaf47ffd4405ef2d6711dea32
This commit is contained in:
JW Wang 2017-07-19 22:18:37 +08:00
parent 2e40eb607f
commit ef025c6fcf
16 changed files with 39 additions and 37 deletions

View File

@ -25,7 +25,7 @@ ADTSDecoder::Clone(MediaDecoderInit& aInit)
MediaDecoderStateMachine*
ADTSDecoder::CreateStateMachine()
{
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
mReader = new MediaFormatReader(init, new ADTSDemuxer(mResource));
return new MediaDecoderStateMachine(this, mReader);

View File

@ -292,7 +292,7 @@ DecoderTraits::CreateDecoder(MediaDecoderInit& aInit,
/* static */
MediaFormatReader*
DecoderTraits::CreateReader(const MediaContainerType& aType,
MediaDecoderReaderInit& aInit)
MediaFormatReaderInit& aInit)
{
MOZ_ASSERT(NS_IsMainThread());
MediaFormatReader* decoderReader = nullptr;

View File

@ -19,7 +19,7 @@ class ChannelMediaDecoder;
class DecoderDoctorDiagnostics;
class MediaContainerType;
struct MediaDecoderInit;
struct MediaDecoderReaderInit;
struct MediaFormatReaderInit;
class MediaDecoderOwner;
class MediaFormatReader;
class MediaResource;
@ -52,7 +52,7 @@ public:
// Create a reader for thew given MIME type aType. Returns null
// if we were unable to create the reader.
static MediaFormatReader* CreateReader(const MediaContainerType& aType,
MediaDecoderReaderInit& aInit);
MediaFormatReaderInit& aInit);
// Returns true if MIME type aType is supported in video documents,
// or false otherwise. Not all platforms support all MIME types, and

View File

@ -37,7 +37,7 @@ extern LazyLogModule gMediaDecoderLog;
#define DECODER_LOG(...) MOZ_LOG(gMediaDecoderLog, LogLevel::Debug, (FMT(__VA_ARGS__)))
#define DECODER_WARN(...) NS_WARNING(nsPrintfCString(FMT(__VA_ARGS__)).get())
MediaDecoderReader::MediaDecoderReader(MediaDecoderReaderInit& aInit)
MediaDecoderReader::MediaDecoderReader()
{
MOZ_COUNT_CTOR(MediaDecoderReader);
MOZ_ASSERT(NS_IsMainThread());

View File

@ -29,20 +29,6 @@ class MediaDecoderReader;
class TaskQueue;
class VideoFrameContainer;
struct MOZ_STACK_CLASS MediaDecoderReaderInit
{
AbstractMediaDecoder* const mDecoder;
MediaResource* mResource = nullptr;
VideoFrameContainer* mVideoFrameContainer = nullptr;
already_AddRefed<layers::KnowsCompositor> mKnowsCompositor;
already_AddRefed<GMPCrashHelper> mCrashHelper;
explicit MediaDecoderReaderInit(AbstractMediaDecoder* aDecoder)
: mDecoder(aDecoder)
{
}
};
// Encapsulates the decoding and reading of media data. Reading can either
// synchronous and done on the calling "decode" thread, or asynchronous and
// performed on a background thread, with the result being returned by
@ -56,7 +42,7 @@ public:
// The caller must ensure that Shutdown() is called before aDecoder is
// destroyed.
explicit MediaDecoderReader(MediaDecoderReaderInit& aInit);
MediaDecoderReader();
protected:
virtual ~MediaDecoderReader();

View File

@ -1093,10 +1093,9 @@ MediaFormatReader::DemuxerProxy::NotifyDataArrived()
});
}
MediaFormatReader::MediaFormatReader(MediaDecoderReaderInit& aInit,
MediaFormatReader::MediaFormatReader(MediaFormatReaderInit& aInit,
MediaDataDemuxer* aDemuxer)
: MediaDecoderReader(aInit)
, mTaskQueue(new TaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
: mTaskQueue(new TaskQueue(GetMediaThreadPool(MediaThreadType::PLAYBACK),
"MediaFormatReader::mTaskQueue",
/* aSupportsTailDispatch = */ true))
, mAudio(this, MediaData::AUDIO_DATA, MediaPrefs::MaxAudioDecodeError())

View File

@ -14,7 +14,6 @@
#include "MediaEventSource.h"
#include "MediaDataDemuxer.h"
#include "MediaDecoderReader.h"
#include "MediaPrefs.h"
#include "nsAutoPtr.h"
#include "PDMFactory.h"
@ -22,6 +21,8 @@
namespace mozilla {
class CDMProxy;
class GMPCrashHelper;
class VideoFrameContainer;
struct WaitForDataRejectValue
{
@ -67,12 +68,28 @@ struct MetadataHolder
UniquePtr<MetadataTags> mTags;
};
class MediaFormatReader final : public MediaDecoderReader
struct MOZ_STACK_CLASS MediaFormatReaderInit
{
AbstractMediaDecoder* const mDecoder;
MediaResource* mResource = nullptr;
VideoFrameContainer* mVideoFrameContainer = nullptr;
already_AddRefed<layers::KnowsCompositor> mKnowsCompositor;
already_AddRefed<GMPCrashHelper> mCrashHelper;
explicit MediaFormatReaderInit(AbstractMediaDecoder* aDecoder)
: mDecoder(aDecoder)
{
}
};
class MediaFormatReader final
{
static const bool IsExclusive = true;
typedef TrackInfo::TrackType TrackType;
typedef MozPromise<bool, MediaResult, IsExclusive> NotifyDataArrivedPromise;
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaFormatReader)
public:
using TrackSet = EnumSet<TrackInfo::TrackType>;
using MetadataPromise = MozPromise<MetadataHolder, MediaResult, IsExclusive>;
@ -91,9 +108,7 @@ public:
using WaitForDataPromise =
MozPromise<MediaData::Type, WaitForDataRejectValue, IsExclusive>;
MediaFormatReader(MediaDecoderReaderInit& aInit, MediaDataDemuxer* aDemuxer);
virtual ~MediaFormatReader();
MediaFormatReader(MediaFormatReaderInit& aInit, MediaDataDemuxer* aDemuxer);
// Initializes the reader, returns NS_OK on success, or NS_ERROR_FAILURE
// on failure.
@ -238,6 +253,8 @@ public:
MediaEventSource<MediaResult>& OnDecodeWarning() { return mOnDecodeWarning; }
private:
~MediaFormatReader();
bool HasVideo() const { return mVideo.mTrackDemuxer; }
bool HasAudio() const { return mAudio.mTrackDemuxer; }

View File

@ -26,7 +26,7 @@ FlacDecoder::Clone(MediaDecoderInit& aInit)
MediaDecoderStateMachine*
FlacDecoder::CreateStateMachine()
{
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
mReader = new MediaFormatReader(init, new FlacDemuxer(mResource));
return new MediaDecoderStateMachine(this, mReader);

View File

@ -32,7 +32,7 @@ MP4Decoder::MP4Decoder(MediaDecoderInit& aInit)
MediaDecoderStateMachine* MP4Decoder::CreateStateMachine()
{
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();

View File

@ -28,7 +28,7 @@ HLSDecoder::CreateStateMachine()
MOZ_ASSERT(resource);
auto resourceWrapper = static_cast<HLSResource*>(resource)->GetResourceWrapper();
MOZ_ASSERT(resourceWrapper);
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();

View File

@ -39,7 +39,7 @@ MediaSourceDecoder::CreateStateMachine()
{
MOZ_ASSERT(NS_IsMainThread());
mDemuxer = new MediaSourceDemuxer(AbstractMainThread());
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();

View File

@ -26,7 +26,7 @@ MP3Decoder::Clone(MediaDecoderInit& aInit)
MediaDecoderStateMachine*
MP3Decoder::CreateStateMachine() {
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
mReader = new MediaFormatReader(init, new MP3Demuxer(mResource));
return new MediaDecoderStateMachine(this, mReader);

View File

@ -16,7 +16,7 @@ namespace mozilla {
MediaDecoderStateMachine* OggDecoder::CreateStateMachine()
{
RefPtr<OggDemuxer> demuxer = new OggDemuxer(mResource);
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();

View File

@ -22,7 +22,7 @@ WaveDecoder::Clone(MediaDecoderInit& aInit)
MediaDecoderStateMachine*
WaveDecoder::CreateStateMachine()
{
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();
mReader = new MediaFormatReader(init, new WAVDemuxer(mResource));
return new MediaDecoderStateMachine(this, mReader);

View File

@ -197,7 +197,7 @@ MediaDecodeTask::CreateReader()
// If you change this list to add support for new decoders, please consider
// updating HTMLMediaElement::CreateDecoder as well.
MediaDecoderReaderInit init(mBufferDecoder);
MediaFormatReaderInit init(mBufferDecoder);
init.mResource = resource;
mDecoderReader = DecoderTraits::CreateReader(mContainerType, init);

View File

@ -18,7 +18,7 @@ namespace mozilla {
MediaDecoderStateMachine* WebMDecoder::CreateStateMachine()
{
MediaDecoderReaderInit init(this);
MediaFormatReaderInit init(this);
init.mVideoFrameContainer = GetVideoFrameContainer();
init.mKnowsCompositor = GetCompositor();
init.mCrashHelper = GetOwner()->CreateGMPCrashHelper();