aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-12-27 09:56:58 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-12-27 09:56:58 +0000
commitd8525aed2bc18ac54e65a996d38df934966c0c7c (patch)
treea631c3ab8d455ade5343ea7171b8e7b7beb95d4c /src
parenta904b3a5e97ad3568aae2591068fb7bd962779c0 (diff)
downloadqmmp-d8525aed2bc18ac54e65a996d38df934966c0c7c.tar.gz
qmmp-d8525aed2bc18ac54e65a996d38df934966c0c7c.tar.bz2
qmmp-d8525aed2bc18ac54e65a996d38df934966c0c7c.zip
enabled src plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5898 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Effect/CMakeLists.txt2
-rw-r--r--src/plugins/Effect/Effect.pro2
-rw-r--r--src/plugins/Effect/srconverter/srconverter.cpp65
-rw-r--r--src/plugins/Effect/srconverter/srconverter.h2
4 files changed, 19 insertions, 52 deletions
diff --git a/src/plugins/Effect/CMakeLists.txt b/src/plugins/Effect/CMakeLists.txt
index 1b5261e7c..85a8577ec 100644
--- a/src/plugins/Effect/CMakeLists.txt
+++ b/src/plugins/Effect/CMakeLists.txt
@@ -5,7 +5,7 @@ SET(USE_CROSSFADE TRUE CACHE BOOL "enable/disable crossfade plugin")
SET(USE_STEREO TRUE CACHE BOOL "enable/disable extra stereo plugin")
IF(USE_SRC)
-#add_subdirectory(srconverter)
+add_subdirectory(srconverter)
ENDIF(USE_SRC)
IF(USE_BS2B)
diff --git a/src/plugins/Effect/Effect.pro b/src/plugins/Effect/Effect.pro
index 96e4ca13f..2b686db6e 100644
--- a/src/plugins/Effect/Effect.pro
+++ b/src/plugins/Effect/Effect.pro
@@ -8,7 +8,7 @@ SUBDIRS += bs2b
}
unix {
-# SUBDIRS += srconverter
+ SUBDIRS += srconverter
contains(CONFIG, LADSPA_PLUGIN){
# SUBDIRS += ladspa
}
diff --git a/src/plugins/Effect/srconverter/srconverter.cpp b/src/plugins/Effect/srconverter/srconverter.cpp
index c5614d6ca..c0df1533a 100644
--- a/src/plugins/Effect/srconverter/srconverter.cpp
+++ b/src/plugins/Effect/srconverter/srconverter.cpp
@@ -46,69 +46,37 @@ SRConverter::~SRConverter()
void SRConverter::applyEffect(Buffer *b)
{
- if (m_src_state && b->nbytes > 0)
+ if (m_src_state && b->samples > 0)
{
m_src_data.end_of_input = 0;
- m_src_data.input_frames = b->nbytes / m_sz / channels();
+ m_src_data.data_in = b->data;
+ m_src_data.input_frames = b->samples / channels();
m_src_data.output_frames = m_src_data.src_ratio * m_src_data.input_frames + 1;
- if(format() == Qmmp::PCM_S16LE)
- {
- src_short_to_float_array((short*) b->data, m_src_data.data_in,
- m_src_data.input_frames * channels());
- }
- else
- {
- qint32 *data = (int *) b->data;
- if(format() == Qmmp::PCM_S24LE)
- {
- uint samples = b->size >> 2;
- for(unsigned int i = 0; i < samples; ++i)
- {
- if(data[i] & 0x800000)
- data[i] |= 0xff000000;
- }
- }
- src_int_to_float_array((int*) b->data, m_src_data.data_in,
- m_src_data.input_frames * channels());
- }
-
if ((m_srcError = src_process(m_src_state, &m_src_data)) > 0)
{
qWarning("SRConverter: src_process(): %s\n", src_strerror(m_srcError));
}
- else
- {
- b->nbytes = m_src_data.output_frames_gen * channels() * m_sz; //bytes
-
- //increase buffer size
- if(b->nbytes > b->size)
- {
- delete [] b->data;
- b->data = new unsigned char[b->nbytes];
- b->size = b->nbytes;
- }
-
- if(format() == Qmmp::PCM_S16LE)
- {
- src_float_to_short_array(m_src_data.data_out, (short*)b->data,
- m_src_data.output_frames_gen * channels());
+ b->samples = m_src_data.output_frames_gen * channels();
+ m_src_data.data_in = 0;
+ m_src_data.input_frames = 0;
- }
- else
- {
- src_float_to_int_array(m_src_data.data_out, (int*)b->data,
- m_src_data.output_frames_gen * channels());
- }
+ if(b->samples > b->size)
+ {
+ delete [] b->data;
+ b->data = new float[b->samples];
+ b->size = b->samples;
}
+
+ memcpy(b->data, m_src_data.data_out, b->samples * sizeof(float));
}
}
-void SRConverter::configure(quint32 freq, ChannelMap map, Qmmp::AudioFormat format)
+void SRConverter::configure(quint32 freq, ChannelMap map)
{
freeSRC();
- if(freq != m_overSamplingFs && format != Qmmp::PCM_S8)
+ if(freq != m_overSamplingFs)
{
m_src_state = src_new(m_converter_type, map.count(), &m_srcError);
if (m_src_state)
@@ -120,10 +88,9 @@ void SRConverter::configure(quint32 freq, ChannelMap map, Qmmp::AudioFormat for
qDebug("SRConverter: src_new(): %s", src_strerror(m_srcError));
m_sz = audioParameters().sampleSize();
- m_src_data.data_in = new float[QMMP_BLOCK_FRAMES * map.count() * 2];
m_src_data.data_out = new float[int(m_src_data.src_ratio * QMMP_BLOCK_FRAMES * map.count() * 2 + 2)];
}
- Effect::configure(m_overSamplingFs, map, format);
+ Effect::configure(m_overSamplingFs, map);
}
void SRConverter::freeSRC()
diff --git a/src/plugins/Effect/srconverter/srconverter.h b/src/plugins/Effect/srconverter/srconverter.h
index ef2501525..34071d462 100644
--- a/src/plugins/Effect/srconverter/srconverter.h
+++ b/src/plugins/Effect/srconverter/srconverter.h
@@ -34,7 +34,7 @@ public:
virtual ~SRConverter();
void applyEffect(Buffer *b);
- void configure(quint32 freq, ChannelMap map, Qmmp::AudioFormat format);
+ void configure(quint32 freq, ChannelMap map);
private:
void freeSRC();