summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej Rybczak <electricityispower@gmail.com>2010-04-01 13:33:27 +0200
committerAndrzej Rybczak <electricityispower@gmail.com>2010-04-01 13:34:06 +0200
commite6757c4b2022dd6c09cb013cef9f08cb2e2e7e07 (patch)
tree5b091434d269b281c94464e704638de2f9725bbf
parent230b6ae3e375b6ff554d402e661d15647e253e14 (diff)
visualizer: set refresh rate to 0.5 sec if mpd is not playing
-rw-r--r--src/status.cpp12
-rw-r--r--src/visualizer.cpp20
-rw-r--r--src/visualizer.h2
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();