Skip to content

Commit bc3c171

Browse files
committed
AudioBuffer: Avoid unnecessary allocations when reassigning referenced channels
1 parent 8480820 commit bc3c171

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -487,16 +487,33 @@ class AudioBuffer
487487
jassert (dataToReferTo != nullptr);
488488
jassert (newNumChannels >= 0 && newNumSamples >= 0);
489489

490-
if (allocatedBytes != 0)
490+
size = newNumSamples;
491+
492+
if (newNumChannels <= numChannels)
491493
{
492-
allocatedBytes = 0;
493-
allocatedData.free();
494+
numChannels = newNumChannels;
495+
496+
std::transform (dataToReferTo, dataToReferTo + numChannels, channels, [&] (auto* src)
497+
{
498+
jassert (src != nullptr);
499+
return src + newStartSample;
500+
});
501+
502+
channels[numChannels] = nullptr;
503+
isClear = false;
494504
}
505+
else
506+
{
507+
if (allocatedBytes != 0)
508+
{
509+
allocatedBytes = 0;
510+
allocatedData.free();
511+
}
495512

496-
numChannels = newNumChannels;
497-
size = newNumSamples;
513+
numChannels = newNumChannels;
514+
allocateChannels (dataToReferTo, newStartSample);
515+
}
498516

499-
allocateChannels (dataToReferTo, newStartSample);
500517
jassert (! isClear);
501518
}
502519

0 commit comments

Comments
 (0)