diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-12-27 14:50:02 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2015-12-27 14:50:02 +0000 |
| commit | b16a319d1244a194ce0358ecd12b2747055c0acb (patch) | |
| tree | e70e812a8ce816de4ab0733fa1417130f19648bc /src | |
| parent | d83b3926a0c4de4902ce85bfc852b2a261ac3452 (diff) | |
| download | qmmp-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.cpp | 3 | ||||
| -rw-r--r-- | src/qmmp/output.h | 1 | ||||
| -rw-r--r-- | src/qmmp/outputwriter.cpp | 22 | ||||
| -rw-r--r-- | src/qmmp/outputwriter_p.h | 4 |
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 |
