diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-11 16:31:55 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-01-11 16:31:55 +0000 |
| commit | 7b65bfb9cc26efcb3c09ee710eded50603e51726 (patch) | |
| tree | 3d4c0caa611dca6ddbe7211874f785c233b33c63 /src/plugins/Effect | |
| parent | 81d5c0c13a45cbf0f282e03cb72fae43aa77e4cf (diff) | |
| download | qmmp-7b65bfb9cc26efcb3c09ee710eded50603e51726.tar.gz qmmp-7b65bfb9cc26efcb3c09ee710eded50603e51726.tar.bz2 qmmp-7b65bfb9cc26efcb3c09ee710eded50603e51726.zip | |
soxr: fixed buffer size
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5987 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Effect')
| -rw-r--r-- | src/plugins/Effect/soxr/soxresampler.cpp | 9 | ||||
| -rw-r--r-- | src/plugins/Effect/soxr/soxresampler.h | 1 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/plugins/Effect/soxr/soxresampler.cpp b/src/plugins/Effect/soxr/soxresampler.cpp index 5bc876160..028fafce6 100644 --- a/src/plugins/Effect/soxr/soxresampler.cpp +++ b/src/plugins/Effect/soxr/soxresampler.cpp @@ -28,6 +28,7 @@ SoXResampler::SoXResampler() : Effect() { m_soxr = 0; m_out = 0; + m_out_samples = 0; QSettings settings(Qmmp::configFile(), QSettings::IniFormat); m_overSamplingFs = settings.value("SOXR/sample_rate", 48000).toInt(); m_quality = soxr_quality_spec(settings.value("SOXR/quality", SOXR_HQ).toInt(), 0); @@ -42,9 +43,9 @@ void SoXResampler::applyEffect(Buffer *b) { if(m_soxr && b->samples > 0) { - size_t frames = b->samples / channels(); size_t done = 0; - soxr_process(m_soxr, b->data, frames, 0, m_out, frames, &done); + soxr_process(m_soxr, b->data, b->samples / channels(), 0, + m_out, m_out_samples / channels(), &done); b->samples = done * channels(); if(b->samples > b->size) @@ -66,7 +67,8 @@ void SoXResampler::configure(quint32 freq, ChannelMap map) soxr_error_t error = 0; m_soxr = soxr_create(freq, m_overSamplingFs, map.count(), &error, 0, &m_quality, 0); double ratio = (double)m_overSamplingFs/freq; - m_out = new float[int(ratio * QMMP_BLOCK_FRAMES * map.count() * 2 + 2)]; + m_out_samples = ratio * QMMP_BLOCK_FRAMES * map.count() * 2 + 2; + m_out = new float[m_out_samples]; } Effect::configure(m_overSamplingFs, map); } @@ -82,5 +84,6 @@ void SoXResampler::freeSoXR() { delete [] m_out; m_out = 0; + m_out_samples = 0; } } diff --git a/src/plugins/Effect/soxr/soxresampler.h b/src/plugins/Effect/soxr/soxresampler.h index 026d60b3c..a6741aafa 100644 --- a/src/plugins/Effect/soxr/soxresampler.h +++ b/src/plugins/Effect/soxr/soxresampler.h @@ -40,6 +40,7 @@ private: void freeSoXR(); quint32 m_overSamplingFs; float *m_out; + size_t m_out_samples; soxr_quality_spec_t m_quality; soxr_t m_soxr; |
