Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(796)

Unified Diff: third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp

Issue 2732523003: Make ConvolverNode conform to spec (Closed)
Patch Set: Revert unneeded AudioNode.h change Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
index ca23bcfe9784dbffa7c003c9944e82e448bfab8c..85780cfe002aea6eb73a7a00d33cd9144250f2b9 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
@@ -48,7 +48,7 @@ namespace blink {
ConvolverHandler::ConvolverHandler(AudioNode& node, float sampleRate)
: AudioHandler(NodeTypeConvolver, node, sampleRate), m_normalize(true) {
addInput();
- addOutput(2);
+ addOutput(1);
hongchan 2017/03/28 16:44:35 Why 1? The default channel value is 1 and then can
Raymond Toy 2017/03/28 17:34:49 We start the convolver with 1 output channel. m_c
hongchan 2017/03/28 19:01:43 Acknowledged.
// Node-specific default mixing rules.
m_channelCount = 2;
@@ -136,9 +136,10 @@ void ConvolverHandler::setBuffer(AudioBuffer* buffer,
bufferBus->setSampleRate(buffer->sampleRate());
// Create the reverb with the given impulse response.
- std::unique_ptr<Reverb> reverb = WTF::wrapUnique(new Reverb(
- bufferBus.get(), AudioUtilities::kRenderQuantumFrames, MaxFFTSize, 2,
- context() && context()->hasRealtimeConstraint(), m_normalize));
+ std::unique_ptr<Reverb> reverb = WTF::wrapUnique(
+ new Reverb(bufferBus.get(), AudioUtilities::kRenderQuantumFrames,
+ MaxFFTSize, numberOfChannels,
+ context() && context()->hasRealtimeConstraint(), m_normalize));
{
// Synchronize with process().
@@ -177,6 +178,65 @@ double ConvolverHandler::latencyTime() const {
return std::numeric_limits<double>::infinity();
}
+void ConvolverHandler::setChannelCount(unsigned long channelCount,
+ ExceptionState& exceptionState) {
+ DCHECK(isMainThread());
+ BaseAudioContext::AutoLocker locker(context());
+
+ // channelCount must be 2.
+ if (channelCount != 2) {
hongchan 2017/03/28 16:44:35 If this cannot be changed, why did we start from 1
Raymond Toy 2017/03/28 17:34:49 m_channelCount is initialized to 2.
hongchan 2017/03/28 19:01:43 Acknowledged.
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ "ConvolverNode: channelCount cannot be changed from 2");
+ }
+}
+
+void ConvolverHandler::setChannelCountMode(const String& mode,
+ ExceptionState& exceptionState) {
+ DCHECK(isMainThread());
+ BaseAudioContext::AutoLocker locker(context());
+
+ // channcelCountMode must be 'clamped-max'.
+ if (mode != "clamped-max") {
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ "ConvolverNode: channelCountMode cannot be changed from 'clamped-max'");
+ }
+}
+
+void ConvolverHandler::checkNumberOfChannelsForInput(AudioNodeInput* input) {
+ DCHECK(context()->isAudioThread());
+#if DCHECK_IS_ON()
+ DCHECK(context()->isGraphOwner());
+#endif
+
+ DCHECK(input);
+ DCHECK_EQ(input, &this->input(0));
+ if (input != &this->input(0))
+ return;
+
+ if (m_buffer) {
+ unsigned numberOfChannels = input->numberOfChannels();
+ unsigned numReverbChannels = m_buffer->numberOfChannels();
hongchan 2017/03/28 16:44:35 numReverbChannels => numberOfReverbChannels
Raymond Toy 2017/03/28 17:34:49 I was following the style in other parts of this f
+ unsigned numOutputsDesired =
hongchan 2017/03/28 16:44:35 Ditto. I think it's better to spell out as much as
+ std::min(2u, std::max(numberOfChannels, numReverbChannels));
+
+ if (isInitialized() && numOutputsDesired != output(0).numberOfChannels()) {
+ // We're already initialized but the channel count has changed.
+ uninitialize();
+ }
+
+ if (!isInitialized()) {
+ // This will propagate the channel count to any nodes connected further
+ // downstream in the graph.
+ output(0).setNumberOfChannels(numOutputsDesired);
+ initialize();
+ }
+ }
+
+ // Update the input's internal bus if needed.
+ AudioHandler::checkNumberOfChannelsForInput(input);
+}
// ----------------------------------------------------------------
ConvolverNode::ConvolverNode(BaseAudioContext& context) : AudioNode(context) {

Powered by Google App Engine
This is Rietveld 408576698