diff options
author | Andrzej Rybczak <electricityispower@gmail.com> | 2010-04-01 13:33:27 +0200 |
---|---|---|
committer | Andrzej Rybczak <electricityispower@gmail.com> | 2010-04-01 13:34:06 +0200 |
commit | e6757c4b2022dd6c09cb013cef9f08cb2e2e7e07 (patch) | |
tree | 5b091434d269b281c94464e704638de2f9725bbf | |
parent | 230b6ae3e375b6ff554d402e661d15647e253e14 (diff) |
visualizer: set refresh rate to 0.5 sec if mpd is not playing
-rw-r--r-- | src/status.cpp | 12 | ||||
-rw-r--r-- | src/visualizer.cpp | 20 | ||||
-rw-r--r-- | src/visualizer.h | 2 |
3 files changed, 20 insertions, 14 deletions
diff --git a/src/status.cpp b/src/status.cpp index 74d92773..d5951b30 100644 --- a/src/status.cpp +++ b/src/status.cpp @@ -38,6 +38,7 @@ #include "settings.h" #include "status.h" #include "tag_editor.h" +#include "visualizer.h" using Global::myScreen; using Global::wFooter; @@ -324,7 +325,8 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *) } if (changed.PlayerState) { - switch (Mpd.GetState()) + MPD::PlayerState state = Mpd.GetState(); + switch (state) { case MPD::psUnknown: { @@ -366,9 +368,17 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *) } else player_state.clear(); +# ifdef ENABLE_VISUALIZER + if (myScreen == myVisualizer) + myVisualizer->Main()->Clear(); +# endif // ENABLE_VISUALIZER break; } } +# ifdef ENABLE_VISUALIZER + if (myScreen == myVisualizer) + wFooter->SetTimeout(state == MPD::psPlay ? Visualizer::WindowTimeout : ncmpcpp_window_timeout); +# endif // ENABLE_VISUALIZER if (Config.new_design) { *wHeader << XY(0, 1) << fmtBold << player_state << fmtBoldEnd; diff --git a/src/visualizer.cpp b/src/visualizer.cpp index 01ccdac3..d35581c8 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -41,6 +41,8 @@ const unsigned Visualizer::Samples = 2048; const unsigned Visualizer::FFTResults = Samples/2+1; #endif // HAVE_FFTW3_H +int Visualizer::WindowTimeout = 1000/25; /* 25 fps */ + void Visualizer::Init() { w = new Window(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone); @@ -82,7 +84,7 @@ void Visualizer::SwitchTo() itsTimer.tv_usec = 0; if (itsFifo >= 0) - Global::wFooter->SetTimeout(1000/25); + Global::wFooter->SetTimeout(WindowTimeout); Global::RedrawHeader = 1; } @@ -103,13 +105,11 @@ void Visualizer::Update() if (itsFifo < 0) return; - // if mpd is stopped, clear the screen - if (!Mpd.isPlaying()) - { - w->Clear(); - w->Refresh(); + // it supports only PCM in format 44100:16:1 + static int16_t buf[Samples]; + ssize_t data = read(itsFifo, buf, sizeof(buf)); + if (data < 0) // no data available in fifo return; - } if (itsOutputID != -1 && Global::Timer.tv_sec > itsTimer.tv_sec+Config.visualizer_sync_interval) { @@ -119,12 +119,6 @@ void Visualizer::Update() gettimeofday(&itsTimer, 0); } - // it supports only PCM in format 44100:16:1 - static int16_t buf[Samples]; - ssize_t data = read(itsFifo, buf, sizeof(buf)); - if (data < 0) // no data available in fifo - return; - w->Clear(); # ifdef HAVE_FFTW3_H Config.visualizer_use_wave ? DrawSoundWave(buf, data) : DrawFrequencySpectrum(buf, data); diff --git a/src/visualizer.h b/src/visualizer.h index 20209bb4..91ac0c35 100644 --- a/src/visualizer.h +++ b/src/visualizer.h @@ -58,6 +58,8 @@ class Visualizer : public Screen<Window> void ResetFD(); void FindOutputID(); + static int WindowTimeout; + protected: virtual void Init(); |