diff options
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 14 | ||||
| -rw-r--r-- | src/qmmp/qmmpaudioengine.h | 3 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index d09f52c3e..f6a3a5257 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -39,7 +39,7 @@ extern "C" QmmpAudioEngine::QmmpAudioEngine(QObject *parent) : AbstractEngine(parent), m_factory(0), m_output(0), m_eqInited(FALSE), - m_useEQ(FALSE) + m_useEq(FALSE), m_eqEnabled(FALSE) { m_output_buf = new unsigned char[QMMP_BUFFER_SIZE]; double b[] = {0,0,0,0,0,0,0,0,0,0}; @@ -159,7 +159,9 @@ void QmmpAudioEngine::setEQ(double bands[10], double preamp) void QmmpAudioEngine::setEQEnabled(bool on) { mutex()->lock(); - m_useEQ = on; + m_eqEnabled = on; + if(m_decoder) + m_useEq = m_eqEnabled && m_decoder->audioParameters().format() == Qmmp::PCM_S16LE; mutex()->unlock(); } @@ -303,7 +305,7 @@ qint64 QmmpAudioEngine::produceSound(char *data, qint64 size, quint32 brate, int { uint sz = size < m_bks ? size : m_bks; m_replayGain->applyReplayGain(data, sz); - if (m_useEQ) + if (m_useEq && m_decoder->audioParameters().format() == Qmmp::PCM_S16LE) { if (!m_eqInited) { @@ -556,6 +558,12 @@ Output *QmmpAudioEngine::createOutput(Decoder *d) m_effects = Effect::create(); AudioParameters ap = m_ap; m_replayGain->setSampleSize(m_ap.sampleSize()); + if(!m_eqInited) + { + init_iir(); + m_eqInited = TRUE; + } + m_useEq = m_eqEnabled && ap.format() == Qmmp::PCM_S16LE; foreach(Effect *effect, m_effects) { diff --git a/src/qmmp/qmmpaudioengine.h b/src/qmmp/qmmpaudioengine.h index b785e9d48..bdc3715b2 100644 --- a/src/qmmp/qmmpaudioengine.h +++ b/src/qmmp/qmmpaudioengine.h @@ -75,7 +75,8 @@ private: Output *m_output; bool m_eqInited; - bool m_useEQ; + bool m_useEq; + bool m_eqEnabled; bool m_done, m_finish, m_user_stop; uint m_bks; qint64 m_totalTime, m_seekTime; |
