Bug 1214989. Part 2 - add MediaDecoderOwner to Clone() and overrides. r=gerald.

This commit is contained in:
JW Wang 2015-10-15 11:37:47 +08:00
parent 31039842e1
commit 78f4511dfc
24 changed files with 40 additions and 36 deletions

View File

@ -2758,7 +2758,7 @@ nsresult HTMLMediaElement::InitializeDecoderAsClone(MediaDecoder* aOriginal)
MediaResource* originalResource = aOriginal->GetResource();
if (!originalResource)
return NS_ERROR_FAILURE;
nsRefPtr<MediaDecoder> decoder = aOriginal->Clone();
nsRefPtr<MediaDecoder> decoder = aOriginal->Clone(this);
if (!decoder)
return NS_ERROR_FAILURE;

View File

@ -15,11 +15,11 @@
namespace mozilla {
MediaDecoder*
MP3Decoder::Clone() {
MP3Decoder::Clone(MediaDecoderOwner* aOwner) {
if (!IsEnabled()) {
return nullptr;
}
return new MP3Decoder();
return new MP3Decoder(aOwner);
}
MediaDecoderStateMachine*

View File

@ -14,7 +14,7 @@ class MP3Decoder : public MediaDecoder {
public:
// MediaDecoder interface.
explicit MP3Decoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {}
MediaDecoder* Clone() override;
MediaDecoder* Clone(MediaDecoderOwner* aOwner) override;
MediaDecoderStateMachine* CreateStateMachine() override;
// Returns true if the MP3 backend is preffed on, and we're running on a

View File

@ -306,7 +306,7 @@ public:
virtual void ResetConnectionState();
// Create a new decoder of the same type as this one.
// Subclasses must implement this.
virtual MediaDecoder* Clone() = 0;
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) = 0;
// Create a new state machine to run this decoder.
// Subclasses must implement this.
virtual MediaDecoderStateMachine* CreateStateMachine() = 0;

View File

@ -22,7 +22,9 @@ public:
return NS_OK;
}
virtual MediaDecoder* Clone() { return new AndroidMediaDecoder(mType); }
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) {
return new AndroidMediaDecoder(aOwner, mType);
}
virtual MediaDecoderStateMachine* CreateStateMachine();
};

View File

@ -15,9 +15,9 @@ AppleDecoder::AppleDecoder(MediaDecoderOwner* aOwner)
}
MediaDecoder *
AppleDecoder::Clone()
AppleDecoder::Clone(MediaDecoderOwner* aOwner)
{
return new AppleDecoder();
return new AppleDecoder(aOwner);
}
MediaDecoderStateMachine *

View File

@ -14,7 +14,7 @@ class AppleDecoder : public MediaDecoder
public:
explicit AppleDecoder(MediaDecoderOwner* aOwner);
virtual MediaDecoder* Clone() override;
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override;
virtual MediaDecoderStateMachine* CreateStateMachine() override;
};

View File

@ -19,11 +19,11 @@ public:
explicit DirectShowDecoder(MediaDecoderOwner* aOwner);
virtual ~DirectShowDecoder();
MediaDecoder* Clone() override {
MediaDecoder* Clone(MediaDecoderOwner* aOwner) override {
if (!IsEnabled()) {
return nullptr;
}
return new DirectShowDecoder();
return new DirectShowDecoder(aOwner);
}
MediaDecoderStateMachine* CreateStateMachine() override;

View File

@ -16,11 +16,11 @@ class MP4Decoder : public MediaDecoder
public:
explicit MP4Decoder(MediaDecoderOwner* aOwner);
virtual MediaDecoder* Clone() override {
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override {
if (!IsEnabled()) {
return nullptr;
}
return new MP4Decoder();
return new MP4Decoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine() override;

View File

@ -16,7 +16,9 @@ class GStreamerDecoder : public MediaDecoder
{
public:
explicit GStreamerDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {}
virtual MediaDecoder* Clone() { return new GStreamerDecoder(); }
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) {
return new GStreamerDecoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine();
static bool CanHandleMediaType(const nsACString& aMIMEType, const nsAString* aCodecs);
};

View File

@ -35,7 +35,7 @@ MediaSourceDecoder::MediaSourceDecoder(dom::HTMLMediaElement* aElement)
}
MediaDecoder*
MediaSourceDecoder::Clone()
MediaSourceDecoder::Clone(MediaDecoderOwner* aOwner)
{
// TODO: Sort out cloning.
return nullptr;

View File

@ -36,7 +36,7 @@ class MediaSourceDecoder : public MediaDecoder
public:
explicit MediaSourceDecoder(dom::HTMLMediaElement* aElement);
virtual MediaDecoder* Clone() override;
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override;
virtual MediaDecoderStateMachine* CreateStateMachine() override;
virtual nsresult Load(nsIStreamListener**) override;
virtual media::TimeIntervals GetSeekable() override;

View File

@ -19,11 +19,11 @@ public:
, mShutdownBit(false)
{}
virtual MediaDecoder* Clone() override {
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override {
if (!IsOggEnabled()) {
return nullptr;
}
return new OggDecoder();
return new OggDecoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine() override;

View File

@ -12,9 +12,9 @@
namespace mozilla {
MediaDecoder*
MediaCodecDecoder::Clone()
MediaCodecDecoder::Clone(MediaDecoderOwner* aOwner)
{
return new MediaCodecDecoder();
return new MediaCodecDecoder(aOwner);
}
MediaOmxCommonReader*

View File

@ -18,7 +18,7 @@ public:
explicit MediaCodecDecoder(MediaDecoderOwner* aOwner)
: MediaOmxCommonDecoder(aOwner) {}
virtual MediaDecoder* Clone();
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner);
virtual MediaOmxCommonReader* CreateReader();

View File

@ -13,9 +13,9 @@ using namespace android;
namespace mozilla {
MediaDecoder*
MediaOmxDecoder::Clone()
MediaOmxDecoder::Clone(MediaDecoderOwner* aOwner)
{
return new MediaOmxDecoder();
return new MediaOmxDecoder(aOwner);
}
MediaOmxCommonReader*

View File

@ -15,7 +15,7 @@ class MediaOmxDecoder : public MediaOmxCommonDecoder
public:
explicit MediaOmxDecoder(MediaDecoderOwner* aOwner)
: MediaOmxCommonDecoder(aOwner) {}
virtual MediaDecoder* Clone();
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner);
virtual MediaOmxCommonReader* CreateReader();
virtual MediaDecoderStateMachine* CreateStateMachineFromReader(MediaOmxCommonReader* aReader);
};

View File

@ -13,9 +13,9 @@
namespace mozilla {
MediaDecoder*
RtspMediaCodecDecoder::Clone()
RtspMediaCodecDecoder::Clone(MediaDecoderOwner* aOwner)
{
return new RtspMediaCodecDecoder();
return new RtspMediaCodecDecoder(aOwner);
}
MediaOmxCommonReader*

View File

@ -17,7 +17,7 @@ public:
explicit RtspMediaCodecDecoder(MediaDecoderOwner* aOwner)
: MediaOmxCommonDecoder(aOwner) {}
virtual MediaDecoder* Clone() override;
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override;
virtual MediaOmxCommonReader* CreateReader() override;

View File

@ -11,9 +11,9 @@
namespace mozilla {
MediaDecoder* RtspOmxDecoder::Clone()
MediaDecoder* RtspOmxDecoder::Clone(MediaDecoderOwner* aOwner)
{
return new RtspOmxDecoder();
return new RtspOmxDecoder(aOwner);
}
MediaDecoderStateMachine*

View File

@ -29,7 +29,7 @@ public:
MOZ_COUNT_DTOR(RtspOmxDecoder);
}
virtual MediaDecoder* Clone() override final;
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) override final;
virtual MediaDecoderStateMachine* CreateStateMachine() override final;
virtual void ChangeState(PlayState aState) override final;
};

View File

@ -13,11 +13,11 @@ class RawDecoder : public MediaDecoder
{
public:
explicit RawDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {}
virtual MediaDecoder* Clone() {
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) {
if (!IsRawEnabled()) {
return nullptr;
}
return new RawDecoder();
return new RawDecoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine();
};

View File

@ -25,11 +25,11 @@ class WaveDecoder : public MediaDecoder
{
public:
explicit WaveDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {}
virtual MediaDecoder* Clone() {
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) {
if (!IsWaveEnabled()) {
return nullptr;
}
return new WaveDecoder();
return new WaveDecoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine();
};

View File

@ -14,11 +14,11 @@ class WebMDecoder : public MediaDecoder
{
public:
explicit WebMDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {}
virtual MediaDecoder* Clone() {
virtual MediaDecoder* Clone(MediaDecoderOwner* aOwner) {
if (!IsWebMEnabled()) {
return nullptr;
}
return new WebMDecoder();
return new WebMDecoder(aOwner);
}
virtual MediaDecoderStateMachine* CreateStateMachine();
};