Browse Source

Fixed a bug where large FFTs would fail

tags/2021-05-28
hogliux 10 years ago
parent
commit
9538d0dfc8
1 changed files with 14 additions and 2 deletions
  1. +14
    -2
      modules/juce_audio_basics/effects/juce_FFT.cpp

+ 14
- 2
modules/juce_audio_basics/effects/juce_FFT.cpp View File

@@ -230,7 +230,13 @@ void FFT::performRealOnlyForwardTransform (float* d) const noexcept
// This can only be called on an FFT object that was created to do forward transforms.
jassert (! config->inverse);
Complex* const scratch = static_cast<Complex*> (alloca (16 + sizeof (Complex) * (size_t) size));
const size_t sizeInBytes = 16 + sizeof (Complex) * (size_t) size;
Complex* scratch = static_cast<Complex*> (alloca (sizeInBytes));
// try malloc if alloca fails
if (scratch == nullptr)
scratch = static_cast<Complex*> (malloc (sizeInBytes));
for (int i = 0; i < size; ++i)
{
@@ -246,7 +252,13 @@ void FFT::performRealOnlyInverseTransform (float* d) const noexcept
// This can only be called on an FFT object that was created to do inverse transforms.
jassert (config->inverse);
Complex* const scratch = static_cast<Complex*> (alloca (16 + sizeof (Complex) * (size_t) size));
const size_t sizeInBytes = 16 + sizeof (Complex) * (size_t) size;
Complex* scratch = static_cast<Complex*> (alloca (sizeInBytes));
// try malloc if alloca fails
if (scratch == nullptr)
scratch = static_cast<Complex*> (malloc (sizeInBytes));
perform (reinterpret_cast<const Complex*> (d), scratch);


Loading…
Cancel
Save