From 2169872ee8c99475c98a09ff2da12fe301d23cea Mon Sep 17 00:00:00 2001 From: Josh Siegle <joshs@alleninstitute.org> Date: Fri, 19 Sep 2014 17:57:13 -0700 Subject: [PATCH] Add check for buffer overrun in AudioNode --- Builds/VisualStudio2012/open-ephys.vcxproj | 2 +- Source/Processors/AudioNode.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Builds/VisualStudio2012/open-ephys.vcxproj b/Builds/VisualStudio2012/open-ephys.vcxproj index 916ed2f2d..7d9084d23 100644 --- a/Builds/VisualStudio2012/open-ephys.vcxproj +++ b/Builds/VisualStudio2012/open-ephys.vcxproj @@ -96,7 +96,7 @@ <ProgramDataBaseFileName>$(IntDir)\</ProgramDataBaseFileName> <WarningLevel>Level4</WarningLevel> <SuppressStartupBanner>true</SuppressStartupBanner> - <MultiProcessorCompilation>true</MultiProcessorCompilation> + <MultiProcessorCompilation>false</MultiProcessorCompilation> </ClCompile> <ResourceCompile> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> diff --git a/Source/Processors/AudioNode.cpp b/Source/Processors/AudioNode.cpp index a804995f4..6abd062f2 100755 --- a/Source/Processors/AudioNode.cpp +++ b/Source/Processors/AudioNode.cpp @@ -336,7 +336,7 @@ void AudioNode::process(AudioSampleBuffer& buffer, // std::cout << "Samples remaining in incoming buffer: " << orphanedSamples << std::endl; - if (orphanedSamples > 0) + if (orphanedSamples > 0 && (samplesInBackupBuffer + orphanedSamples < backupBuffer->getNumSamples())) { backupBuffer->addFrom(0, // destination channel samplesInBackupBuffer, // destination start sample @@ -356,7 +356,11 @@ void AudioNode::process(AudioSampleBuffer& buffer, gain // gain to apply ); - } + } + else { + samplesInBackupBuffer = 0; // just throw out the buffer in the case of an overrun + // not ideal, but the output still sounds fine + } // Simple implementation of a "noise gate" on audio output expander.process(buffer.getWritePointer(0), // left channel -- GitLab