From f8816abba0047b8fb2abeee0ff06c9602d544e70 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 13 Mar 2009 16:22:42 +0000 Subject: [PATCH] removed the malloc from the constructor of a read-only AudioSampleBuffer --- juce_amalgamated.cpp | 10 ++++++++-- juce_amalgamated.h | 7 ++++--- .../audio/dsp/juce_AudioSampleBuffer.cpp | 10 ++++++++-- .../audio/dsp/juce_AudioSampleBuffer.h | 1 + 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index f9e848ea7f..5dd2f6a4ed 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -23699,7 +23699,11 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, { jassert (numChannels_ > 0); - channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); + // (try to avoid doing a malloc here, as that'll blow up things like Pro-Tools) + if (numChannels_ < numElementsInArray (preallocatedChannelSpace)) + channels = (float**) preallocatedChannelSpace; + else + channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); for (int i = 0; i < numChannels_; ++i) { @@ -23788,7 +23792,9 @@ const AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer& AudioSampleBuffer::~AudioSampleBuffer() throw() { juce_free (allocatedData); - juce_free (channels); + + if (channels != (float**) preallocatedChannelSpace) + juce_free (channels); } float* AudioSampleBuffer::getSampleData (const int channelNumber, diff --git a/juce_amalgamated.h b/juce_amalgamated.h index f2db242d27..3ff288418a 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -27182,6 +27182,7 @@ private: int numChannels, size, allocatedBytes; float** channels; float* allocatedData; + float* preallocatedChannelSpace [32]; }; #endif // __JUCE_AUDIOSAMPLEBUFFER_JUCEHEADER__ @@ -45853,9 +45854,6 @@ private: #endif #ifndef __JUCE_TOOLBARITEMCOMPONENT_JUCEHEADER__ -#endif -#ifndef __JUCE_TREEVIEW_JUCEHEADER__ - #endif #ifndef __JUCE_TEXTEDITOR_JUCEHEADER__ @@ -46649,6 +46647,9 @@ private: #endif #ifndef __JUCE_LABEL_JUCEHEADER__ +#endif +#ifndef __JUCE_TREEVIEW_JUCEHEADER__ + #endif #ifndef __JUCE_SLIDERPROPERTYCOMPONENT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp index 7b42748d90..3842aba929 100644 --- a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp +++ b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp @@ -71,7 +71,11 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, { jassert (numChannels_ > 0); - channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); + // (try to avoid doing a malloc here, as that'll blow up things like Pro-Tools) + if (numChannels_ < numElementsInArray (preallocatedChannelSpace)) + channels = (float**) preallocatedChannelSpace; + else + channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); for (int i = 0; i < numChannels_; ++i) { @@ -160,7 +164,9 @@ const AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer& AudioSampleBuffer::~AudioSampleBuffer() throw() { juce_free (allocatedData); - juce_free (channels); + + if (channels != (float**) preallocatedChannelSpace) + juce_free (channels); } float* AudioSampleBuffer::getSampleData (const int channelNumber, diff --git a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h index 4340c0bba6..47466d9e62 100644 --- a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h +++ b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h @@ -409,6 +409,7 @@ private: int numChannels, size, allocatedBytes; float** channels; float* allocatedData; + float* preallocatedChannelSpace [32]; };