From 438db3774697bc1209a3164ba59c5f53e5c2aafa Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Fri, 25 Jan 2013 16:39:51 -0500 Subject: [PATCH] Bug 804387. Part 10: Add a mechanism for ensuring that we don't attempt to allocate an input port if the input node is not hooked up to MSG yet. r=roc --HG-- extra : rebase_source : dc3a202cbb94c266f6df4b0c1b5247522fc76658 --- content/media/webaudio/AudioBufferSourceNode.h | 4 ++++ content/media/webaudio/AudioNode.cpp | 14 ++++++++------ content/media/webaudio/AudioNode.h | 7 +++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/content/media/webaudio/AudioBufferSourceNode.h b/content/media/webaudio/AudioBufferSourceNode.h index e6abdd46aef..9836b6529ae 100644 --- a/content/media/webaudio/AudioBufferSourceNode.h +++ b/content/media/webaudio/AudioBufferSourceNode.h @@ -28,6 +28,10 @@ public: } AudioSourceNode::DestroyMediaStream(); } + virtual bool SupportsMediaStreams() const MOZ_OVERRIDE + { + return true; + } NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AudioBufferSourceNode, AudioSourceNode) diff --git a/content/media/webaudio/AudioNode.cpp b/content/media/webaudio/AudioNode.cpp index 965a46ed9f4..424fe98c0d5 100644 --- a/content/media/webaudio/AudioNode.cpp +++ b/content/media/webaudio/AudioNode.cpp @@ -165,12 +165,14 @@ AudioNode::Connect(AudioNode& aDestination, uint32_t aOutput, input->mInputNode = this; input->mInputPort = aInput; input->mOutputPort = aOutput; - // Connect streams in the MediaStreamGraph - MOZ_ASSERT(aDestination.mStream->AsProcessedStream()); - ProcessedMediaStream* ps = - static_cast(aDestination.mStream.get()); - input->mStreamPort = - ps->AllocateInputPort(mStream, MediaInputPort::FLAG_BLOCK_OUTPUT); + if (SupportsMediaStreams() && aDestination.mStream) { + // Connect streams in the MediaStreamGraph + MOZ_ASSERT(aDestination.mStream->AsProcessedStream()); + ProcessedMediaStream* ps = + static_cast(aDestination.mStream.get()); + input->mStreamPort = + ps->AllocateInputPort(mStream, MediaInputPort::FLAG_BLOCK_OUTPUT); + } } void diff --git a/content/media/webaudio/AudioNode.h b/content/media/webaudio/AudioNode.h index 2c0c098d09c..82bb073ae28 100644 --- a/content/media/webaudio/AudioNode.h +++ b/content/media/webaudio/AudioNode.h @@ -60,6 +60,13 @@ public: } } + // This method should be overridden to return true in nodes + // which support being hooked up to the Media Stream graph. + virtual bool SupportsMediaStreams() const + { + return false; + } + NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_CLASS(AudioNode)