void AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex, ExceptionCode& ec) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); if (!destination) { ec = SYNTAX_ERR; return; } // Sanity check input and output indices. if (outputIndex >= numberOfOutputs()) { ec = INDEX_SIZE_ERR; return; } if (destination && inputIndex >= destination->numberOfInputs()) { ec = INDEX_SIZE_ERR; return; } if (context() != destination->context()) { ec = SYNTAX_ERR; return; } AudioNodeInput* input = destination->input(inputIndex); AudioNodeOutput* output = this->output(outputIndex); input->connect(output); // Let context know that a connection has been made. context()->incrementConnectionCount(); }
bool AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); // Sanity check input and output indices. if (outputIndex >= numberOfOutputs()) return false; if (destination && inputIndex >= destination->numberOfInputs()) return false; AudioNodeOutput* output = this->output(outputIndex); if (!destination) { // Disconnect output from any inputs it may be currently connected to. output->disconnectAllInputs(); return true; } if (context() != destination->context()) return false; AudioNodeInput* input = destination->input(inputIndex); input->connect(output); // Let context know that a connection has been made. context()->incrementConnectionCount(); return true; }
void AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); if (!destination) { exceptionState.throwDOMException( SyntaxError, "invalid destination node."); return; } // Sanity check input and output indices. if (outputIndex >= numberOfOutputs()) { exceptionState.throwDOMException( IndexSizeError, "output index (" + String::number(outputIndex) + ") exceeds number of outputs (" + String::number(numberOfOutputs()) + ")."); return; } if (destination && inputIndex >= destination->numberOfInputs()) { exceptionState.throwDOMException( IndexSizeError, "input index (" + String::number(inputIndex) + ") exceeds number of inputs (" + String::number(destination->numberOfInputs()) + ")."); return; } if (context() != destination->context()) { exceptionState.throwDOMException( SyntaxError, "cannot connect to a destination belonging to a different audio context."); return; } AudioNodeInput* input = destination->input(inputIndex); AudioNodeOutput* output = this->output(outputIndex); input->connect(output); // Let context know that a connection has been made. context()->incrementConnectionCount(); }