Skip to content

Commit

Permalink
MythMusic: Fix a bug that was causing the visuals to sometimes not st…
Browse files Browse the repository at this point in the history
…art up
  • Loading branch information
Paul Harrison committed Jan 22, 2012
1 parent 12469b5 commit aa95932
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 60 deletions.
63 changes: 20 additions & 43 deletions mythplugins/mythmusic/mythmusic/mainvisual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,23 @@ using namespace std;
///////////////////////////////////////////////////////////////////////////////
// MainVisual

QStringList MainVisual::visualizers = MainVisual::Visualizations(false);
int MainVisual::currentVisualizer = gCoreContext->GetNumSetting("MusicLastVisualizer", 0);

MainVisual::MainVisual(MythUIVideo *visualiser)
: QObject(NULL), MythTV::Visual(), m_visualiserVideo(visualiser),
MainVisual::MainVisual(MythUIVideo *visualizer)
: QObject(NULL), MythTV::Visual(), m_visualizerVideo(visualizer),
m_vis(NULL), m_playing(false), m_fps(20), m_samples(SAMPLES_DEFAULT_SIZE),
m_updateTimer(NULL)
{
setObjectName("MainVisual");

resize(m_visualiserVideo->GetArea().size());
for (const VisFactory* pVisFactory = VisFactory::VisFactories();
pVisFactory; pVisFactory = pVisFactory->next())
{
pVisFactory->plugins(&m_visualizers);
}
m_visualizers.sort();

m_currentVisualizer = gCoreContext->GetNumSetting("MusicLastVisualizer", 0);

resize(m_visualizerVideo->GetArea().size());

m_updateTimer = new QTimer(this);
m_updateTimer->setInterval(1000 / m_fps);
Expand All @@ -61,7 +67,7 @@ MainVisual::~MainVisual()
while (!m_nodes.empty())
delete m_nodes.takeLast();

gCoreContext->SaveSetting("MusicLastVisualizer", currentVisualizer);
gCoreContext->SaveSetting("MusicLastVisualizer", m_currentVisualizer);
}

void MainVisual::stop(void)
Expand All @@ -79,17 +85,17 @@ void MainVisual::setVisual(const QString &name)
{
m_updateTimer->stop();

int index = visualizers.indexOf(name);
int index = m_visualizers.indexOf(name);

if (index == -1)
{
LOG(VB_GENERAL, LOG_ERR, QString("MainVisual: visualizer %1 not found!").arg(name));
return;
}

currentVisualizer = index;
m_currentVisualizer = index;

m_pixmap.fill(m_visualiserVideo->GetBackgroundColor());
m_pixmap.fill(m_visualizerVideo->GetBackgroundColor());

QString visName, pluginName;

Expand All @@ -116,7 +122,7 @@ void MainVisual::setVisual(const QString &name)
if (pVisFactory->name() == visName)
{
m_vis = pVisFactory->create(this, pluginName);
m_vis->resize(m_visualiserVideo->GetArea().size());
m_vis->resize(m_visualizerVideo->GetArea().size());
m_fps = m_vis->getDesiredFPS();
m_samples = m_vis->getDesiredSamples();

Expand Down Expand Up @@ -210,8 +216,8 @@ void MainVisual::timeout()
if (m_vis && !stop)
{
QPainter p(&m_pixmap);
if (m_vis->draw(&p, m_visualiserVideo->GetBackgroundColor()))
m_visualiserVideo->UpdateFrame(&m_pixmap);
if (m_vis->draw(&p, m_visualizerVideo->GetBackgroundColor()))
m_visualizerVideo->UpdateFrame(&m_pixmap);
}

if (m_playing && !stop)
Expand All @@ -221,7 +227,7 @@ void MainVisual::timeout()
void MainVisual::resize(const QSize &size)
{
m_pixmap = QPixmap(size);
m_pixmap.fill(m_visualiserVideo->GetBackgroundColor());
m_pixmap.fill(m_visualizerVideo->GetBackgroundColor());

if (m_vis)
m_vis->resize(size);
Expand All @@ -244,32 +250,3 @@ void MainVisual::customEvent(QEvent *event)
m_playing = false;
}
}

// static member function
QStringList MainVisual::Visualizations(bool showall)
{
// TODO remove this once the visualiser selector is reinstated
showall = true;

QStringList visualizations;

if (showall)
{
for (const VisFactory* pVisFactory = VisFactory::VisFactories();
pVisFactory; pVisFactory = pVisFactory->next())
{
pVisFactory->plugins(&visualizations);
}

visualizations.sort();

return visualizations;
}

visualizations = gCoreContext->GetSetting("VisualMode").split(';', QString::SkipEmptyParts);

if (!visualizations.count())
visualizations.push_front("Blank");

return visualizations;
}
14 changes: 6 additions & 8 deletions mythplugins/mythmusic/mythmusic/mainvisual.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class MainVisual : public QObject, public MythTV::Visual
Q_OBJECT

public:
MainVisual(MythUIVideo *visualiser);
MainVisual(MythUIVideo *visualizer);
virtual ~MainVisual();

VisualBase *visual(void) const { return m_vis; }
Expand All @@ -53,19 +53,17 @@ class MainVisual : public QObject, public MythTV::Visual
void setFrameRate(int newfps);
int frameRate(void) const { return m_fps; }

static QStringList Visualizations(bool showall = true);
QStringList getVisualizations(void) { return m_visualizers; }

/// list of visualizers (chosen by the user)
static QStringList visualizers;

/// index of the current visualizer
static int currentVisualizer;
int getCurrentVisual(void) { return m_currentVisualizer; }

public slots:
void timeout();

private:
MythUIVideo *m_visualiserVideo;
MythUIVideo *m_visualizerVideo;
QStringList m_visualizers;
int m_currentVisualizer;
VisualBase *m_vis;
QPixmap m_pixmap;
QList<VisualNode*> m_nodes;
Expand Down
11 changes: 2 additions & 9 deletions mythplugins/mythmusic/mythmusic/musiccommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,24 +204,17 @@ bool MusicCommon::CreateCommon(void)
updateUIPlaylist();
}

m_visualModes = MainVisual::Visualizations(true);

if (m_visualizerVideo && m_visualModes.count() == 0)
{
LOG(VB_GENERAL, LOG_WARNING, QString("MusicCommon: Theme has a visualiser but none found - disabling"));
m_visualizerVideo = NULL;
}

if (m_visualizerVideo)
{
// Warm up the visualizer
m_mainvisual = new MainVisual(m_visualizerVideo);
m_visualModes = m_mainvisual->getVisualizations();

m_fullscreenBlank = false;

m_randomVisualizer = gCoreContext->GetNumSetting("VisualRandomize", 0);

m_currentVisual = MainVisual::currentVisualizer;
m_currentVisual = m_mainvisual->getCurrentVisual();

// sanity check
if (m_currentVisual >= m_visualModes.count())
Expand Down

0 comments on commit aa95932

Please sign in to comment.