From c0a9e456b6a935b67f2d3357a9cef7170cfee418 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 7 Jul 2008 10:09:00 +0000 Subject: fixed software volume git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@442 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmp/decoder.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src') 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; } } -- cgit v1.2.3-13-gbd6f