Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / webaudio / AudioNodeOutput.cpp
index ef7a7ab..c7f90ac 100644 (file)
@@ -32,9 +32,9 @@
 #include "modules/webaudio/AudioNodeInput.h"
 #include "wtf/Threading.h"
 
-namespace WebCore {
+namespace blink {
 
-AudioNodeOutput::AudioNodeOutput(AudioNode* node, unsigned numberOfChannels)
+inline AudioNodeOutput::AudioNodeOutput(AudioNode* node, unsigned numberOfChannels)
     : m_node(node)
     , m_numberOfChannels(numberOfChannels)
     , m_desiredNumberOfChannels(numberOfChannels)
@@ -48,6 +48,20 @@ AudioNodeOutput::AudioNodeOutput(AudioNode* node, unsigned numberOfChannels)
     m_internalBus = AudioBus::create(numberOfChannels, AudioNode::ProcessingSizeInFrames);
 }
 
+PassOwnPtrWillBeRawPtr<AudioNodeOutput> AudioNodeOutput::create(AudioNode* node, unsigned numberOfChannels)
+{
+    return adoptPtrWillBeNoop(new AudioNodeOutput(node, numberOfChannels));
+}
+
+void AudioNodeOutput::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+    visitor->trace(m_node);
+    visitor->trace(m_inputs);
+    visitor->trace(m_params);
+#endif
+}
+
 void AudioNodeOutput::setNumberOfChannels(unsigned numberOfChannels)
 {
     ASSERT(numberOfChannels <= AudioContext::maxNumberOfChannels());
@@ -96,11 +110,8 @@ void AudioNodeOutput::propagateChannelCount()
 
     if (isChannelCountKnown()) {
         // Announce to any nodes we're connected to that we changed our channel count for its input.
-        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i) {
-            AudioNodeInput* input = *i;
-            AudioNode* connectionNode = input->node();
-            connectionNode->checkNumberOfChannelsForInput(input);
-        }
+        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i)
+            i->value->checkNumberOfChannelsForInput(i->key);
     }
 }
 
@@ -146,26 +157,18 @@ unsigned AudioNodeOutput::renderingFanOutCount() const
     return m_renderingFanOutCount;
 }
 
-void AudioNodeOutput::addInput(AudioNodeInput* input)
+void AudioNodeOutput::addInput(AudioNodeInput& input)
 {
     ASSERT(context()->isGraphOwner());
-
-    ASSERT(input);
-    if (!input)
-        return;
-
-    m_inputs.add(input);
+    m_inputs.add(&input, &input.node());
+    input.node().makeConnection();
 }
 
-void AudioNodeOutput::removeInput(AudioNodeInput* input)
+void AudioNodeOutput::removeInput(AudioNodeInput& input)
 {
     ASSERT(context()->isGraphOwner());
-
-    ASSERT(input);
-    if (!input)
-        return;
-
-    m_inputs.remove(input);
+    input.node().breakConnection();
+    m_inputs.remove(&input);
 }
 
 void AudioNodeOutput::disconnectAllInputs()
@@ -173,32 +176,20 @@ void AudioNodeOutput::disconnectAllInputs()
     ASSERT(context()->isGraphOwner());
 
     // AudioNodeInput::disconnect() changes m_inputs by calling removeInput().
-    while (!m_inputs.isEmpty()) {
-        AudioNodeInput* input = *m_inputs.begin();
-        input->disconnect(this);
-    }
+    while (!m_inputs.isEmpty())
+        m_inputs.begin()->key->disconnect(*this);
 }
 
-void AudioNodeOutput::addParam(AudioParam* param)
+void AudioNodeOutput::addParam(AudioParam& param)
 {
     ASSERT(context()->isGraphOwner());
-
-    ASSERT(param);
-    if (!param)
-        return;
-
-    m_params.add(param);
+    m_params.add(&param);
 }
 
-void AudioNodeOutput::removeParam(AudioParam* param)
+void AudioNodeOutput::removeParam(AudioParam& param)
 {
     ASSERT(context()->isGraphOwner());
-
-    ASSERT(param);
-    if (!param)
-        return;
-
-    m_params.remove(param);
+    m_params.remove(&param);
 }
 
 void AudioNodeOutput::disconnectAllParams()
@@ -206,10 +197,8 @@ void AudioNodeOutput::disconnectAllParams()
     ASSERT(context()->isGraphOwner());
 
     // AudioParam::disconnect() changes m_params by calling removeParam().
-    while (!m_params.isEmpty()) {
-        AudioParam* param = m_params.begin()->get();
-        param->disconnect(this);
-    }
+    while (!m_params.isEmpty())
+        (*m_params.begin())->disconnect(*this);
 }
 
 void AudioNodeOutput::disconnectAll()
@@ -223,10 +212,8 @@ void AudioNodeOutput::disable()
     ASSERT(context()->isGraphOwner());
 
     if (m_isEnabled) {
-        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i) {
-            AudioNodeInput* input = *i;
-            input->disable(this);
-        }
+        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i)
+            i->key->disable(*this);
         m_isEnabled = false;
     }
 }
@@ -236,14 +223,12 @@ void AudioNodeOutput::enable()
     ASSERT(context()->isGraphOwner());
 
     if (!m_isEnabled) {
-        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i) {
-            AudioNodeInput* input = *i;
-            input->enable(this);
-        }
+        for (InputsIterator i = m_inputs.begin(); i != m_inputs.end(); ++i)
+            i->key->enable(*this);
         m_isEnabled = true;
     }
 }
 
-} // namespace WebCore
+} // namespace blink
 
 #endif // ENABLE(WEB_AUDIO)