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::disconnect(unsigned outputIndex, ExceptionCode& ec) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); // Sanity check input and output indices. if (outputIndex >= numberOfOutputs()) { ec = INDEX_SIZE_ERR; return; } AudioNodeOutput* output = this->output(outputIndex); output->disconnectAllInputs(); }