From eea32106a49f5eea25793b3d9cf62d264e6167cf Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 10 Jul 2021 11:15:29 +0000 Subject: qsui: added waveform seekbar optimization (Linearithmik, #1086) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@10151 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp b/src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp index 59f05c206..f098c729a 100644 --- a/src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp +++ b/src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp @@ -448,26 +448,30 @@ void QSUiWaveformScanner::run() float *rms = new float[m_ap.channels()]{ 0 }; int counter = 0; int channels = m_ap.channels(); + float value = 0.f; while (!m_user_stop) { m_mutex.unlock(); qint64 len = m_decoder->read(tmp, sizeof(tmp)); if(len > 0) { - converter.toFloat(tmp, out, len / m_ap.sampleSize()); + auto sample_count = len / m_ap.sampleSize(); + converter.toFloat(tmp, out, sample_count); - for(uint sample = 0; sample < len / m_ap.sampleSize(); sample++) + for(uint sample = 0; sample < sample_count - channels; sample += channels) { - int ch = sample % channels; - min[ch] = qMin(min[ch], out[sample]); - max[ch] = qMax(max[ch], out[sample]); - rms[ch] += (out[sample] * out[sample]); - - counter++; + for(int ch = 0; ch < channels; ++ch) + { + value = out[sample + ch]; + min[ch] = qMin(min[ch], value); + max[ch] = qMax(max[ch], value); + rms[ch] += (value * value); + } + counter += channels; if(counter >= samplesPerValue) { m_mutex.lock(); - for(ch = 0; ch < channels; ++ch) + for(int ch = 0; ch < channels; ++ch) { m_data << max[ch] * 1000; m_data << min[ch] * 1000; -- cgit v1.2.3-13-gbd6f