aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/qmmpaudioengine.cpp3
-rw-r--r--src/qmmp/replaygain.cpp20
2 files changed, 18 insertions, 5 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp
index 4cd25e05f..32eacda86 100644
--- a/src/qmmp/qmmpaudioengine.cpp
+++ b/src/qmmp/qmmpaudioengine.cpp
@@ -380,7 +380,8 @@ void QmmpAudioEngine::run()
{
delay = 0;
// decode
- len = m_decoder->read((char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
+ len = m_replayGain->read(m_decoder,(char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
+ //len = m_decoder->read((char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
}
if (len > 0)
diff --git a/src/qmmp/replaygain.cpp b/src/qmmp/replaygain.cpp
index 7e309b2f3..eeab49d50 100644
--- a/src/qmmp/replaygain.cpp
+++ b/src/qmmp/replaygain.cpp
@@ -80,8 +80,6 @@ qint64 ReplayGain::read(Decoder *decoder, char *data, qint64 size)
samples = decoder->read(m_prebuf, size >> 1);
break;
case Qmmp::PCM_S24LE:
- samples = decoder->read(m_prebuf, size >> 2);
- break;
case Qmmp::PCM_S32LE:
samples = decoder->read(m_prebuf, size >> 2);
break;
@@ -103,15 +101,28 @@ qint64 ReplayGain::read(Decoder *decoder, char *data, qint64 size)
((short*)data)[i] = m_prebuf[i] * 32767.0;
break;
case Qmmp::PCM_S24LE:
- ((qint32*)data)[i] = m_prebuf[i] * 32767.0;
+ ((qint32*)data)[i] = m_prebuf[i] * (1U << 28);
break;
case Qmmp::PCM_S32LE:
- ((qint32*)data)[i] = m_prebuf[i] * 32767.0;
+ ((qint32*)data)[i] = m_prebuf[i] * (1U << 31);
break;
default:
break;
}
}
+
+ switch (m_format)
+ {
+ case Qmmp::PCM_S8:
+ return samples;
+ case Qmmp::PCM_S16LE:
+ return samples << 1;
+ case Qmmp::PCM_S24LE:
+ case Qmmp::PCM_S32LE:
+ return samples << 2;
+ default:
+ return -1;
+ }
}
void ReplayGain::updateSettings(QmmpSettings::ReplayGainMode mode, double preamp,
@@ -149,4 +160,5 @@ void ReplayGain::updateScale()
m_scale = m_scale*peak > 1.0 ? 1.0 / peak : m_scale;
m_scale = qMin(m_scale, 5.6234); // +15 dB
m_scale = qMax(m_scale, 0.1778); // -15 dB*/
+ m_scale = 0.5;
}