From d8525aed2bc18ac54e65a996d38df934966c0c7c Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 27 Dec 2015 09:56:58 +0000 Subject: enabled src plugin git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5898 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Effect/CMakeLists.txt | 2 +- src/plugins/Effect/Effect.pro | 2 +- src/plugins/Effect/srconverter/srconverter.cpp | 65 +++++++------------------- src/plugins/Effect/srconverter/srconverter.h | 2 +- 4 files changed, 19 insertions(+), 52 deletions(-) (limited to 'src/plugins/Effect') 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(); -- cgit v1.2.3-13-gbd6f