Fix handling of oversized process buffers in mid-side mode
This commit is contained in:
@@ -669,6 +669,9 @@ R3Stretcher::ensureInbuf(int required, bool warn)
|
|||||||
for (int c = 0; c < m_parameters.channels; ++c) {
|
for (int c = 0; c < m_parameters.channels; ++c) {
|
||||||
auto newBuf = m_channelData[c]->inbuf->resized(newSize);
|
auto newBuf = m_channelData[c]->inbuf->resized(newSize);
|
||||||
m_channelData[c]->inbuf = std::unique_ptr<RingBuffer<float>>(newBuf);
|
m_channelData[c]->inbuf = std::unique_ptr<RingBuffer<float>>(newBuf);
|
||||||
|
// mixdown is used for mid-side mixing as well as the single
|
||||||
|
// hop output mix, so it needs to be enough to match the inbuf
|
||||||
|
m_channelData[c]->mixdown.resize(newSize, 0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -913,6 +916,11 @@ R3Stretcher::prepareInput(const float *const *input, int ix, int n)
|
|||||||
if (useMidSide()) {
|
if (useMidSide()) {
|
||||||
auto &c0 = m_channelData.at(0)->mixdown;
|
auto &c0 = m_channelData.at(0)->mixdown;
|
||||||
auto &c1 = m_channelData.at(1)->mixdown;
|
auto &c1 = m_channelData.at(1)->mixdown;
|
||||||
|
int bufsize = c0.size();
|
||||||
|
if (n > bufsize) {
|
||||||
|
m_log.log(0, "R3Stretcher::prepareInput: WARNING: called with size greater than mixdown buffer length", n, bufsize);
|
||||||
|
n = bufsize;
|
||||||
|
}
|
||||||
for (int i = 0; i < n; ++i) {
|
for (int i = 0; i < n; ++i) {
|
||||||
float l = input[0][i + ix];
|
float l = input[0][i + ix];
|
||||||
float r = input[1][i + ix];
|
float r = input[1][i + ix];
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ protected:
|
|||||||
BinClassifier::Classification::Residual),
|
BinClassifier::Classification::Residual),
|
||||||
segmenter(new BinSegmenter(segmenterParameters)),
|
segmenter(new BinSegmenter(segmenterParameters)),
|
||||||
segmentation(), prevSegmentation(), nextSegmentation(),
|
segmentation(), prevSegmentation(), nextSegmentation(),
|
||||||
mixdown(hopBufferSize, 0.f),
|
mixdown(inRingBufferSize, 0.f),
|
||||||
resampled(hopBufferSize, 0.f),
|
resampled(hopBufferSize, 0.f),
|
||||||
inbuf(new RingBuffer<float>(inRingBufferSize)),
|
inbuf(new RingBuffer<float>(inRingBufferSize)),
|
||||||
outbuf(new RingBuffer<float>(outRingBufferSize)),
|
outbuf(new RingBuffer<float>(outRingBufferSize)),
|
||||||
|
|||||||
Reference in New Issue
Block a user