aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Effect
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-01-16 15:33:17 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-01-16 15:33:17 +0000
commit435f1da1de18bafe57e43e47fd8a6fc69fd8bab7 (patch)
treee332293971b3b3883685b79c62bcd50bf2f49c12 /src/plugins/Effect
parent2fa169a585994ceb40db55405f46783d06820947 (diff)
downloadqmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.tar.gz
qmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.tar.bz2
qmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.zip
updated audio engine
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1503 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Effect')
-rw-r--r--src/plugins/Effect/bs2b/bs2bplugin.cpp29
-rw-r--r--src/plugins/Effect/bs2b/bs2bplugin.h7
-rw-r--r--src/plugins/Effect/ladspa/ladspahelper.cpp12
-rw-r--r--src/plugins/Effect/ladspa/ladspahelper.h4
-rw-r--r--src/plugins/Effect/ladspa/ladspahost.cpp5
-rw-r--r--src/plugins/Effect/ladspa/ladspahost.h3
-rw-r--r--src/plugins/Effect/srconverter/srconverter.cpp39
-rw-r--r--src/plugins/Effect/srconverter/srconverter.h6
8 files changed, 53 insertions, 52 deletions
diff --git a/src/plugins/Effect/bs2b/bs2bplugin.cpp b/src/plugins/Effect/bs2b/bs2bplugin.cpp
index d2ced9bb9..b9f0bda94 100644
--- a/src/plugins/Effect/bs2b/bs2bplugin.cpp
+++ b/src/plugins/Effect/bs2b/bs2bplugin.cpp
@@ -32,6 +32,7 @@ Bs2bPlugin::Bs2bPlugin() : Effect()
m_bs2b_handler = bs2b_open();
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
bs2b_set_level(m_bs2b_handler, settings.value("bs2b/level", BS2B_DEFAULT_CLEVEL).toUInt());
+ m_chan = 0;
}
Bs2bPlugin::~Bs2bPlugin()
@@ -43,35 +44,33 @@ Bs2bPlugin::~Bs2bPlugin()
#define CASE_BS2B(bitsPerSample, dataType, functionToCall, samples, out_data) \
case bitsPerSample: \
{ \
- dataType * data = reinterpret_cast<dataType *>(*out_data); \
+ dataType * data = reinterpret_cast<dataType *>(out_data); \
functionToCall(m_bs2b_handler, data, samples); \
} \
break;
-ulong Bs2bPlugin::process(char *in_data, const ulong size, char **out_data)
+void Bs2bPlugin::applyEffect(Buffer *b)
{
- memcpy(*out_data, in_data, size);
- if (channels() != 2)
- return size;
-
- uint samples = size / (bitsPerSample() / 8) / 2;
+ if(m_chan != 2)
+ return;
+ uint samples = b->nbytes / audioParameters().sampleSize() / 2;
m_mutex.lock();
- switch (bitsPerSample())
+ switch (format())
{
- CASE_BS2B(8, int8_t, bs2b_cross_feed_s8, samples, out_data)
- CASE_BS2B(16, int16_t, bs2b_cross_feed_s16le, samples, out_data)
- CASE_BS2B(24, bs2b_int24_t, bs2b_cross_feed_s24, samples, out_data)
- CASE_BS2B(32, int32_t, bs2b_cross_feed_s32le, samples, out_data)
+ CASE_BS2B(Qmmp::PCM_S8, int8_t, bs2b_cross_feed_s8, samples, b->data)
+ CASE_BS2B(Qmmp::PCM_S16LE, int16_t, bs2b_cross_feed_s16le, samples, b->data)
+ //CASE_BS2B(Qmmp::PCM_S24LE, bs2b_int24_t, bs2b_cross_feed_s24le, samples, out_data)
+ CASE_BS2B(Qmmp::PCM_S32LE, int32_t, bs2b_cross_feed_s32le, samples, b->data)
default:
; // noop
}
m_mutex.unlock();
- return size;
}
-void Bs2bPlugin::configure(quint32 freq, int chan, int res)
+void Bs2bPlugin::configure(quint32 freq, int chan, Qmmp::AudioFormat format)
{
- Effect::configure(freq, chan, res);
+ m_chan = chan;
+ Effect::configure(freq, chan, format);
bs2b_set_srate(m_bs2b_handler,freq);
}
diff --git a/src/plugins/Effect/bs2b/bs2bplugin.h b/src/plugins/Effect/bs2b/bs2bplugin.h
index 93ad482bb..0070d0f6e 100644
--- a/src/plugins/Effect/bs2b/bs2bplugin.h
+++ b/src/plugins/Effect/bs2b/bs2bplugin.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2010 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -35,13 +35,14 @@ public:
virtual ~Bs2bPlugin();
- ulong process(char *in_data, const ulong size, char **out_data);
- void configure(quint32 freq, int chan, int res);
+ void applyEffect(Buffer *b);
+ void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
void setCrossfeedLevel(uint32_t level);
static Bs2bPlugin* instance();
private:
t_bs2bdp m_bs2b_handler;
+ int m_chan;
QMutex m_mutex;
static Bs2bPlugin *m_instance;
};
diff --git a/src/plugins/Effect/ladspa/ladspahelper.cpp b/src/plugins/Effect/ladspa/ladspahelper.cpp
index af683beca..ca34106f3 100644
--- a/src/plugins/Effect/ladspa/ladspahelper.cpp
+++ b/src/plugins/Effect/ladspa/ladspahelper.cpp
@@ -31,15 +31,13 @@ LADSPAHelper::LADSPAHelper() : Effect()
LADSPAHelper::~LADSPAHelper()
{}
-ulong LADSPAHelper::process(char *in_data, const ulong size, char **out_data)
+void LADSPAHelper::applyEffect(Buffer *b)
{
- LADSPAHost::instance()->applyEffect((qint16 *) in_data, size);
- memcpy(*out_data, in_data, size);
- return size;
+ LADSPAHost::instance()->applyEffect((qint16 *)b->data, b->nbytes);
}
-void LADSPAHelper::configure(quint32 freq, int chan, int res)
+void LADSPAHelper::configure(quint32 freq, int chan, Qmmp::AudioFormat format)
{
- LADSPAHost::instance()->configure(freq,chan,res);
- Effect::configure(freq, chan, res);
+ LADSPAHost::instance()->configure(freq,chan,format);
+ Effect::configure(freq, chan, format);
}
diff --git a/src/plugins/Effect/ladspa/ladspahelper.h b/src/plugins/Effect/ladspa/ladspahelper.h
index 53983fa17..18a44dafd 100644
--- a/src/plugins/Effect/ladspa/ladspahelper.h
+++ b/src/plugins/Effect/ladspa/ladspahelper.h
@@ -32,8 +32,8 @@ public:
LADSPAHelper();
virtual ~LADSPAHelper();
- ulong process(char *in_data, const ulong size, char **out_data);
- void configure(quint32 freq, int chan, int res);
+ void applyEffect(Buffer *b);
+ void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
};
#endif // LADSPAHELPER_H
diff --git a/src/plugins/Effect/ladspa/ladspahost.cpp b/src/plugins/Effect/ladspa/ladspahost.cpp
index d9eef5281..2e84fe205 100644
--- a/src/plugins/Effect/ladspa/ladspahost.cpp
+++ b/src/plugins/Effect/ladspa/ladspahost.cpp
@@ -27,6 +27,7 @@
#include <stdlib.h>
#include <dlfcn.h>
#include <qmmp/qmmp.h>
+#include <qmmp/audioparameters.h>
#include "ladspahost.h"
#ifndef PATH_MAX
@@ -56,10 +57,10 @@ LADSPAHost::~LADSPAHost()
}
}
-void LADSPAHost::configure(quint32 freq, int chan, int res)
+void LADSPAHost::configure(quint32 freq, int chan, Qmmp::AudioFormat format)
{
m_chan = chan;
- m_prec = res;
+ m_prec = AudioParameters::sampleSize(format);
m_freq = freq;
foreach(LADSPAEffect *e, m_effects)
{
diff --git a/src/plugins/Effect/ladspa/ladspahost.h b/src/plugins/Effect/ladspa/ladspahost.h
index f97e54c08..2a35d7bbc 100644
--- a/src/plugins/Effect/ladspa/ladspahost.h
+++ b/src/plugins/Effect/ladspa/ladspahost.h
@@ -24,6 +24,7 @@
#include <QMutex>
#include <QList>
#include <QObject>
+#include <qmmp/qmmp.h>
#include "ladspa.h"
class QWidget;
@@ -83,7 +84,7 @@ public:
virtual ~LADSPAHost();
int applyEffect(qint16 *d, int length);
- void configure(quint32 freq, int chan, int res);
+ void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
QList <LADSPAPlugin *> plugins();
QList <LADSPAEffect *> runningPlugins();
LADSPAEffect *addPlugin(LADSPAPlugin * plugin);
diff --git a/src/plugins/Effect/srconverter/srconverter.cpp b/src/plugins/Effect/srconverter/srconverter.cpp
index 8a31bb18f..95c912cb6 100644
--- a/src/plugins/Effect/srconverter/srconverter.cpp
+++ b/src/plugins/Effect/srconverter/srconverter.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2010 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -50,32 +50,32 @@ SRConverter::~SRConverter()
m_src_data.output_frames = 0;
if (m_isSrcAlloc)
{
- free(m_srcIn);
- free(m_srcOut);
- free(m_wOut);
+ delete [] m_srcIn;
+ delete [] m_srcOut;
+ delete [] m_wOut;
m_isSrcAlloc = FALSE;
}
}
-ulong SRConverter::process(char *in_data, const ulong size, char **out_data)
+void SRConverter::applyEffect(Buffer *b)
{
if (m_isSrcAlloc)
{
- free(m_srcIn);
- free(m_srcOut);
- free(m_wOut);
+ delete [] m_srcIn;
+ delete [] m_srcOut;
+ delete [] m_wOut;
m_isSrcAlloc = FALSE;
}
ulong wbytes = 0;
- if (m_src_state && size > 0)
+ if (m_src_state && b->nbytes > 0)
{
- int lrLength = size/2;
+ int lrLength = b->nbytes/2;
int overLrLength= (int)floor(lrLength*(m_src_data.src_ratio+1));
- m_srcIn = (float*) malloc(sizeof(float)*lrLength);
- m_srcOut = (float*) malloc(sizeof(float)*overLrLength);
- m_wOut = (short int*) malloc(sizeof(short int)*overLrLength);
- src_short_to_float_array((short int*)in_data, m_srcIn, lrLength);
+ m_srcIn = new float [lrLength];
+ m_srcOut = new float [overLrLength];
+ m_wOut = new short[overLrLength];
+ src_short_to_float_array((short *)b->data, m_srcIn, lrLength);
m_isSrcAlloc = TRUE;
m_src_data.data_in = m_srcIn;
m_src_data.data_out = m_srcOut;
@@ -90,14 +90,15 @@ ulong SRConverter::process(char *in_data, const ulong size, char **out_data)
{
src_float_to_short_array(m_srcOut, m_wOut, m_src_data.output_frames_gen*2);
wbytes = m_src_data.output_frames_gen*4;
- *out_data = new char[wbytes];
- memcpy(*out_data, (char*) m_wOut, wbytes);
+ delete [] b->data;
+ b->data = (unsigned char *) m_wOut;
+ b->nbytes = wbytes;
+ m_wOut = 0;
}
}
- return wbytes;
}
-void SRConverter::configure(quint32 freq, int chan, int res)
+void SRConverter::configure(quint32 freq, int chan, Qmmp::AudioFormat format)
{
freeSRC();
uint rate = freq;
@@ -111,7 +112,7 @@ void SRConverter::configure(quint32 freq, int chan, int res)
else
qDebug("SRConverter: src_new(): %s", src_strerror(m_srcError));
}
- Effect::configure(m_overSamplingFs, chan, res);
+ Effect::configure(m_overSamplingFs, chan, format);
}
void SRConverter::freeSRC()
diff --git a/src/plugins/Effect/srconverter/srconverter.h b/src/plugins/Effect/srconverter/srconverter.h
index bb4c2913c..5bc4b4ad1 100644
--- a/src/plugins/Effect/srconverter/srconverter.h
+++ b/src/plugins/Effect/srconverter/srconverter.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2010 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -33,8 +33,8 @@ public:
SRConverter();
virtual ~SRConverter();
- ulong process(char *in_data, const ulong size, char **out_data);
- void configure(quint32 freq, int chan, int res);
+ void applyEffect(Buffer *b);
+ void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
private:
void freeSRC();