diff options
author | RJ Ryan <rryan@mixxx.org> | 2013-12-20 11:30:06 -0500 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2013-12-21 00:50:16 -0500 |
commit | 231caa64c27c133e8ef69156a517f6a50ec36362 (patch) | |
tree | cdef925c78465cf86dcffccf8a3ad92c63b64b4a /src/vinylcontrol/vinylcontrolxwax.cpp | |
parent | 5227eadc4c47c034c4281b0c3ea7019c62fdec67 (diff) |
Dynamically allocate VinylControlXwax::m_pWorkBuffer.
Diffstat (limited to 'src/vinylcontrol/vinylcontrolxwax.cpp')
-rw-r--r-- | src/vinylcontrol/vinylcontrolxwax.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/vinylcontrol/vinylcontrolxwax.cpp b/src/vinylcontrol/vinylcontrolxwax.cpp index 7384aa29d7..0a910d1ed4 100644 --- a/src/vinylcontrol/vinylcontrolxwax.cpp +++ b/src/vinylcontrol/vinylcontrolxwax.cpp @@ -44,6 +44,8 @@ QMutex VinylControlXwax::s_xwaxLUTMutex; VinylControlXwax::VinylControlXwax(ConfigObject<ConfigValue> * pConfig, QString group) : VinylControl(pConfig, group) { dOldPos = 0.0f; + m_pWorkBuffer = new short[MAX_BUFFER_LEN]; + m_workBufferSize = MAX_BUFFER_LEN; char * timecode = NULL; bForceResync = false; iOldMode = MIXXX_VCMODE_ABSOLUTE; @@ -155,6 +157,7 @@ VinylControlXwax::~VinylControlXwax() delete m_pSteadySubtle; delete m_pSteadyGross; delete [] m_pPitchRing; + delete [] m_pWorkBuffer; //Cleanup xwax nicely timecoder_monitor_clear(&timecoder); @@ -197,9 +200,17 @@ void VinylControlXwax::analyzeSamples(CSAMPLE* pSamples, size_t nFrames) { gain = 1.0f; } + size_t samplesSize = nFrames * kChannels; + + if (samplesSize > m_workBufferSize) { + delete [] m_pWorkBuffer; + m_pWorkBuffer = new short[samplesSize]; + m_workBufferSize = samplesSize; + } + // Convert CSAMPLE samples to shorts, preventing overflow. - for (int i = 0; i < static_cast<int>(nFrames * kChannels); ++i) { - double sample = pSamples[i] * gain * SHRT_MAX; + for (int i = 0; i < static_cast<int>(samplesSize); ++i) { + CSAMPLE sample = pSamples[i] * gain * SHRT_MAX; if (sample > SHRT_MAX) { m_pWorkBuffer[i] = SHRT_MAX; |