From dd1a3496c25d63e0bdf94a1b6f99cf4e58b9c960 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 29 Jul 2013 10:54:03 +0100 Subject: [PATCH] Fixed the AudioSampleBuffer copy-constructor's behaviour to match its description. --- .../buffers/juce_AudioSampleBuffer.cpp | 34 ++++++++++++------- .../buffers/juce_AudioSampleBuffer.h | 4 +-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp index 3f6c0f0edd..ab670ae1a4 100644 --- a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp +++ b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp @@ -22,25 +22,33 @@ ============================================================================== */ -AudioSampleBuffer::AudioSampleBuffer (const int numChannels_, +AudioSampleBuffer::AudioSampleBuffer (const int numChans, const int numSamples) noexcept - : numChannels (numChannels_), + : numChannels (numChans), size (numSamples) { jassert (numSamples >= 0); - jassert (numChannels_ > 0); + jassert (numChans > 0); allocateData(); } AudioSampleBuffer::AudioSampleBuffer (const AudioSampleBuffer& other) noexcept : numChannels (other.numChannels), - size (other.size) + size (other.size), + allocatedBytes (other.allocatedBytes) { - allocateData(); + if (allocatedBytes == 0) + { + allocateChannels (other.channels, 0); + } + else + { + allocateData(); - for (int i = 0; i < numChannels; ++i) - FloatVectorOperations::copy (channels[i], other.channels[i], size); + for (int i = 0; i < numChannels; ++i) + FloatVectorOperations::copy (channels[i], other.channels[i], size); + } } void AudioSampleBuffer::allocateData() @@ -61,25 +69,25 @@ void AudioSampleBuffer::allocateData() } AudioSampleBuffer::AudioSampleBuffer (float* const* dataToReferTo, - const int numChannels_, + const int numChans, const int numSamples) noexcept - : numChannels (numChannels_), + : numChannels (numChans), size (numSamples), allocatedBytes (0) { - jassert (numChannels_ > 0); + jassert (numChans > 0); allocateChannels (dataToReferTo, 0); } AudioSampleBuffer::AudioSampleBuffer (float* const* dataToReferTo, - const int numChannels_, + const int numChans, const int startSample, const int numSamples) noexcept - : numChannels (numChannels_), + : numChannels (numChans), size (numSamples), allocatedBytes (0) { - jassert (numChannels_ > 0); + jassert (numChans > 0); allocateChannels (dataToReferTo, startSample); } diff --git a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h index 33312912bb..bff2a0a7ce 100644 --- a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h +++ b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h @@ -96,16 +96,14 @@ public: AudioSampleBuffer (const AudioSampleBuffer& other) noexcept; /** Copies another buffer onto this one. - This buffer's size will be changed to that of the other buffer. */ AudioSampleBuffer& operator= (const AudioSampleBuffer& other) noexcept; /** Destructor. - This will free any memory allocated by the buffer. */ - virtual ~AudioSampleBuffer() noexcept; + ~AudioSampleBuffer() noexcept; //============================================================================== /** Returns the number of channels of audio data that this buffer contains.