diff options
author | tkent@chromium.org <tkent@chromium.org> | 2015-04-08 01:13:45 +0000 |
---|---|---|
committer | tkent@chromium.org <tkent@chromium.org> | 2015-04-08 01:13:45 +0000 |
commit | 4c7926a2d6378266483743d507c9feabb0c306fb (patch) | |
tree | 2d5c6f0f90121f7bc5050dc75c9f92b464852f08 | |
parent | 3b69a72a149297903b014e7a1f4fab0f97af97f1 (diff) | |
download | chromium_src-4c7926a2d6378266483743d507c9feabb0c306fb.zip chromium_src-4c7926a2d6378266483743d507c9feabb0c306fb.tar.gz chromium_src-4c7926a2d6378266483743d507c9feabb0c306fb.tar.bz2 |
Web Audio: Move m_connectedNodes, m_connectedParams, connect(), and disconnect() from AudioHandler to AudioNode
We need to introduce AudioBasicInspectorNode in order to override
AudioNode::connect and AudioNode:disconnect. AnalyserNode and
MediaStreamAudioDestinationNode inherit from AudioBasicInspectorNode
again.
BUG=474081
Review URL: https://codereview.chromium.org/1068713002
git-svn-id: svn://svn.chromium.org/blink/trunk@193314 bbb929c8-8fbe-4397-9dbb-9b2b20218538
9 files changed, 83 insertions, 121 deletions
diff --git a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp index 43903af..9705c46 100644 --- a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.cpp @@ -118,7 +118,7 @@ void AnalyserHandler::setSmoothingTimeConstant(double k, ExceptionState& excepti // ---------------------------------------------------------------- AnalyserNode::AnalyserNode(AudioContext& context, float sampleRate) - : AudioNode(context) + : AudioBasicInspectorNode(context) { setHandler(new AnalyserHandler(*this, sampleRate)); } diff --git a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.h b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.h index a71d9c4..b5c3de4 100644 --- a/third_party/WebKit/Source/modules/webaudio/AnalyserNode.h +++ b/third_party/WebKit/Source/modules/webaudio/AnalyserNode.h @@ -65,7 +65,7 @@ private: RealtimeAnalyser m_analyser; }; -class AnalyserNode final : public AudioNode { +class AnalyserNode final : public AudioBasicInspectorNode { DEFINE_WRAPPERTYPEINFO(); public: static AnalyserNode* create(AudioContext&, float sampleRate); diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.cpp index acaae77..4420bc6 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.cpp @@ -49,24 +49,24 @@ void AudioBasicInspectorHandler::pullInputs(size_t framesToProcess) input(0)->pull(output(0)->bus(), framesToProcess); } -void AudioBasicInspectorHandler::connect(AudioHandler* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) +void AudioBasicInspectorNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); - AudioHandler::connect(destination, outputIndex, inputIndex, exceptionState); - updatePullStatus(); + AudioNode::connect(destination, outputIndex, inputIndex, exceptionState); + static_cast<AudioBasicInspectorHandler&>(handler()).updatePullStatus(); } -void AudioBasicInspectorHandler::disconnect(unsigned outputIndex, ExceptionState& exceptionState) +void AudioBasicInspectorNode::disconnect(unsigned outputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); - AudioHandler::disconnect(outputIndex, exceptionState); - updatePullStatus(); + AudioNode::disconnect(outputIndex, exceptionState); + static_cast<AudioBasicInspectorHandler&>(handler()).updatePullStatus(); } void AudioBasicInspectorHandler::checkNumberOfChannelsForInput(AudioNodeInput* input) diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.h b/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.h index 2c9e4ed..e5ebfee 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.h +++ b/third_party/WebKit/Source/modules/webaudio/AudioBasicInspectorNode.h @@ -40,15 +40,25 @@ public: // AudioHandler virtual void pullInputs(size_t framesToProcess) override final; - virtual void connect(AudioHandler*, unsigned outputIndex, unsigned inputIndex, ExceptionState&) override final; - virtual void disconnect(unsigned outputIndex, ExceptionState&) override final; virtual void checkNumberOfChannelsForInput(AudioNodeInput*) override final; -private: void updatePullStatus(); + +private: bool m_needAutomaticPull; // When setting to true, AudioBasicInspectorHandler will be pulled automaticlly by AudioContext before the end of each render quantum. }; +class AudioBasicInspectorNode : public AudioNode { +protected: + explicit AudioBasicInspectorNode(AudioContext& context) : AudioNode(context) { } + +private: + // TODO(tkent): Should AudioBasicInspectorNode override other variants of + // connect() and disconnect()? + void connect(AudioNode*, unsigned outputIndex, unsigned inputIndex, ExceptionState&) final; + void disconnect(unsigned outputIndex, ExceptionState&) final; +}; + } // namespace blink #endif // AudioBasicInspectorNode_h diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp index 6c6325b..b93dd56 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp @@ -1280,7 +1280,7 @@ ScriptPromise AudioContext::closeContext(ScriptState* scriptState) for (auto& node : m_liveNodes) { if (node) { for (unsigned k = 0; k < node->numberOfOutputs(); ++k) - node->handler().disconnectWithoutException(k); + node->disconnectWithoutException(k); } } diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp index 5b3c78e..a95f84e 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp @@ -174,11 +174,9 @@ void AudioHandler::addInput() void AudioHandler::addOutput(unsigned numberOfChannels) { + ASSERT(isMainThread()); m_outputs.append(AudioNodeOutput::create(this, numberOfChannels)); - m_connectedNodes.append(nullptr); - ASSERT(numberOfOutputs() == m_connectedNodes.size()); - m_connectedParams.append(nullptr); - ASSERT(numberOfOutputs() == m_connectedParams.size()); + node()->didAddOutput(numberOfOutputs()); } AudioNodeInput* AudioHandler::input(unsigned i) @@ -195,7 +193,7 @@ AudioNodeOutput* AudioHandler::output(unsigned i) return nullptr; } -void AudioHandler::connect(AudioHandler* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) +void AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -236,16 +234,16 @@ void AudioHandler::connect(AudioHandler* destination, unsigned outputIndex, unsi return; } - destination->input(inputIndex)->connect(*output(outputIndex)); + destination->handler().input(inputIndex)->connect(*handler().output(outputIndex)); if (!m_connectedNodes[outputIndex]) - m_connectedNodes[outputIndex] = new HeapHashSet<Member<AudioHandler>>(); + m_connectedNodes[outputIndex] = new HeapHashSet<Member<AudioNode>>(); m_connectedNodes[outputIndex]->add(destination); // Let context know that a connection has been made. context()->incrementConnectionCount(); } -void AudioHandler::connect(AudioParam* param, unsigned outputIndex, ExceptionState& exceptionState) +void AudioNode::connect(AudioParam* param, unsigned outputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -278,26 +276,26 @@ void AudioHandler::connect(AudioParam* param, unsigned outputIndex, ExceptionSta return; } - param->handler().connect(*output(outputIndex)); + param->handler().connect(*handler().output(outputIndex)); if (!m_connectedParams[outputIndex]) m_connectedParams[outputIndex] = new HeapHashSet<Member<AudioParam>>(); m_connectedParams[outputIndex]->add(param); } -void AudioHandler::disconnect() +void AudioNode::disconnect() { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); // Disconnect all outgoing connections. for (unsigned i = 0; i < numberOfOutputs(); ++i) { - this->output(i)->disconnectAll(); + handler().output(i)->disconnectAll(); m_connectedNodes[i] = nullptr; m_connectedParams[i] = nullptr; } } -void AudioHandler::disconnect(unsigned outputIndex, ExceptionState& exceptionState) +void AudioNode::disconnect(unsigned outputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -317,12 +315,12 @@ void AudioHandler::disconnect(unsigned outputIndex, ExceptionState& exceptionSta } // Disconnect all outgoing connections from the given output. - output(outputIndex)->disconnectAll(); + handler().output(outputIndex)->disconnectAll(); m_connectedNodes[outputIndex] = nullptr; m_connectedParams[outputIndex] = nullptr; } -void AudioHandler::disconnect(AudioHandler* destination, ExceptionState& exceptionState) +void AudioNode::disconnect(AudioNode* destination, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -332,9 +330,9 @@ void AudioHandler::disconnect(AudioHandler* destination, ExceptionState& excepti // FIXME: Can this be optimized? ChannelSplitter and ChannelMerger can have // 32 ports and that requires 1024 iterations to validate entire connections. for (unsigned i = 0; i < numberOfOutputs(); ++i) { - AudioNodeOutput* output = this->output(i); - for (unsigned j = 0; j < destination->numberOfInputs(); ++j) { - AudioNodeInput* input = destination->input(j); + AudioNodeOutput* output = handler().output(i); + for (unsigned j = 0; j < destination->handler().numberOfInputs(); ++j) { + AudioNodeInput* input = destination->handler().input(j); if (output->isConnectedToInput(*input)) { output->disconnectInput(*input); m_connectedNodes[i]->remove(destination); @@ -352,7 +350,7 @@ void AudioHandler::disconnect(AudioHandler* destination, ExceptionState& excepti } } -void AudioHandler::disconnect(AudioHandler* destination, unsigned outputIndex, ExceptionState& exceptionState) +void AudioNode::disconnect(AudioNode* destination, unsigned outputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -362,11 +360,11 @@ void AudioHandler::disconnect(AudioHandler* destination, unsigned outputIndex, E // If the output index is valid, proceed to disconnect. if (isOutputIndexInRange) { unsigned numberOfDisconnections = 0; - AudioNodeOutput* output = this->output(outputIndex); + AudioNodeOutput* output = handler().output(outputIndex); // Sanity check on destination inputs and disconnect when possible. for (unsigned i = 0; i < destination->numberOfInputs(); ++i) { - AudioNodeInput* input = destination->input(i); + AudioNodeInput* input = destination->handler().input(i); if (output->isConnectedToInput(*input)) { output->disconnectInput(*input); m_connectedNodes[outputIndex]->remove(destination); @@ -398,18 +396,18 @@ void AudioHandler::disconnect(AudioHandler* destination, unsigned outputIndex, E } } -void AudioHandler::disconnect(AudioHandler* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) +void AudioNode::disconnect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); bool isOutputIndexInRange = outputIndex < numberOfOutputs(); - bool isInputIndexInRange = inputIndex < destination->numberOfInputs(); + bool isInputIndexInRange = inputIndex < destination->handler().numberOfInputs(); // If both indices are valid, proceed to disconnect. if (isOutputIndexInRange && isInputIndexInRange) { - AudioNodeOutput* output = this->output(outputIndex); - AudioNodeInput* input = destination->input(inputIndex); + AudioNodeOutput* output = handler().output(outputIndex); + AudioNodeInput* input = destination->handler().input(inputIndex); // Sanity check on the connection between the output and the destination input. if (!output->isConnectedToInput(*input)) { @@ -451,7 +449,7 @@ void AudioHandler::disconnect(AudioHandler* destination, unsigned outputIndex, u } } -void AudioHandler::disconnect(AudioParam* destinationParam, ExceptionState& exceptionState) +void AudioNode::disconnect(AudioParam* destinationParam, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); @@ -461,8 +459,8 @@ void AudioHandler::disconnect(AudioParam* destinationParam, ExceptionState& exce // Check if the node output is connected the destination AudioParam. // Disconnect if connected and increase |numberOfDisconnectios| by 1. - for (unsigned i = 0; i < numberOfOutputs(); ++i) { - AudioNodeOutput* output = this->output(i); + for (unsigned i = 0; i < handler().numberOfOutputs(); ++i) { + AudioNodeOutput* output = handler().output(i); if (output->isConnectedToAudioParam(destinationParam->handler())) { output->disconnectAudioParam(destinationParam->handler()); m_connectedParams[i]->remove(destinationParam); @@ -479,16 +477,16 @@ void AudioHandler::disconnect(AudioParam* destinationParam, ExceptionState& exce } } -void AudioHandler::disconnect(AudioParam* destinationParam, unsigned outputIndex, ExceptionState& exceptionState) +void AudioNode::disconnect(AudioParam* destinationParam, unsigned outputIndex, ExceptionState& exceptionState) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); - bool isOutputIndexInRange = outputIndex < numberOfOutputs(); + bool isOutputIndexInRange = outputIndex < handler().numberOfOutputs(); // If the output index is valid, proceed to disconnect. if (isOutputIndexInRange) { - AudioNodeOutput* output = this->output(outputIndex); + AudioNodeOutput* output = handler().output(outputIndex); // Sanity check on the connection between the output and the destination. if (!output->isConnectedToAudioParam(destinationParam->handler())) { @@ -516,15 +514,15 @@ void AudioHandler::disconnect(AudioParam* destinationParam, unsigned outputIndex } } -void AudioHandler::disconnectWithoutException(unsigned outputIndex) +void AudioNode::disconnectWithoutException(unsigned outputIndex) { ASSERT(isMainThread()); AudioContext::AutoLocker locker(context()); // Sanity check input and output indices. - if (outputIndex >= numberOfOutputs()) + if (outputIndex >= handler().numberOfOutputs()) return; - output(outputIndex)->disconnectAll(); + handler().output(outputIndex)->disconnectAll(); m_connectedNodes[outputIndex] = nullptr; m_connectedParams[outputIndex] = nullptr; } @@ -831,8 +829,6 @@ DEFINE_TRACE(AudioHandler) visitor->trace(input->renderingOutput(i)->node()); } } - visitor->trace(m_connectedNodes); - visitor->trace(m_connectedParams); } void AudioHandler::updateChannelCountMode() @@ -874,54 +870,11 @@ DEFINE_TRACE(AudioNode) { visitor->trace(m_context); visitor->trace(m_handler); + visitor->trace(m_connectedNodes); + visitor->trace(m_connectedParams); RefCountedGarbageCollectedEventTargetWithInlineData<AudioNode>::trace(visitor); } -void AudioNode::connect(AudioNode* node, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) -{ - handler().connect(&node->handler(), outputIndex, inputIndex, exceptionState); -} - -void AudioNode::connect(AudioParam* param, unsigned outputIndex, ExceptionState& exceptionState) -{ - handler().connect(param, outputIndex, exceptionState); -} - -void AudioNode::disconnect() -{ - handler().disconnect(); -} - -void AudioNode::disconnect(unsigned outputIndex, ExceptionState& exceptionState) -{ - handler().disconnect(outputIndex, exceptionState); -} - -void AudioNode::disconnect(AudioNode* node, ExceptionState& exceptionState) -{ - handler().disconnect(&node->handler(), exceptionState); -} - -void AudioNode::disconnect(AudioNode* node, unsigned outputIndex, ExceptionState& exceptionState) -{ - handler().disconnect(&node->handler(), outputIndex, exceptionState); -} - -void AudioNode::disconnect(AudioNode* node, unsigned outputIndex, unsigned inputIndex, ExceptionState& exceptionState) -{ - handler().disconnect(&node->handler(), outputIndex, inputIndex, exceptionState); -} - -void AudioNode::disconnect(AudioParam* param, ExceptionState& exceptionState) -{ - handler().disconnect(param, exceptionState); -} - -void AudioNode::disconnect(AudioParam* param, unsigned outputIndex, ExceptionState& exceptionState) -{ - handler().disconnect(param, outputIndex, exceptionState); -} - AudioContext* AudioNode::context() const { return m_context; @@ -977,6 +930,14 @@ ExecutionContext* AudioNode::executionContext() const return context()->executionContext(); } +void AudioNode::didAddOutput(unsigned numberOfOutputs) +{ + m_connectedNodes.append(nullptr); + ASSERT_UNUSED(numberOfOutputs, numberOfOutputs == m_connectedNodes.size()); + m_connectedParams.append(nullptr); + ASSERT_UNUSED(numberOfOutputs, numberOfOutputs == m_connectedParams.size()); +} + } // namespace blink #endif // ENABLE(WEB_AUDIO) diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNode.h b/third_party/WebKit/Source/modules/webaudio/AudioNode.h index e68b7ff..64bfc49 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioNode.h +++ b/third_party/WebKit/Source/modules/webaudio/AudioNode.h @@ -136,22 +136,6 @@ public: AudioNodeInput* input(unsigned); AudioNodeOutput* output(unsigned); - // Called from main thread by corresponding JavaScript methods. - virtual void connect(AudioHandler*, unsigned outputIndex, unsigned inputIndex, ExceptionState&); - void connect(AudioParam*, unsigned outputIndex, ExceptionState&); - - virtual void disconnect(); - virtual void disconnect(unsigned outputIndex, ExceptionState&); - virtual void disconnect(AudioHandler*, ExceptionState&); - virtual void disconnect(AudioHandler*, unsigned outputIndex, ExceptionState&); - virtual void disconnect(AudioHandler*, unsigned outputIndex, unsigned inputIndex, ExceptionState&); - virtual void disconnect(AudioParam*, ExceptionState&); - virtual void disconnect(AudioParam*, unsigned outputIndex, ExceptionState&); - - // Like disconnect, but no exception is thrown if the outputIndex is invalid. Just do nothing - // in that case. - virtual void disconnectWithoutException(unsigned outputIndex); - virtual float sampleRate() const { return m_sampleRate; } // processIfNecessary() is called by our output(s) when the rendering graph needs this AudioNode to process. @@ -208,7 +192,8 @@ public: DECLARE_VIRTUAL_TRACE(); protected: - // Inputs and outputs must be created before the AudioNode is initialized. + // Inputs and outputs must be created before the AudioHandler is + // initialized. void addInput(); void addOutput(unsigned numberOfChannels); @@ -230,14 +215,6 @@ private: float m_sampleRate; Vector<OwnPtr<AudioNodeInput>> m_inputs; Vector<OwnPtr<AudioNodeOutput>> m_outputs; - // Represents audio node graph with Oilpan references. N-th HeapHashSet - // represents a set of AudioNode objects connected to this AudioNode's N-th - // output. - HeapVector<Member<HeapHashSet<Member<AudioHandler>>>> m_connectedNodes; - // Represents audio node graph with Oilpan references. N-th HeapHashSet - // represents a set of AudioParam objects connected to this AudioNode's N-th - // output. - HeapVector<Member<HeapHashSet<Member<AudioParam>>>> m_connectedParams; double m_lastProcessingTime; double m_lastNonSilentTime; @@ -269,10 +246,10 @@ public: DECLARE_VIRTUAL_TRACE(); AudioHandler& handler() const; - void connect(AudioNode*, unsigned outputIndex, unsigned inputIndex, ExceptionState&); + virtual void connect(AudioNode*, unsigned outputIndex, unsigned inputIndex, ExceptionState&); void connect(AudioParam*, unsigned outputIndex, ExceptionState&); void disconnect(); - void disconnect(unsigned outputIndex, ExceptionState&); + virtual void disconnect(unsigned outputIndex, ExceptionState&); void disconnect(AudioNode*, ExceptionState&); void disconnect(AudioNode*, unsigned outputIndex, ExceptionState&); void disconnect(AudioNode*, unsigned outputIndex, unsigned inputIndex, ExceptionState&); @@ -292,6 +269,12 @@ public: virtual const AtomicString& interfaceName() const override final; virtual ExecutionContext* executionContext() const override final; + // Called inside AudioHandler constructors. + void didAddOutput(unsigned numberOfOutputs); + // Like disconnect, but no exception is thrown if the outputIndex is invalid. Just do nothing + // in that case. + void disconnectWithoutException(unsigned outputIndex); + protected: explicit AudioNode(AudioContext&); // This should be called in a constructor. @@ -302,6 +285,14 @@ private: Member<AudioContext> m_context; Member<AudioHandler> m_handler; + // Represents audio node graph with Oilpan references. N-th HeapHashSet + // represents a set of AudioNode objects connected to this AudioNode's N-th + // output. + HeapVector<Member<HeapHashSet<Member<AudioNode>>>> m_connectedNodes; + // Represents audio node graph with Oilpan references. N-th HeapHashSet + // represents a set of AudioParam objects connected to this AudioNode's N-th + // output. + HeapVector<Member<HeapHashSet<Member<AudioParam>>>> m_connectedParams; }; } // namespace blink diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp index dc41ab2..c9f7e9e 100644 --- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp +++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.cpp @@ -77,7 +77,7 @@ void MediaStreamAudioDestinationHandler::process(size_t numberOfFrames) // ---------------------------------------------------------------- MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode(AudioContext& context, size_t numberOfChannels) - : AudioNode(context) + : AudioBasicInspectorNode(context) { setHandler(new MediaStreamAudioDestinationHandler(*this, numberOfChannels)); } diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h index 6181142..27ab1f0 100644 --- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h +++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h @@ -58,7 +58,7 @@ private: RefPtr<AudioBus> m_mixBus; }; -class MediaStreamAudioDestinationNode final : public AudioNode { +class MediaStreamAudioDestinationNode final : public AudioBasicInspectorNode { DEFINE_WRAPPERTYPEINFO(); public: static MediaStreamAudioDestinationNode* create(AudioContext&, size_t numberOfChannels); |