From 9b49acba56ccc9839814ef7b223dba0ff8a74258 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sun, 13 Dec 2020 23:32:13 +0100 Subject: [PATCH] Clear samples of the visualizer when playback is stopped --- src/screens/visualizer.cpp | 15 +++++++++------ src/screens/visualizer.h | 2 +- src/status.cpp | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/screens/visualizer.cpp b/src/screens/visualizer.cpp index 1a146398..2470a4bf 100644 --- a/src/screens/visualizer.cpp +++ b/src/screens/visualizer.cpp @@ -90,10 +90,8 @@ Visualizer::Visualizer() # endif // HAVE_FFTW3_H if (Config.visualizer_in_stereo) m_read_samples *= 2; - m_sample_buffer.resize(m_read_samples); - m_temp_sample_buffer.resize(m_read_samples); - memset(m_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t)); - memset(m_temp_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t)); + m_sample_buffer.resize(m_read_samples, 0); + m_temp_sample_buffer.resize(m_read_samples, 0); # ifdef HAVE_FFTW3_H m_fftw_results = DFT_TOTAL_SIZE/2+1; @@ -110,12 +108,11 @@ Visualizer::Visualizer() void Visualizer::switchTo() { SwitchTo::execute(this); - w.clear(); + Clear(); SetFD(); // negative infinity to toggle output in update() at least once m_timer = boost::posix_time::neg_infin; drawHeader(); - memset(m_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t)); # ifdef HAVE_FFTW3_H GenLogspace(); m_bar_heights.reserve(w.getWidth()); @@ -639,6 +636,12 @@ void Visualizer::GenLogspace() /**********************************************************************/ +void Visualizer::Clear() +{ + w.clear(); + std::fill(m_sample_buffer.begin(), m_sample_buffer.end(), 0); +} + void Visualizer::ToggleVisualizationType() { switch (Config.visualizer_type) diff --git a/src/screens/visualizer.h b/src/screens/visualizer.h index 7fb7aa56..2c658719 100644 --- a/src/screens/visualizer.h +++ b/src/screens/visualizer.h @@ -54,7 +54,7 @@ struct Visualizer: Screen, Tabbable virtual bool isLockable() override { return true; } virtual bool isMergable() override { return true; } - // private members + void Clear(); void ToggleVisualizationType(); void SetFD(); void ResetFD(); diff --git a/src/status.cpp b/src/status.cpp index af2bb06e..c1ef705a 100644 --- a/src/status.cpp +++ b/src/status.cpp @@ -518,7 +518,7 @@ void Status::Changes::playerState() } # ifdef ENABLE_VISUALIZER if (isVisible(myVisualizer)) - myVisualizer->main().clear(); + myVisualizer->Clear(); # endif // ENABLE_VISUALIZER break; default: