Changeset 122630 in webkit


Ignore:
Timestamp:
Jul 13, 2012 2:10:37 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

DelayNode doesn't work if delayTime.value == delayTime.maxValue
https://bugs.webkit.org/show_bug.cgi?id=90357

Patch by Raymond Toy <Raymond Toy> on 2012-07-13
Reviewed by Kenneth Russell.

Source/WebCore:

Increase delay buffer size slightly so that the read and write
pointers don't become equal when the delay and the max delay are
the same.

Tests: webaudio/delaynode-max-default-delay.html

webaudio/delaynode-max-nondefault-delay.html

  • Modules/webaudio/DelayDSPKernel.cpp:

(WebCore): Moved SmoothingTimeConstant to WebCore namespace.
(WebCore::DelayDSPKernel::DelayDSPKernel): Add some additional checks to prevent crashes; use bufferLengthForDelay to compute buffer length.
(WebCore::DelayDSPKernel::bufferLengthForDelay): New function to compute buffer length.

  • Modules/webaudio/DelayDSPKernel.h:

(DelayDSPKernel): Declare bufferLengthForDelay.

LayoutTests:

New tests to test the case when the delay node delay equals the
maximum allowed delay. Add one test for the default maximum delay
and a second test with a user-set maximum delay.

  • webaudio/delaynode-max-default-delay-expected.txt: Added.
  • webaudio/delaynode-max-default-delay.html: Added.
  • webaudio/delaynode-max-nondefault-delay-expected.txt: Added.
  • webaudio/delaynode-max-nondefault-delay.html: Added.
Location:
trunk
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r122628 r122630  
     12012-07-13  Raymond Toy  <rtoy@google.com>
     2
     3        DelayNode doesn't work if delayTime.value == delayTime.maxValue
     4        https://bugs.webkit.org/show_bug.cgi?id=90357
     5
     6        Reviewed by Kenneth Russell.
     7
     8        New tests to test the case when the delay node delay equals the
     9        maximum allowed delay. Add one test for the default maximum delay
     10        and a second test with a user-set maximum delay.
     11       
     12        * webaudio/delaynode-max-default-delay-expected.txt: Added.
     13        * webaudio/delaynode-max-default-delay.html: Added.
     14        * webaudio/delaynode-max-nondefault-delay-expected.txt: Added.
     15        * webaudio/delaynode-max-nondefault-delay.html: Added.
     16
    1172012-07-13  Vineet Chaudhary  <rgf748@motorola.com>
    218
  • trunk/Source/WebCore/ChangeLog

    r122629 r122630  
     12012-07-13  Raymond Toy  <rtoy@google.com>
     2
     3        DelayNode doesn't work if delayTime.value == delayTime.maxValue
     4        https://bugs.webkit.org/show_bug.cgi?id=90357
     5
     6        Reviewed by Kenneth Russell.
     7
     8        Increase delay buffer size slightly so that the read and write
     9        pointers don't become equal when the delay and the max delay are
     10        the same.
     11       
     12        Tests: webaudio/delaynode-max-default-delay.html
     13               webaudio/delaynode-max-nondefault-delay.html
     14
     15        * Modules/webaudio/DelayDSPKernel.cpp:
     16        (WebCore): Moved SmoothingTimeConstant to WebCore namespace.
     17        (WebCore::DelayDSPKernel::DelayDSPKernel): Add some additional checks to prevent crashes; use bufferLengthForDelay to compute buffer length.
     18        (WebCore::DelayDSPKernel::bufferLengthForDelay): New function to compute buffer length.
     19        * Modules/webaudio/DelayDSPKernel.h:
     20        (DelayDSPKernel): Declare bufferLengthForDelay.
     21
    1222012-07-13  Benjamin Poulain  <bpoulain@apple.com>
    223
  • trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp

    r111474 r122630  
    3434using namespace std;
    3535
     36namespace WebCore {
     37
    3638const float SmoothingTimeConstant = 0.020f; // 20ms
    37  
    38 namespace WebCore {
    3939
    4040DelayDSPKernel::DelayDSPKernel(DelayProcessor* processor)
     
    4444{
    4545    ASSERT(processor && processor->sampleRate() > 0);
    46     if (!processor)
     46    if (!(processor && processor->sampleRate() > 0))
    4747        return;
    4848
    4949    m_maxDelayTime = processor->maxDelayTime();
    50     m_buffer.allocate(static_cast<size_t>(processor->sampleRate() * m_maxDelayTime));
     50    ASSERT(m_maxDelayTime >= 0);
     51    if (m_maxDelayTime < 0)
     52        return;
     53   
     54    m_buffer.allocate(bufferLengthForDelay(m_maxDelayTime, processor->sampleRate()));
    5155    m_buffer.zero();
    5256
     
    6468        return;
    6569       
    66     size_t bufferLength = static_cast<size_t>(sampleRate * maxDelayTime);
     70    size_t bufferLength = bufferLengthForDelay(maxDelayTime, sampleRate);
    6771    ASSERT(bufferLength);
    6872    if (!bufferLength)
     
    7377
    7478    m_smoothingRate = AudioUtilities::discreteTimeConstantForSampleRate(SmoothingTimeConstant, sampleRate);
     79}
     80
     81size_t DelayDSPKernel::bufferLengthForDelay(double maxDelayTime, double sampleRate) const
     82{
     83    // Compute the length of the buffer needed to handle a max delay of |maxDelayTime|. One is
     84    // added to handle the case where the actual delay equals the maximum delay.
     85    return 1 + AudioUtilities::timeToSampleFrame(maxDelayTime, sampleRate);
    7586}
    7687
  • trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.h

    r111474 r122630  
    5959
    6060    DelayProcessor* delayProcessor() { return static_cast<DelayProcessor*>(processor()); }
     61    size_t bufferLengthForDelay(double delayTime, double sampleRate) const;
    6162};
    6263
Note: See TracChangeset for help on using the changeset viewer.