diff options
Diffstat (limited to 'src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp')
| -rw-r--r-- | src/plugins/Ui/qsui/qsuiwaveformseekbar.cpp | 22 |
1 files 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; |
