#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)
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());
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);
}
}
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()
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(¶m);
}
-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(¶m);
}
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()
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;
}
}
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)