AudioParam should directly be given context in create() method
authorcrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 May 2012 02:48:47 +0000 (02:48 +0000)
committercrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 May 2012 02:48:47 +0000 (02:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=85905

Reviewed by James Robinson.

No new tests.  This is a low-level re-factoring and is covered by existing tests.

* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
* Modules/webaudio/AudioGain.h:
(WebCore::AudioGain::create):
(WebCore::AudioGain::AudioGain):
* Modules/webaudio/AudioGainNode.cpp:
(WebCore::AudioGainNode::AudioGainNode):
* Modules/webaudio/AudioPannerNode.cpp:
(WebCore::AudioPannerNode::AudioPannerNode):
* Modules/webaudio/AudioParam.h:
(WebCore::AudioParam::create):
(AudioParam):
(WebCore::AudioParam::AudioParam):
* Modules/webaudio/BiquadFilterNode.cpp:
(WebCore::BiquadFilterNode::BiquadFilterNode):
* Modules/webaudio/BiquadProcessor.cpp:
(WebCore::BiquadProcessor::BiquadProcessor):
* Modules/webaudio/BiquadProcessor.h:
* Modules/webaudio/DelayNode.cpp:
(WebCore::DelayNode::DelayNode):
* Modules/webaudio/DelayProcessor.cpp:
(WebCore::DelayProcessor::DelayProcessor):
* Modules/webaudio/DelayProcessor.h:
(DelayProcessor):
* Modules/webaudio/DynamicsCompressorNode.cpp:
(WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
* Modules/webaudio/Oscillator.cpp:
(WebCore::Oscillator::Oscillator):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@116485 268f45cc-cd09-0410-ab3c-d52691b4dbfc

14 files changed:
Source/WebCore/ChangeLog
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp
Source/WebCore/Modules/webaudio/AudioGain.h
Source/WebCore/Modules/webaudio/AudioGainNode.cpp
Source/WebCore/Modules/webaudio/AudioPannerNode.cpp
Source/WebCore/Modules/webaudio/AudioParam.h
Source/WebCore/Modules/webaudio/BiquadFilterNode.cpp
Source/WebCore/Modules/webaudio/BiquadProcessor.cpp
Source/WebCore/Modules/webaudio/BiquadProcessor.h
Source/WebCore/Modules/webaudio/DelayNode.cpp
Source/WebCore/Modules/webaudio/DelayProcessor.cpp
Source/WebCore/Modules/webaudio/DelayProcessor.h
Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp
Source/WebCore/Modules/webaudio/Oscillator.cpp

index 5e4eb32..28c29d4 100644 (file)
@@ -1,3 +1,41 @@
+2012-05-08  Chris Rogers  <crogers@google.com>
+
+        AudioParam should directly be given context in create() method
+        https://bugs.webkit.org/show_bug.cgi?id=85905
+
+        Reviewed by James Robinson.
+
+        No new tests.  This is a low-level re-factoring and is covered by existing tests.
+
+        * Modules/webaudio/AudioBufferSourceNode.cpp:
+        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
+        * Modules/webaudio/AudioGain.h:
+        (WebCore::AudioGain::create):
+        (WebCore::AudioGain::AudioGain):
+        * Modules/webaudio/AudioGainNode.cpp:
+        (WebCore::AudioGainNode::AudioGainNode):
+        * Modules/webaudio/AudioPannerNode.cpp:
+        (WebCore::AudioPannerNode::AudioPannerNode):
+        * Modules/webaudio/AudioParam.h:
+        (WebCore::AudioParam::create):
+        (AudioParam):
+        (WebCore::AudioParam::AudioParam):
+        * Modules/webaudio/BiquadFilterNode.cpp:
+        (WebCore::BiquadFilterNode::BiquadFilterNode):
+        * Modules/webaudio/BiquadProcessor.cpp:
+        (WebCore::BiquadProcessor::BiquadProcessor):
+        * Modules/webaudio/BiquadProcessor.h:
+        * Modules/webaudio/DelayNode.cpp:
+        (WebCore::DelayNode::DelayNode):
+        * Modules/webaudio/DelayProcessor.cpp:
+        (WebCore::DelayProcessor::DelayProcessor):
+        * Modules/webaudio/DelayProcessor.h:
+        (DelayProcessor):
+        * Modules/webaudio/DynamicsCompressorNode.cpp:
+        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
+        * Modules/webaudio/Oscillator.cpp:
+        (WebCore::Oscillator::Oscillator):
+
 2012-05-08  Dana Jansens  <danakj@chromium.org>
 
         [chromium] Show borders for partial-draw-culled quads to visualize culling behaviour
index 01f2229..0776be9 100644 (file)
@@ -67,12 +67,9 @@ AudioBufferSourceNode::AudioBufferSourceNode(AudioContext* context, float sample
 {
     setNodeType(NodeTypeAudioBufferSource);
 
-    m_gain = AudioGain::create("gain", 1.0, 0.0, 1.0);
-    m_playbackRate = AudioParam::create("playbackRate", 1.0, 0.0, MaxRate);
+    m_gain = AudioGain::create(context, "gain", 1.0, 0.0, 1.0);
+    m_playbackRate = AudioParam::create(context, "playbackRate", 1.0, 0.0, MaxRate);
     
-    m_gain->setContext(context);
-    m_playbackRate->setContext(context);
-
     // Default to mono.  A call to setBuffer() will set the number of output channels to that of the buffer.
     addOutput(adoptPtr(new AudioNodeOutput(this, 1)));
 
index eb3c52d..79c73e0 100644 (file)
@@ -36,14 +36,14 @@ namespace WebCore {
 
 class AudioGain : public AudioParam {
 public:   
-    static PassRefPtr<AudioGain> create(const char* name, double defaultValue, double minValue, double maxValue)
+    static PassRefPtr<AudioGain> create(AudioContext* context, const char* name, double defaultValue, double minValue, double maxValue)
     {
-        return adoptRef(new AudioGain(name, defaultValue, minValue, maxValue));
+        return adoptRef(new AudioGain(context, name, defaultValue, minValue, maxValue));
     }
 
 private:
-    AudioGain(const char* name, double defaultValue, double minValue, double maxValue)
-        : AudioParam(name, defaultValue, minValue, maxValue)
+    AudioGain(AudioContext* context, const char* name, double defaultValue, double minValue, double maxValue)
+        : AudioParam(context, name, defaultValue, minValue, maxValue)
     {
     }
 };
index 7c61432..4f513c0 100644 (file)
@@ -39,8 +39,7 @@ AudioGainNode::AudioGainNode(AudioContext* context, float sampleRate)
     , m_lastGain(1.0)
     , m_sampleAccurateGainValues(AudioNode::ProcessingSizeInFrames) // FIXME: can probably share temp buffer in context
 {
-    m_gain = AudioGain::create("gain", 1.0, 0.0, 1.0);
-    m_gain->setContext(context);
+    m_gain = AudioGain::create(context, "gain", 1.0, 0.0, 1.0);
 
     addInput(adoptPtr(new AudioNodeInput(this)));
     addOutput(adoptPtr(new AudioNodeOutput(this, 1)));
index 1105773..4d0ad18 100644 (file)
@@ -56,8 +56,8 @@ AudioPannerNode::AudioPannerNode(AudioContext* context, float sampleRate)
     addInput(adoptPtr(new AudioNodeInput(this)));
     addOutput(adoptPtr(new AudioNodeOutput(this, 2)));
     
-    m_distanceGain = AudioGain::create("distanceGain", 1.0, 0.0, 1.0);
-    m_coneGain = AudioGain::create("coneGain", 1.0, 0.0, 1.0);
+    m_distanceGain = AudioGain::create(context, "distanceGain", 1.0, 0.0, 1.0);
+    m_coneGain = AudioGain::create(context, "coneGain", 1.0, 0.0, 1.0);
 
     m_position = FloatPoint3D(0, 0, 0);
     m_orientation = FloatPoint3D(1, 0, 0);
index c38753c..3bd27ab 100644 (file)
@@ -46,29 +46,14 @@ public:
     static const double DefaultSmoothingConstant;
     static const double SnapThreshold;
 
-    static PassRefPtr<AudioParam> create(const String& name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
+    static PassRefPtr<AudioParam> create(AudioContext* context, const String& name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
     {
-        return adoptRef(new AudioParam(name, defaultValue, minValue, maxValue, units));
+        return adoptRef(new AudioParam(context, name, defaultValue, minValue, maxValue, units));
     }
 
-    AudioParam(const String& name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
-        : m_name(name)
-        , m_value(defaultValue)
-        , m_defaultValue(defaultValue)
-        , m_minValue(minValue)
-        , m_maxValue(maxValue)
-        , m_units(units)
-        , m_smoothedValue(defaultValue)
-        , m_smoothingConstant(DefaultSmoothingConstant)
-        , m_audioRateSignal(0)
-    {
-    }
-    
-    void setContext(AudioContext* context) { m_context = context; }
     AudioContext* context() { return m_context.get(); }
 
     float value();
-    
     void setValue(float);
 
     String name() const { return m_name; }
@@ -109,6 +94,21 @@ public:
     void connect(AudioNodeOutput*);
     void disconnect(AudioNodeOutput*);
 
+protected:
+    AudioParam(AudioContext* context, const String& name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
+        : m_context(context)
+        , m_name(name)
+        , m_value(defaultValue)
+        , m_defaultValue(defaultValue)
+        , m_minValue(minValue)
+        , m_maxValue(maxValue)
+        , m_units(units)
+        , m_smoothedValue(defaultValue)
+        , m_smoothingConstant(DefaultSmoothingConstant)
+        , m_audioRateSignal(0)
+    {
+    }
+
 private:
     void calculateAudioRateSignalValues(float* values, unsigned numberOfValues);
     void calculateTimelineValues(float* values, unsigned numberOfValues);
index 9748628..d752e2c 100644 (file)
@@ -36,10 +36,7 @@ BiquadFilterNode::BiquadFilterNode(AudioContext* context, float sampleRate)
     : AudioBasicProcessorNode(context, sampleRate)
 {
     // Initially setup as lowpass filter.
-    m_processor = adoptPtr(new BiquadProcessor(sampleRate, 1, false));
-    biquadProcessor()->parameter1()->setContext(context);
-    biquadProcessor()->parameter2()->setContext(context);
-    biquadProcessor()->parameter3()->setContext(context);
+    m_processor = adoptPtr(new BiquadProcessor(context, sampleRate, 1, false));
     setNodeType(NodeTypeBiquadFilter);
 }
 
index d14b060..e8677d2 100644 (file)
@@ -32,7 +32,7 @@
 
 namespace WebCore {
     
-BiquadProcessor::BiquadProcessor(float sampleRate, size_t numberOfChannels, bool autoInitialize)
+BiquadProcessor::BiquadProcessor(AudioContext* context, float sampleRate, size_t numberOfChannels, bool autoInitialize)
     : AudioDSPKernelProcessor(sampleRate, numberOfChannels)
     , m_type(LowPass)
     , m_parameter1(0)
@@ -43,9 +43,9 @@ BiquadProcessor::BiquadProcessor(float sampleRate, size_t numberOfChannels, bool
     double nyquist = 0.5 * this->sampleRate();
 
     // Create parameters for BiquadFilterNode.
-    m_parameter1 = AudioParam::create("frequency", 350.0, 10.0, nyquist);
-    m_parameter2 = AudioParam::create("Q", 1, 0.0001, 1000.0);
-    m_parameter3 = AudioParam::create("gain", 0.0, -40, 40);
+    m_parameter1 = AudioParam::create(context, "frequency", 350.0, 10.0, nyquist);
+    m_parameter2 = AudioParam::create(context, "Q", 1, 0.0001, 1000.0);
+    m_parameter3 = AudioParam::create(context, "gain", 0.0, -40, 40);
 
     if (autoInitialize)
         initialize();
index 0f3610a..4082944 100644 (file)
@@ -49,7 +49,7 @@ public:
         Allpass = 7
     };
 
-    BiquadProcessor(float sampleRate, size_t numberOfChannels, bool autoInitialize);
+    BiquadProcessor(AudioContext*, float sampleRate, size_t numberOfChannels, bool autoInitialize);
 
     virtual ~BiquadProcessor();
     
index 59341ab..51cc71e 100644 (file)
@@ -33,8 +33,7 @@ namespace WebCore {
 DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime)
     : AudioBasicProcessorNode(context, sampleRate)
 {
-    m_processor = adoptPtr(new DelayProcessor(sampleRate, 1, maxDelayTime));
-    delayTime()->setContext(context);
+    m_processor = adoptPtr(new DelayProcessor(context, sampleRate, 1, maxDelayTime));
     setNodeType(NodeTypeDelay);
 }
 
index b23e8ac..4eafb71 100644 (file)
 
 namespace WebCore {
 
-DelayProcessor::DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime)
+DelayProcessor::DelayProcessor(AudioContext* context, float sampleRate, unsigned numberOfChannels, double maxDelayTime)
     : AudioDSPKernelProcessor(sampleRate, numberOfChannels)
     , m_maxDelayTime(maxDelayTime)
 {
-    m_delayTime = AudioParam::create("delayTime", 0.0, 0.0, maxDelayTime);
+    m_delayTime = AudioParam::create(context, "delayTime", 0.0, 0.0, maxDelayTime);
 }
 
 DelayProcessor::~DelayProcessor()
index 33fb937..8b29353 100644 (file)
@@ -37,7 +37,7 @@ class AudioDSPKernel;
     
 class DelayProcessor : public AudioDSPKernelProcessor {
 public:
-    DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime);
+    DelayProcessor(AudioContext*, float sampleRate, unsigned numberOfChannels, double maxDelayTime);
     virtual ~DelayProcessor();
     
     virtual PassOwnPtr<AudioDSPKernel> createKernel();
index c4e3898..d4cf3b7 100644 (file)
@@ -46,19 +46,12 @@ DynamicsCompressorNode::DynamicsCompressorNode(AudioContext* context, float samp
 
     setNodeType(NodeTypeDynamicsCompressor);
 
-    m_threshold = AudioParam::create("threshold", -24, -100, 0);
-    m_knee = AudioParam::create("knee", 30, 0, 40);
-    m_ratio = AudioParam::create("ratio", 12, 1, 20);
-    m_reduction = AudioParam::create("reduction", 0, -20, 0);
-    m_attack = AudioParam::create("attack", 0.003, 0, 1);
-    m_release = AudioParam::create("release", 0.250, 0, 1);
-
-    m_threshold->setContext(context);
-    m_knee->setContext(context);
-    m_ratio->setContext(context);
-    m_reduction->setContext(context);
-    m_attack->setContext(context);
-    m_release->setContext(context);
+    m_threshold = AudioParam::create(context, "threshold", -24, -100, 0);
+    m_knee = AudioParam::create(context, "knee", 30, 0, 40);
+    m_ratio = AudioParam::create(context, "ratio", 12, 1, 20);
+    m_reduction = AudioParam::create(context, "reduction", 0, -20, 0);
+    m_attack = AudioParam::create(context, "attack", 0.003, 0, 1);
+    m_release = AudioParam::create(context, "release", 0.250, 0, 1);
 
     initialize();
 }
index 8aac8c0..18588a6 100644 (file)
@@ -58,11 +58,9 @@ Oscillator::Oscillator(AudioContext* context, float sampleRate)
     setNodeType(NodeTypeOscillator);
 
     // Use musical pitch standard A440 as a default.
-    m_frequency = AudioParam::create("frequency", 440, 0, 100000);
+    m_frequency = AudioParam::create(context, "frequency", 440, 0, 100000);
     // Default to no detuning.
-    m_detune = AudioParam::create("detune", 0, -4800, 4800);
-    m_frequency->setContext(context);
-    m_detune->setContext(context);
+    m_detune = AudioParam::create(context, "detune", 0, -4800, 4800);
 
     // Sets up default wavetable.
     setType(m_type);