From 99c14e26d69d44572d0e904e4cec40a41c4c74b4 Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Tue, 20 Aug 2013 16:45:40 -0400 Subject: [PATCH] * #28679: audio: don't create a new scratch buffer every time we resample --- daemon/src/audio/samplerateconverter.cpp | 9 +++++---- daemon/src/audio/samplerateconverter.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/daemon/src/audio/samplerateconverter.cpp b/daemon/src/audio/samplerateconverter.cpp index 2f6c3d0e03..fbc32c1664 100644 --- a/daemon/src/audio/samplerateconverter.cpp +++ b/daemon/src/audio/samplerateconverter.cpp @@ -32,7 +32,7 @@ #include "sfl_types.h" SamplerateConverter::SamplerateConverter(int freq, size_t channels /* = 1 */) : floatBufferIn_(), - floatBufferOut_(), samples_(0), channels_(channels), maxFreq_(freq), src_state_(0) + floatBufferOut_(), scratchBuffer_(), samples_(0), channels_(channels), maxFreq_(freq), src_state_(0) { int err; src_state_ = src_new(SRC_LINEAR, channels_, &err); @@ -41,6 +41,7 @@ SamplerateConverter::SamplerateConverter(int freq, size_t channels /* = 1 */) : floatBufferIn_.resize(samples_); floatBufferOut_.resize(samples_); + scratchBuffer_.resize(samples_); } SamplerateConverter::~SamplerateConverter() @@ -86,6 +87,7 @@ void SamplerateConverter::resample(const AudioBuffer &dataIn, AudioBuffer &dataO samples_ = std::max(inSamples, outSamples); floatBufferIn_.resize(inSamples); floatBufferOut_.resize(outSamples); + scratchBuffer_.resize(outSamples); SRC_DATA src_data; src_data.data_in = floatBufferIn_.data(); @@ -102,7 +104,6 @@ void SamplerateConverter::resample(const AudioBuffer &dataIn, AudioBuffer &dataO /* TODO: one-shot deinterleave and float-to-short conversion */ - std::vector<SFLAudioSample> scratch_buff(outSamples); - src_float_to_short_array(floatBufferOut_.data(), scratch_buff.data(), outSamples); - dataOut.deinterleave(scratch_buff.data(), src_data.output_frames, nbChans); + src_float_to_short_array(floatBufferOut_.data(), scratchBuffer_.data(), outSamples); + dataOut.deinterleave(scratchBuffer_.data(), src_data.output_frames, nbChans); } diff --git a/daemon/src/audio/samplerateconverter.h b/daemon/src/audio/samplerateconverter.h index 2b533e2083..41f0e8be5e 100644 --- a/daemon/src/audio/samplerateconverter.h +++ b/daemon/src/audio/samplerateconverter.h @@ -78,6 +78,7 @@ class SamplerateConverter { /* temporary buffers */ std::vector<float> floatBufferIn_; std::vector<float> floatBufferOut_; + std::vector<SFLAudioSample> scratchBuffer_; size_t samples_; // size in samples of temporary buffers size_t channels_; // number of channels configured -- GitLab