Pull out ms buffer onto the heap (was being used after end of block in which it was allocated on the stack)

This commit is contained in:
Chris Cannam
2013-05-15 10:55:11 +01:00
parent 6aa75133d6
commit 05e14a6a7d
3 changed files with 10 additions and 9 deletions

View File

@@ -86,6 +86,7 @@ RubberBandStretcher::Impl::ChannelData::construct(const std::set<size_t> &sizes,
accumulator = allocate_and_zero<float>(maxSize);
windowAccumulator = allocate_and_zero<float>(maxSize);
ms = allocate_and_zero<float>(maxSize);
interpolator = allocate_and_zero<float>(maxSize);
interpolatorScale = 0;
@@ -176,8 +177,8 @@ RubberBandStretcher::Impl::ChannelData::setSizes(size_t windowSize,
envelope = reallocate_and_zero(envelope, oldReal, realSize);
fltbuf = reallocate_and_zero(fltbuf, oldMax, maxSize);
dblbuf = reallocate_and_zero(dblbuf, oldMax, maxSize);
interpolator = reallocate_and_zero<float>(interpolator, oldMax, maxSize);
ms = reallocate_and_zero(ms, oldMax, maxSize);
interpolator = reallocate_and_zero(interpolator, oldMax, maxSize);
// But we do want to preserve data in these
@@ -243,6 +244,8 @@ RubberBandStretcher::Impl::ChannelData::~ChannelData()
deallocate(prevError);
deallocate(unwrappedPhase);
deallocate(envelope);
deallocate(interpolator);
deallocate(ms);
deallocate(accumulator);
deallocate(windowAccumulator);
deallocate(fltbuf);

View File

@@ -111,6 +111,7 @@ public:
float *accumulator;
size_t accumulatorFill;
float *windowAccumulator;
float *ms; // only used when mid-side processing
float *interpolator; // only used when time-domain smoothing is on
int interpolatorScale;

View File

@@ -183,7 +183,6 @@ RubberBandStretcher::Impl::consumeChannel(size_t c,
bool resampling = resampleBeforeStretching();
float *ms = 0;
const float *input = 0;
bool useMidSide = ((m_options & OptionChannelsTogether) &&
@@ -214,9 +213,8 @@ RubberBandStretcher::Impl::consumeChannel(size_t c,
#endif
if (useMidSide) {
ms = (float *)alloca(samples * sizeof(float));
prepareChannelMS(c, inputs, offset, samples, ms);
input = ms;
prepareChannelMS(c, inputs, offset, samples, cd.ms);
input = cd.ms;
} else {
input = inputs[c] + offset;
}
@@ -252,9 +250,8 @@ RubberBandStretcher::Impl::consumeChannel(size_t c,
} else {
if (useMidSide) {
ms = (float *)alloca(toWrite * sizeof(float));
prepareChannelMS(c, inputs, offset, toWrite, ms);
input = ms;
prepareChannelMS(c, inputs, offset, toWrite, cd.ms);
input = cd.ms;
} else {
input = inputs[c] + offset;
}