aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-03-04 20:40:37 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-03-04 20:40:37 +0000
commita901b61d9ae3feb9ab8ac4255673ff589a953bee (patch)
tree3d5857293cf7fa2d8546f80abb9a77eb3be38c6f /src/plugins
parent23865e22ed85f45ebb7c9dbe330e14dd0d80ce3c (diff)
downloadqmmp-a901b61d9ae3feb9ab8ac4255673ff589a953bee.tar.gz
qmmp-a901b61d9ae3feb9ab8ac4255673ff589a953bee.tar.bz2
qmmp-a901b61d9ae3feb9ab8ac4255673ff589a953bee.zip
extra stereo plugin: added 24/32 bits support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2095 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Effect/stereo/stereoplugin.cpp38
-rw-r--r--src/plugins/Effect/stereo/stereoplugin.h1
2 files changed, 30 insertions, 9 deletions
diff --git a/src/plugins/Effect/stereo/stereoplugin.cpp b/src/plugins/Effect/stereo/stereoplugin.cpp
index ee96a0aa0..99dae38e8 100644
--- a/src/plugins/Effect/stereo/stereoplugin.cpp
+++ b/src/plugins/Effect/stereo/stereoplugin.cpp
@@ -31,6 +31,7 @@ StereoPlugin *StereoPlugin::m_instance = 0;
StereoPlugin::StereoPlugin() : Effect()
{
m_instance = this;
+ m_format = Qmmp::PCM_S16LE;
m_avg = 0;
m_ldiff = 0;
m_rdiff = 0;
@@ -52,17 +53,35 @@ void StereoPlugin::applyEffect(Buffer *b)
return;
m_mutex.lock();
- short *data = (short *)b->data;
- for (uint i = 0; i < b->nbytes >> 1; i += 2)
+ if(m_format == Qmmp::PCM_S16LE)
{
- m_avg = (data[i] + data[i + 1]) / 2;
- m_ldiff = data[i] - m_avg;
- m_rdiff = data[i + 1] - m_avg;
+ short *data = (short *)b->data;
+ for (uint i = 0; i < b->nbytes >> 1; i += 2)
+ {
+ m_avg = (data[i] + data[i + 1]) / 2;
+ m_ldiff = data[i] - m_avg;
+ m_rdiff = data[i + 1] - m_avg;
- m_tmp = m_avg + m_ldiff * m_mul;
- data[i] = qBound(-32768.0, m_tmp, 32767.0);
- m_tmp = m_avg + m_rdiff * m_mul;
- data[i + 1] = qBound(-32768.0, m_tmp, 32767.0);
+ m_tmp = m_avg + m_ldiff * m_mul;
+ data[i] = qBound(-32768.0, m_tmp, 32767.0);
+ m_tmp = m_avg + m_rdiff * m_mul;
+ data[i + 1] = qBound(-32768.0, m_tmp, 32767.0);
+ }
+ }
+ else if(m_format == Qmmp::PCM_S24LE || m_format == Qmmp::PCM_S32LE)
+ {
+ int *data = (int *)b->data;
+ for (uint i = 0; i < b->nbytes >> 2; i += 2)
+ {
+ m_avg = (data[i] + data[i + 1]) / 2;
+ m_ldiff = data[i] - m_avg;
+ m_rdiff = data[i + 1] - m_avg;
+
+ m_tmp = m_avg + m_ldiff * m_mul;
+ data[i] = m_tmp;
+ m_tmp = m_avg + m_rdiff * m_mul;
+ data[i + 1] = m_tmp;
+ }
}
m_mutex.unlock();
}
@@ -70,6 +89,7 @@ void StereoPlugin::applyEffect(Buffer *b)
void StereoPlugin::configure(quint32 freq, int chan, Qmmp::AudioFormat format)
{
m_chan = chan;
+ m_format = format;
Effect::configure(freq, chan, format);
}
diff --git a/src/plugins/Effect/stereo/stereoplugin.h b/src/plugins/Effect/stereo/stereoplugin.h
index 3dba7c466..92b0f47f2 100644
--- a/src/plugins/Effect/stereo/stereoplugin.h
+++ b/src/plugins/Effect/stereo/stereoplugin.h
@@ -42,6 +42,7 @@ private:
int m_chan;
QMutex m_mutex;
double m_avg, m_ldiff, m_rdiff, m_tmp, m_mul;
+ int m_format;
static StereoPlugin *m_instance;
};