aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-07-07 10:09:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-07-07 10:09:00 +0000
commitc0a9e456b6a935b67f2d3357a9cef7170cfee418 (patch)
treeb419f1f032772b04d6155a76efdfdec0a87d9d7f
parent1608f90483f25e1c7e0761b7ddc3320287fef3ad (diff)
downloadqmmp-c0a9e456b6a935b67f2d3357a9cef7170cfee418.tar.gz
qmmp-c0a9e456b6a935b67f2d3357a9cef7170cfee418.tar.bz2
qmmp-c0a9e456b6a935b67f2d3357a9cef7170cfee418.zip
fixed software volume
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@442 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmp/decoder.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index d056145de..bd77408a5 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -59,7 +59,7 @@ static QStringList files;
static void checkFactories()
{
QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
-
+
if (! factories)
{
files.clear();
@@ -247,7 +247,7 @@ void Decoder::setEnabled(DecoderFactory* factory, bool enable)
bool Decoder::isEnabled(DecoderFactory* factory)
{
checkFactories();
- if(!factories->contains(factory))
+ if (!factories->contains(factory))
return FALSE;
QString name = files.at(factories->indexOf(factory)).section('/',-1);
QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
@@ -414,10 +414,18 @@ void Decoder::changeVolume(char *data, ulong sz, int channels)
{
int r = pow( 10, (m_volR - 100)/40.0 ) * 256;
int l = pow( 10, (m_volL - 100)/40.0 ) * 256;
- for (ulong i = 0; i < sz/2; i+=2)
+
+ if (channels > 1)
+ for (ulong i = 0; i < sz/2; i+=2)
+ {
+ ((short*)data)[i]*= r/256.0;
+ ((short*)data)[i+1]*= l/256.0;
+ }
+ else
{
- ((short*)data)[i]*= r/256.0;
- ((short*)data)[i+1]*= l/256.0;
+ l = qMax(l,r);
+ for (ulong i = 0; i < sz/2; i++)
+ ((short*)data)[i]*= l/256.0;
}
}