aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-01-20 20:54:08 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-01-20 20:54:08 +0000
commitc05c3679e4fad5034a53ce2b7cfde8ad932faa59 (patch)
tree2ab44ec95aac8bed6cae3cf4c8492366759cef33
parent47d91f0aa9fceae29c9b16ffe245d64c8738ad7c (diff)
downloadqmmp-c05c3679e4fad5034a53ce2b7cfde8ad932faa59.tar.gz
qmmp-c05c3679e4fad5034a53ce2b7cfde8ad932faa59.tar.bz2
qmmp-c05c3679e4fad5034a53ce2b7cfde8ad932faa59.zip
use equalizer for 16-bit only
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1518 90c681e8-e032-0410-971d-27865f9a5e38
-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;