Title: [109666] trunk
Revision
109666
Author
[email protected]
Date
2012-03-03 14:48:55 -0800 (Sat, 03 Mar 2012)

Log Message

DelayNode has a fixed one second max delay time
https://bugs.webkit.org/show_bug.cgi?id=78758

Source/WebCore:

Change DelayNode to accept an optional parameter to specify the
maximum delay allowed. If not specified, the default is 1 sec.

Patch by Raymond Toy <[email protected]> on 2012-03-03
Reviewed by Chris Rogers.

Test: webaudio/delaynode-maxdelay.html
      webaudio/delaynode-maxdelay-expected.txt

* webaudio/AudioContext.cpp:
(WebCore::AudioContext::createDelayNode): Allow maxDelayTime
parameter to specify max delay.
* webaudio/AudioContext.h: Allow maxDelayTime
parameter to specify max delay but default to 1.
(AudioContext):
* webaudio/AudioContext.idl: createDelayNode takes optional max
delay time parameter.
* webaudio/DelayDSPKernel.cpp:
(WebCore::DelayDSPKernel::DelayDSPKernel): Remove unused
DefaultMaxDelayTime. Set m_maxDelayTime from processor
maxDelayTime.
* webaudio/DelayNode.cpp:
(WebCore::DelayNode::DelayNode): Add maxDelayTime parameter.
* webaudio/DelayNode.h:
(WebCore::DelayNode::create): Add maxDelayTime parameter.
(DelayNode): Add maxDelayTime parameter.
* webaudio/DelayProcessor.cpp:
(WebCore::DelayProcessor::DelayProcessor): Add maxDelayTime
parameter.
* webaudio/DelayProcessor.h:
(DelayProcessor): Add maxDelayTime parameter.
(WebCore::DelayProcessor::maxDelayTime): New slot to hold
maxDelayTime.

LayoutTests:

Patch by Raymond Toy <[email protected]> on 2012-03-03
Reviewed by Chris Rogers.

* webaudio/resources/delay-testing.js: Added more informative
messages.
* webaudio/delaynode-expected.txt: Updated result for more
informative messages
* webaudio/delaynode-scheduling-expected.txt: Updated result for
more informative messages.
* webaudio/delaynode-maxdelay-expected.txt: Added
* webaudio/delaynode-maxdelay.html: Added

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (109665 => 109666)


--- trunk/LayoutTests/ChangeLog	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/ChangeLog	2012-03-03 22:48:55 UTC (rev 109666)
@@ -1,5 +1,21 @@
 2012-03-03  Raymond Toy  <[email protected]>
 
+        DelayNode has a fixed one second max delay time
+        https://bugs.webkit.org/show_bug.cgi?id=78758
+
+        Reviewed by Chris Rogers.
+
+        * webaudio/resources/delay-testing.js: Added more informative
+        messages.  
+        * webaudio/delaynode-expected.txt: Updated result for more
+        informative messages
+        * webaudio/delaynode-scheduling-expected.txt: Updated result for
+        more informative messages.
+        * webaudio/delaynode-maxdelay-expected.txt: Added
+        * webaudio/delaynode-maxdelay.html: Added
+
+2012-03-03  Raymond Toy  <[email protected]>
+
         Biquad getFrequencyResponse needs a layout test.
         https://bugs.webkit.org/show_bug.cgi?id=79503
 

Modified: trunk/LayoutTests/webaudio/delaynode-expected.txt (109665 => 109666)


--- trunk/LayoutTests/webaudio/delaynode-expected.txt	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/delaynode-expected.txt	2012-03-03 22:48:55 UTC (rev 109666)
@@ -2,7 +2,7 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-PASS Test signal was correctly delayed.
+PASS Test signal was correctly delayed by 0.5 sec.
 PASS successfullyParsed is true
 
 TEST COMPLETE

Copied: trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt (from rev 109665, trunk/LayoutTests/webaudio/delaynode-expected.txt) (0 => 109666)


--- trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-maxdelay-expected.txt	2012-03-03 22:48:55 UTC (rev 109666)
@@ -0,0 +1,9 @@
+Tests basic functionality of DelayNode with a non-default max delay time.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Test signal was correctly delayed by 1.5 sec.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/webaudio/delaynode-maxdelay.html (0 => 109666)


--- trunk/LayoutTests/webaudio/delaynode-maxdelay.html	                        (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-maxdelay.html	2012-03-03 22:48:55 UTC (rev 109666)
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+
+<body>
+
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+description("Tests basic functionality of DelayNode with a non-default max delay time.");
+
+function runTest() {
+    if (window.layoutTestController) {
+        layoutTestController.overridePreference("WebKitWebAudioEnabled", "1");
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+    
+    window.jsTestIsAsync = true;
+        
+    // Create offline audio context.
+    var context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
+    var toneBuffer = createToneBuffer(context, 20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
+    
+    var bufferSource = context.createBufferSource();
+    bufferSource.buffer = toneBuffer;
+
+    // Create a delay node with an explicit max delay time (greater than the default of 1 second).
+    var delay = context.createDelayNode(2);
+    // Set the delay time to a value greater than the default max delay so we can verify the delay
+    // is working for this case.
+    delayTimeSeconds = 1.5;
+    delay.delayTime.value = delayTimeSeconds;
+
+    bufferSource.connect(delay);
+    delay.connect(context.destination);
+    bufferSource.noteOn(0);
+    
+    context._oncomplete_ = checkDelayedResult(toneBuffer);
+    context.startRendering();
+}
+
+runTest();
+
+</script>
+
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt (109665 => 109666)


--- trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt	2012-03-03 22:48:55 UTC (rev 109666)
@@ -2,7 +2,7 @@
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
-PASS Test signal was correctly delayed.
+PASS Test signal was correctly delayed by 0.5 sec.
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/webaudio/resources/delay-testing.js (109665 => 109666)


--- trunk/LayoutTests/webaudio/resources/delay-testing.js	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/LayoutTests/webaudio/resources/delay-testing.js	2012-03-03 22:48:55 UTC (rev 109666)
@@ -37,6 +37,7 @@
             if (i < delayTimeFrames) {
                 // Check that initial portion is 0 (since signal is delayed).
                 if (renderedData[i] != 0) {
+                    testFailed("Initial portion is not 0 at frame " + i);
                     success = false;
                     break;
                 }
@@ -44,12 +45,14 @@
                 // Make sure that the tone data is delayed by exactly the expected number of frames.
                 var j = i - delayTimeFrames;
                 if (renderedData[i] != sourceData[j]) {
+                    testFailed("Actual data does not match expected data at frame " + i);
                     success = false;
                     break;
                 }
             } else {
                 // Make sure we have silence after the delayed tone.
                 if (renderedData[i] != 0) {
+                    testFailed("Final portion is not 0 at frame " + i);
                     success = false;
                     break;
                 }
@@ -57,9 +60,9 @@
         }
 
         if (success) {
-            testPassed("Test signal was correctly delayed.");
+            testPassed("Test signal was correctly delayed by " + delayTimeSeconds + " sec.");
         } else {
-            testFailed("Test signal was not correctly delayed.");
+            testFailed("Test signal was not correctly delayed by " + delayTimeSeconds + " sec.");
         }
 
         finishJSTest();

Modified: trunk/Source/WebCore/ChangeLog (109665 => 109666)


--- trunk/Source/WebCore/ChangeLog	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/ChangeLog	2012-03-03 22:48:55 UTC (rev 109666)
@@ -1,5 +1,43 @@
 2012-03-03  Raymond Toy  <[email protected]>
 
+        DelayNode has a fixed one second max delay time
+        https://bugs.webkit.org/show_bug.cgi?id=78758
+
+        Change DelayNode to accept an optional parameter to specify the
+        maximum delay allowed. If not specified, the default is 1 sec.
+        
+        Reviewed by Chris Rogers.
+
+        Test: webaudio/delaynode-maxdelay.html
+              webaudio/delaynode-maxdelay-expected.txt
+
+        * webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::createDelayNode): Allow maxDelayTime
+        parameter to specify max delay.
+        * webaudio/AudioContext.h: Allow maxDelayTime
+        parameter to specify max delay but default to 1.
+        (AudioContext):
+        * webaudio/AudioContext.idl: createDelayNode takes optional max
+        delay time parameter.
+        * webaudio/DelayDSPKernel.cpp:
+        (WebCore::DelayDSPKernel::DelayDSPKernel): Remove unused
+        DefaultMaxDelayTime. Set m_maxDelayTime from processor
+        maxDelayTime. 
+        * webaudio/DelayNode.cpp:
+        (WebCore::DelayNode::DelayNode): Add maxDelayTime parameter. 
+        * webaudio/DelayNode.h:
+        (WebCore::DelayNode::create): Add maxDelayTime parameter. 
+        (DelayNode): Add maxDelayTime parameter. 
+        * webaudio/DelayProcessor.cpp:
+        (WebCore::DelayProcessor::DelayProcessor): Add maxDelayTime
+        parameter.  
+        * webaudio/DelayProcessor.h:
+        (DelayProcessor): Add maxDelayTime parameter. 
+        (WebCore::DelayProcessor::maxDelayTime): New slot to hold
+        maxDelayTime. 
+
+2012-03-03  Raymond Toy  <[email protected]>
+
         Simplified discreteTimeConstantForSampleRate
         https://bugs.webkit.org/show_bug.cgi?id=78051
 

Modified: trunk/Source/WebCore/webaudio/AudioContext.cpp (109665 => 109666)


--- trunk/Source/WebCore/webaudio/AudioContext.cpp	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.cpp	2012-03-03 22:48:55 UTC (rev 109666)
@@ -445,9 +445,15 @@
 
 PassRefPtr<DelayNode> AudioContext::createDelayNode()
 {
+    const double defaultMaxDelayTime = 1;
+    return createDelayNode(defaultMaxDelayTime);
+}
+
+PassRefPtr<DelayNode> AudioContext::createDelayNode(double maxDelayTime)
+{
     ASSERT(isMainThread());
     lazyInitialize();
-    return DelayNode::create(this, m_destinationNode->sampleRate());
+    return DelayNode::create(this, m_destinationNode->sampleRate(), maxDelayTime);
 }
 
 PassRefPtr<AudioChannelSplitter> AudioContext::createChannelSplitter()

Modified: trunk/Source/WebCore/webaudio/AudioContext.h (109665 => 109666)


--- trunk/Source/WebCore/webaudio/AudioContext.h	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.h	2012-03-03 22:48:55 UTC (rev 109666)
@@ -114,6 +114,7 @@
     PassRefPtr<BiquadFilterNode> createBiquadFilter();
     PassRefPtr<WaveShaperNode> createWaveShaper();
     PassRefPtr<DelayNode> createDelayNode();
+    PassRefPtr<DelayNode> createDelayNode(double maxDelayTime);
     PassRefPtr<LowPass2FilterNode> createLowPass2Filter();
     PassRefPtr<HighPass2FilterNode> createHighPass2Filter();
     PassRefPtr<AudioPannerNode> createPanner();

Modified: trunk/Source/WebCore/webaudio/AudioContext.idl (109665 => 109666)


--- trunk/Source/WebCore/webaudio/AudioContext.idl	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/AudioContext.idl	2012-03-03 22:48:55 UTC (rev 109666)
@@ -63,7 +63,7 @@
 #endif
         // Processing nodes
         AudioGainNode createGainNode();
-        DelayNode createDelayNode();
+        DelayNode createDelayNode(in [Optional] double maxDelayTime);
         BiquadFilterNode createBiquadFilter();
         WaveShaperNode createWaveShaper();
         LowPass2FilterNode createLowPass2Filter();

Modified: trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp (109665 => 109666)


--- trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayDSPKernel.cpp	2012-03-03 22:48:55 UTC (rev 109666)
@@ -32,15 +32,13 @@
 #include <algorithm>
 
 using namespace std;
-  
-const float DefaultMaxDelayTime = 1;
+
 const float SmoothingTimeConstant = 0.020f; // 20ms
   
 namespace WebCore {
 
 DelayDSPKernel::DelayDSPKernel(DelayProcessor* processor)
     : AudioDSPKernel(processor)
-    , m_maxDelayTime(DefaultMaxDelayTime)
     , m_writeIndex(0)
     , m_firstTime(true)
 {
@@ -48,7 +46,8 @@
     if (!processor)
         return;
 
-    m_buffer.allocate(static_cast<size_t>(processor->sampleRate() * DefaultMaxDelayTime));
+    m_maxDelayTime = processor->maxDelayTime();
+    m_buffer.allocate(static_cast<size_t>(processor->sampleRate() * m_maxDelayTime));
     m_buffer.zero();
 
     m_smoothingRate = AudioUtilities::discreteTimeConstantForSampleRate(SmoothingTimeConstant, processor->sampleRate());

Modified: trunk/Source/WebCore/webaudio/DelayNode.cpp (109665 => 109666)


--- trunk/Source/WebCore/webaudio/DelayNode.cpp	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayNode.cpp	2012-03-03 22:48:55 UTC (rev 109666)
@@ -30,10 +30,10 @@
 
 namespace WebCore {
 
-DelayNode::DelayNode(AudioContext* context, float sampleRate)
+DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime)
     : AudioBasicProcessorNode(context, sampleRate)
 {
-    m_processor = adoptPtr(new DelayProcessor(sampleRate, 1));    
+    m_processor = adoptPtr(new DelayProcessor(sampleRate, 1, maxDelayTime));
     delayTime()->setContext(context);
     setNodeType(NodeTypeDelay);
 }

Modified: trunk/Source/WebCore/webaudio/DelayNode.h (109665 => 109666)


--- trunk/Source/WebCore/webaudio/DelayNode.h	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayNode.h	2012-03-03 22:48:55 UTC (rev 109666)
@@ -35,15 +35,15 @@
 
 class DelayNode : public AudioBasicProcessorNode {
 public:
-    static PassRefPtr<DelayNode> create(AudioContext* context, float sampleRate)
+    static PassRefPtr<DelayNode> create(AudioContext* context, float sampleRate, double maxDelayTime)
     {
-        return adoptRef(new DelayNode(context, sampleRate));      
+        return adoptRef(new DelayNode(context, sampleRate, maxDelayTime));      
     }
 
     AudioParam* delayTime();
 
 private:
-    DelayNode(AudioContext*, float sampleRate);
+    DelayNode(AudioContext*, float sampleRate, double maxDelayTime);
 
     DelayProcessor* delayProcessor() { return static_cast<DelayProcessor*>(processor()); }
 };

Modified: trunk/Source/WebCore/webaudio/DelayProcessor.cpp (109665 => 109666)


--- trunk/Source/WebCore/webaudio/DelayProcessor.cpp	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayProcessor.cpp	2012-03-03 22:48:55 UTC (rev 109666)
@@ -32,10 +32,11 @@
 
 namespace WebCore {
 
-DelayProcessor::DelayProcessor(float sampleRate, unsigned numberOfChannels)
+DelayProcessor::DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime)
     : AudioDSPKernelProcessor(sampleRate, numberOfChannels)
+    , m_maxDelayTime(maxDelayTime)
 {
-    m_delayTime = AudioParam::create("delayTime", 0.0, 0.0, 1.0);
+    m_delayTime = AudioParam::create("delayTime", 0.0, 0.0, maxDelayTime);
 }
 
 DelayProcessor::~DelayProcessor()

Modified: trunk/Source/WebCore/webaudio/DelayProcessor.h (109665 => 109666)


--- trunk/Source/WebCore/webaudio/DelayProcessor.h	2012-03-03 22:30:23 UTC (rev 109665)
+++ trunk/Source/WebCore/webaudio/DelayProcessor.h	2012-03-03 22:48:55 UTC (rev 109666)
@@ -37,15 +37,17 @@
     
 class DelayProcessor : public AudioDSPKernelProcessor {
 public:
-    DelayProcessor(float sampleRate, unsigned numberOfChannels);
+    DelayProcessor(float sampleRate, unsigned numberOfChannels, double maxDelayTime);
     virtual ~DelayProcessor();
     
     virtual PassOwnPtr<AudioDSPKernel> createKernel();
         
     AudioParam* delayTime() const { return m_delayTime.get(); }
 
+    double maxDelayTime() { return m_maxDelayTime; }
 private:
     RefPtr<AudioParam> m_delayTime;
+    double m_maxDelayTime;
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to