aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/qmmpaudioengine.cpp14
-rw-r--r--src/qmmp/qmmpaudioengine.h3
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;