Title: [116465] trunk
Revision
116465
Author
[email protected]
Date
2012-05-08 16:24:04 -0700 (Tue, 08 May 2012)

Log Message

_javascript_AudioNode should not ASSERT if number of input channels is 0
https://bugs.webkit.org/show_bug.cgi?id=85818

Patch by Raymond Toy <[email protected]> on 2012-05-08
Reviewed by Eric Seidel.

Source/WebCore:

Test: webaudio/_javascript_audionode-zero-input-channels.html

* Modules/webaudio/_javascript_AudioNode.cpp:
(WebCore::_javascript_AudioNode::process): Update buffersAreGood.
(WebCore::_javascript_AudioNode::fireProcessEvent): Remove ASSERT.

LayoutTests:

* webaudio/_javascript_audionode-zero-input-channels-expected.txt: Added.
* webaudio/_javascript_audionode-zero-input-channels.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (116464 => 116465)


--- trunk/LayoutTests/ChangeLog	2012-05-08 23:21:43 UTC (rev 116464)
+++ trunk/LayoutTests/ChangeLog	2012-05-08 23:24:04 UTC (rev 116465)
@@ -1,3 +1,13 @@
+2012-05-08  Raymond Toy  <[email protected]>
+
+        _javascript_AudioNode should not ASSERT if number of input channels is 0
+        https://bugs.webkit.org/show_bug.cgi?id=85818
+
+        Reviewed by Eric Seidel.
+
+        * webaudio/_javascript_audionode-zero-input-channels-expected.txt: Added.
+        * webaudio/_javascript_audionode-zero-input-channels.html: Added.
+
 2012-05-08  Alexander Shalamov  <[email protected]>
 
         [EFL][DRT] EventSender needs implementation of leapForward function

Added: trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels-expected.txt (0 => 116465)


--- trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels-expected.txt	2012-05-08 23:24:04 UTC (rev 116465)
@@ -0,0 +1,10 @@
+Tests that _javascript_AudioNode accepts 0 input channels.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Successfully created _javascript_AudioNode.
+PASS _javascript_AudioNode accepts 0 input channels.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels.html (0 => 116465)


--- trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels.html	                        (rev 0)
+++ trunk/LayoutTests/webaudio/_javascript_audionode-zero-input-channels.html	2012-05-08 23:24:04 UTC (rev 116465)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+<script src=""
+</head>
+
+<body>
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+description("Tests that _javascript_AudioNode accepts 0 input channels.");
+
+var sampleRate = 44100.0;
+var renderLengthInFrames = 512;
+var bufferSize = 512;
+
+function checkResult(e)
+{
+    testPassed("_javascript_AudioNode accepts 0 input channels.");
+
+    finishJSTest();
+}
+
+function runTest()
+{
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+
+    window.jsTestIsAsync = true;
+
+    var context = new webkitAudioContext(1, renderLengthInFrames, sampleRate);
+
+    var node;
+
+    try {  
+        node = context.createJavaScriptNode(bufferSize, 0, 1);
+        testPassed("Successfully created _javascript_AudioNode.");
+    } catch (e) {
+        testFailed("Failed to create _javascript_AudioNode.");
+    }
+
+    var source = context.createBufferSource();
+    source.buffer = createImpulseBuffer(context, bufferSize);
+
+    // The onaudioprocess function doesn't need to do anything.  We just need the process to start
+    // to test that implementation accepts 0 input channels.
+    //
+    // FIXME: check the .inputBuffer attribute of the AudioProcessingEvent.
+    node._onaudioprocess_ = function(e) { };
+    source.connect(node);
+    node.connect(context.destination);
+    source.noteOn(0);
+
+    context._oncomplete_ = checkResult;
+    context.startRendering();
+}
+
+runTest();
+successfullyParsed = true;
+</script>
+    
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (116464 => 116465)


--- trunk/Source/WebCore/ChangeLog	2012-05-08 23:21:43 UTC (rev 116464)
+++ trunk/Source/WebCore/ChangeLog	2012-05-08 23:24:04 UTC (rev 116465)
@@ -1,3 +1,16 @@
+2012-05-08  Raymond Toy  <[email protected]>
+
+        _javascript_AudioNode should not ASSERT if number of input channels is 0
+        https://bugs.webkit.org/show_bug.cgi?id=85818
+
+        Reviewed by Eric Seidel.
+
+        Test: webaudio/_javascript_audionode-zero-input-channels.html
+
+        * Modules/webaudio/_javascript_AudioNode.cpp:
+        (WebCore::_javascript_AudioNode::process): Update buffersAreGood.
+        (WebCore::_javascript_AudioNode::fireProcessEvent): Remove ASSERT.
+
 2012-05-08  Dana Jansens  <[email protected]>
 
         Region reads past end of spans

Modified: trunk/Source/WebCore/Modules/webaudio/_javascript_AudioNode.cpp (116464 => 116465)


--- trunk/Source/WebCore/Modules/webaudio/_javascript_AudioNode.cpp	2012-05-08 23:21:43 UTC (rev 116464)
+++ trunk/Source/WebCore/Modules/webaudio/_javascript_AudioNode.cpp	2012-05-08 23:24:04 UTC (rev 116465)
@@ -151,8 +151,13 @@
     AudioBuffer* outputBuffer = m_outputBuffers[doubleBufferIndex].get();
 
     // Check the consistency of input and output buffers.
-    bool buffersAreGood = inputBuffer && outputBuffer && bufferSize() == inputBuffer->length() && bufferSize() == outputBuffer->length()
-        && m_bufferReadWriteIndex + framesToProcess <= bufferSize();
+    unsigned numberOfInputChannels = m_internalInputBus.numberOfChannels();
+    bool buffersAreGood = outputBuffer && bufferSize() == outputBuffer->length() && m_bufferReadWriteIndex + framesToProcess <= bufferSize();
+
+    // If the number of input channels is zero, it's ok to have inputBuffer = 0.
+    if (m_internalInputBus.numberOfChannels())
+        buffersAreGood = buffersAreGood && inputBuffer && bufferSize() == inputBuffer->length();
+
     ASSERT(buffersAreGood);
     if (!buffersAreGood)
         return;
@@ -163,7 +168,6 @@
     if (!isFramesToProcessGood)
         return;
 
-    unsigned numberOfInputChannels = m_internalInputBus.numberOfChannels();
     unsigned numberOfOutputChannels = outputBus->numberOfChannels();
 
     bool channelsAreGood = (numberOfInputChannels == m_numberOfInputChannels) && (numberOfOutputChannels == m_numberOfOutputChannels);
@@ -231,8 +235,8 @@
         
     AudioBuffer* inputBuffer = m_inputBuffers[m_doubleBufferIndexForEvent].get();
     AudioBuffer* outputBuffer = m_outputBuffers[m_doubleBufferIndexForEvent].get();
-    ASSERT(inputBuffer && outputBuffer);
-    if (!inputBuffer || !outputBuffer)
+    ASSERT(outputBuffer);
+    if (!outputBuffer)
         return;
 
     // Avoid firing the event if the document has already gone away.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to