diff options
Diffstat (limited to 'src/plugins/Effect')
| -rw-r--r-- | src/plugins/Effect/bs2b/bs2bplugin.cpp | 29 | ||||
| -rw-r--r-- | src/plugins/Effect/bs2b/bs2bplugin.h | 7 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspahelper.cpp | 12 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspahelper.h | 4 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspahost.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspahost.h | 3 | ||||
| -rw-r--r-- | src/plugins/Effect/srconverter/srconverter.cpp | 39 | ||||
| -rw-r--r-- | src/plugins/Effect/srconverter/srconverter.h | 6 |
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(); |
