void AudioNodeInput::disconnect(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());

    ASSERT(output && node());
    if (!output || !node())
        return;

    // First try to disconnect from "active" connections.
    if (m_outputs.remove(output)) {
        changedOutputs();
        output->removeInput(this);
        node()->deref(AudioNode::RefTypeConnection); // Note: it's important to return immediately after all deref() calls since the node may be deleted.
        return;
    }
    
    // Otherwise, try to disconnect from disabled connections.
    if (m_disabledOutputs.remove(output)) {
        output->removeInput(this);
        node()->deref(AudioNode::RefTypeConnection); // Note: it's important to return immediately after all deref() calls since the node may be deleted.
        return;
    }

    ASSERT_NOT_REACHED();
}
void AudioParamHandler::disconnect(AudioNodeOutput& output)
{
    ASSERT(deferredTaskHandler().isGraphOwner());

    if (m_outputs.contains(&output)) {
        m_outputs.remove(&output);
        changedOutputs();
        output.removeParam(*this);
    }
}
void AudioParamHandler::connect(AudioNodeOutput& output)
{
    ASSERT(deferredTaskHandler().isGraphOwner());

    if (m_outputs.contains(&output))
        return;

    output.addParam(*this);
    m_outputs.add(&output);
    changedOutputs();
}
Exemple #4
0
void AudioNodeInput::disable(AudioNodeOutput& output) {
  ASSERT(deferredTaskHandler().isGraphOwner());
  DCHECK(m_outputs.contains(&output));

  m_disabledOutputs.add(&output);
  m_outputs.remove(&output);
  changedOutputs();

  // Propagate disabled state to outputs.
  handler().disableOutputsIfNecessary();
}
Exemple #5
0
void AudioNodeInput::connect(AudioNodeOutput& output) {
  ASSERT(deferredTaskHandler().isGraphOwner());

  // Check if we're already connected to this output.
  if (m_outputs.contains(&output))
    return;

  output.addInput(*this);
  m_outputs.add(&output);
  changedOutputs();
}
Exemple #6
0
void AudioParam::disconnect(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());

    ASSERT(output);
    if (!output)
        return;

    if (m_outputs.remove(output)) {
        changedOutputs();
        output->removeParam(this);
    }
}
Exemple #7
0
void AudioParam::connect(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());

    ASSERT(output);
    if (!output)
        return;

    if (!m_outputs.add(output).isNewEntry)
        return;

    output->addParam(this);
    changedOutputs();
}
Exemple #8
0
void AudioNodeInput::enable(AudioNodeOutput& output) {
  ASSERT(deferredTaskHandler().isGraphOwner());

  // Move output from disabled list to active list.
  m_outputs.add(&output);
  if (m_disabledOutputs.size() > 0) {
    DCHECK(m_disabledOutputs.contains(&output));
    m_disabledOutputs.remove(&output);
  }
  changedOutputs();

  // Propagate enabled state to outputs.
  handler().enableOutputsIfNecessary();
}
void AudioNodeInput::disable(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());

    ASSERT(output && node());
    if (!output || !node())
        return;

    ASSERT(m_outputs.contains(output));
    
    m_disabledOutputs.add(output);
    m_outputs.remove(output);
    changedOutputs();

    // Propagate disabled state to outputs.
    node()->disableOutputsIfNecessary();
}
Exemple #10
0
void AudioNodeInput::disable(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());

    ASSERT(output && node());
    if (!output || !node())
        return;

    ASSERT(m_outputs.contains(output));
    
    m_disabledOutputs.add(output);
    m_outputs.remove(output);
    changedOutputs();

    node()->ref(AudioNode::RefTypeDisabled);
    node()->deref(AudioNode::RefTypeConnection); // Note: it's important to return immediately after all deref() calls since the node may be deleted.
}
Exemple #11
0
void AudioNodeInput::connect(AudioNodeOutput* output)
{
    ASSERT(context()->isGraphOwner());
    
    ASSERT(output && node());
    if (!output || !node())
        return;

    // Check if we're already connected to this output.
    if (!m_outputs.add(output).isNewEntry)
        return;
        
    output->addInput(this);
    changedOutputs();

    // Sombody has just connected to us, so count it as a reference.
    node()->ref(AudioNode::RefTypeConnection);
}
void AudioNodeInput::enable(AudioNodeOutput* output)
{
    ASSERT(context().isGraphOwner());

    ASSERT(output && node());
    if (!output || !node())
        return;

    ASSERT(m_disabledOutputs.contains(output));

    // Move output from disabled list to active list.
    m_outputs.add(output);
    m_disabledOutputs.remove(output);
    changedOutputs();

    // Propagate enabled state to outputs.
    node()->enableOutputsIfNecessary();
}
Exemple #13
0
void AudioNodeInput::disconnect(AudioNodeOutput& output) {
  ASSERT(deferredTaskHandler().isGraphOwner());

  // First try to disconnect from "active" connections.
  if (m_outputs.contains(&output)) {
    m_outputs.remove(&output);
    changedOutputs();
    output.removeInput(*this);
    // Note: it's important to return immediately after removeInput() calls
    // since the node may be deleted.
    return;
  }

  // Otherwise, try to disconnect from disabled connections.
  if (m_disabledOutputs.contains(&output)) {
    m_disabledOutputs.remove(&output);
    output.removeInput(*this);
    // Note: it's important to return immediately after all removeInput() calls
    // since the node may be deleted.
    return;
  }

  ASSERT_NOT_REACHED();
}