aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-12-27 14:50:02 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-12-27 14:50:02 +0000
commitb16a319d1244a194ce0358ecd12b2747055c0acb (patch)
treee70e812a8ce816de4ab0733fa1417130f19648bc /src
parentd83b3926a0c4de4902ce85bfc852b2a261ac3452 (diff)
downloadqmmp-b16a319d1244a194ce0358ecd12b2747055c0acb.tar.gz
qmmp-b16a319d1244a194ce0358ecd12b2747055c0acb.tar.bz2
qmmp-b16a319d1244a194ce0358ecd12b2747055c0acb.zip
optimization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5911 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/output.cpp3
-rw-r--r--src/qmmp/output.h1
-rw-r--r--src/qmmp/outputwriter.cpp22
-rw-r--r--src/qmmp/outputwriter_p.h4
4 files changed, 19 insertions, 11 deletions
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index 6b76e6730..9228a0c0e 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -25,6 +25,7 @@ void Output::configure(quint32 freq, ChannelMap map, Qmmp::AudioFormat format)
m_frequency = freq;
m_chan_map = map;
m_format = format;
+ m_sample_size = AudioParameters::sampleSize(format);
}
AudioParameters Output::audioParameters() const
@@ -54,7 +55,7 @@ Qmmp::AudioFormat Output::format() const
int Output::sampleSize() const
{
- return AudioParameters::sampleSize(m_format);
+ return m_sample_size;
}
void Output::suspend()
diff --git a/src/qmmp/output.h b/src/qmmp/output.h
index c2e8bf278..dd791ba61 100644
--- a/src/qmmp/output.h
+++ b/src/qmmp/output.h
@@ -134,6 +134,7 @@ private:
quint32 m_frequency;
ChannelMap m_chan_map;
Qmmp::AudioFormat m_format;
+ int m_sample_size;
static void loadPlugins();
static QList<QmmpPluginCache*> *m_cache;
};
diff --git a/src/qmmp/outputwriter.cpp b/src/qmmp/outputwriter.cpp
index 3d8358aa4..ae64779d7 100644
--- a/src/qmmp/outputwriter.cpp
+++ b/src/qmmp/outputwriter.cpp
@@ -52,19 +52,20 @@ OutputWriter::OutputWriter (QObject* parent) : QThread (parent)
m_settings = QmmpSettings::instance();
m_format_converter = 0;
m_channel_converter = 0;
+ m_output_buf = 0;
+ m_output_at = 0;
}
OutputWriter::~OutputWriter()
{
if(m_output)
- {
delete m_output;
- m_output = 0;
- }
if(m_format_converter)
delete m_format_converter;
if(m_channel_converter)
delete m_channel_converter;
+ if(m_output_buf)
+ delete[] m_output_buf;
}
bool OutputWriter::initialize(quint32 freq, ChannelMap map)
@@ -101,6 +102,11 @@ bool OutputWriter::initialize(quint32 freq, ChannelMap map)
return false;
}
+ if(m_output_buf)
+ delete[] m_output_buf;
+ m_output_buf = new unsigned char[QMMP_BLOCK_FRAMES * m_channels * m_output->sampleSize() * 4];
+ m_output_at = 0;
+
m_bytesPerMillisecond = m_frequency * m_channels * AudioParameters::sampleSize(m_format) / 1000;
m_recycler.configure(m_in_params.sampleRate(), m_in_params.channels()); //calculate output buffer size
updateEqSettings();
@@ -328,12 +334,10 @@ void OutputWriter::run()
l = 0;
m = 0;
- size_t samples = b->samples;
- unsigned char buf[samples * 2];
- m_format_converter->fromFloat(b->data, buf, samples);
-
+ m_format_converter->fromFloat(b->data, m_output_buf, b->samples);
+ m_output_at = b->samples * m_output->sampleSize();
- while (l < samples * 2 && !m_pause && !m_prev_pause)
+ while (l < m_output_at && !m_pause && !m_prev_pause)
{
mutex()->lock();
if(m_skip)
@@ -344,7 +348,7 @@ void OutputWriter::run()
break;
}
mutex()->unlock();
- m = m_output->writeAudio(buf + l, samples * 2 - l);
+ m = m_output->writeAudio(m_output_buf + l, m_output_at - l);
if(m >= 0)
{
m_totalWritten += m;
diff --git a/src/qmmp/outputwriter_p.h b/src/qmmp/outputwriter_p.h
index 5c770f162..3aceb4d20 100644
--- a/src/qmmp/outputwriter_p.h
+++ b/src/qmmp/outputwriter_p.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2012-2014 by Ilya Kotov *
+ * Copyright (C) 2012-2015 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -140,6 +140,8 @@ private:
AudioParameters m_in_params;
AudioConverter *m_format_converter;
ChannelConverter *m_channel_converter;
+ unsigned char *m_output_buf;
+ size_t m_output_at;
};
#endif // OUTPUTWRITER_P_H