diff options
| -rw-r--r-- | src/plugins/Visual/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/plugins/Visual/Visual.pro | 2 | ||||
| -rw-r--r-- | src/plugins/Visual/projectm/projectmplugin.cpp | 63 | ||||
| -rw-r--r-- | src/plugins/Visual/projectm/projectmplugin.h | 14 | ||||
| -rw-r--r-- | src/plugins/Visual/projectm/projectmwidget.cpp | 6 | ||||
| -rw-r--r-- | src/plugins/Visual/projectm/projectmwidget.h | 3 |
6 files changed, 54 insertions, 36 deletions
diff --git a/src/plugins/Visual/CMakeLists.txt b/src/plugins/Visual/CMakeLists.txt index 656000b8d..c6571092a 100644 --- a/src/plugins/Visual/CMakeLists.txt +++ b/src/plugins/Visual/CMakeLists.txt @@ -6,5 +6,5 @@ add_subdirectory(analyzer) ENDIF(USE_ANALYZER) IF(USE_PROJECTM) -#add_subdirectory(projectm) +add_subdirectory(projectm) ENDIF(USE_PROJECTM) diff --git a/src/plugins/Visual/Visual.pro b/src/plugins/Visual/Visual.pro index fad9d2b8d..e3f6d5ecb 100644 --- a/src/plugins/Visual/Visual.pro +++ b/src/plugins/Visual/Visual.pro @@ -3,5 +3,5 @@ TEMPLATE = subdirs SUBDIRS += analyzer contains(CONFIG, PROJECTM_PLUGIN){ -# SUBDIRS += projectm + SUBDIRS += projectm } diff --git a/src/plugins/Visual/projectm/projectmplugin.cpp b/src/plugins/Visual/projectm/projectmplugin.cpp index a3efab8e1..e691dd89f 100644 --- a/src/plugins/Visual/projectm/projectmplugin.cpp +++ b/src/plugins/Visual/projectm/projectmplugin.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2015 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -37,6 +37,7 @@ ProjectMPlugin::ProjectMPlugin (QWidget *parent) : Visual (parent, Qt::Window | Qt::MSWindowsOwnDC) { + m_running = false; setlocale(LC_NUMERIC, "C"); //fixes problem with none-english locales setWindowTitle(tr("ProjectM")); setWindowIcon(parent->windowIcon()); @@ -62,51 +63,55 @@ ProjectMPlugin::ProjectMPlugin (QWidget *parent) restoreGeometry(settings.value("ProjectM/geometry").toByteArray()); m_splitter->setSizes(QList<int>() << 300 << 300); m_splitter->restoreState(settings.value("ProjectM/splitter_sizes").toByteArray()); + + m_timer = new QTimer(this); + m_timer->setInterval(0); + connect(m_timer, SIGNAL(timeout()), SLOT(onTimeout())); } ProjectMPlugin::~ProjectMPlugin() {} -void ProjectMPlugin::clear() +void ProjectMPlugin::start() { - update(); + m_running = true; + if(isVisible()) + m_timer->start(); } -void ProjectMPlugin::setFullScreen(bool yes) +void ProjectMPlugin::stop() { - if(yes) - setWindowState(windowState() | Qt::WindowFullScreen); - else - setWindowState(windowState() & ~Qt::WindowFullScreen); + m_timer->stop(); + m_running = false; + update(); } -void ProjectMPlugin::add (float *data, size_t samples, int chan) +void ProjectMPlugin::onTimeout() { projectM *instance = m_projectMWidget->projectMInstance(); if (!instance) return; - size_t frames = qMin(samples / chan, (size_t)512); - - if(chan == 1) + if(takeData(m_left, m_right)) { - for(size_t i = 0; i < frames; i++) + for(size_t i = 0; i < 512; i++) { - m_buf[0][i] = data[i*chan] * 32767.0; - m_buf[1][i] = data[i*chan] * 32767.0; + m_buf[0][i] = m_left[i] * 32767.0; + m_buf[1][i] = m_right[i] * 32767.0; } - } - else - { - for(size_t i = 0; i < frames; i++) - { - m_buf[0][i] = data[i*chan] * 32767.0; - m_buf[1][i] = data[i*chan+1] * 32767.0; - } + m_projectMWidget->projectMInstance()->pcm()->addPCM16(m_buf); } - m_projectMWidget->projectMInstance()->pcm()->addPCM16(m_buf); + m_projectMWidget->updateGL(); +} + +void ProjectMPlugin::setFullScreen(bool yes) +{ + if(yes) + setWindowState(windowState() | Qt::WindowFullScreen); + else + setWindowState(windowState() & ~Qt::WindowFullScreen); } void ProjectMPlugin::closeEvent (QCloseEvent *event) @@ -117,3 +122,13 @@ void ProjectMPlugin::closeEvent (QCloseEvent *event) settings.setValue("ProjectM/splitter_sizes", m_splitter->saveState()); Visual::closeEvent(event); //removes visualization object } + +void ProjectMPlugin::showEvent(QShowEvent *) +{ + m_timer->start(); +} + +void ProjectMPlugin::hideEvent(QHideEvent *) +{ + m_timer->stop(); +} diff --git a/src/plugins/Visual/projectm/projectmplugin.h b/src/plugins/Visual/projectm/projectmplugin.h index 62344d0a6..e61c1dcb0 100644 --- a/src/plugins/Visual/projectm/projectmplugin.h +++ b/src/plugins/Visual/projectm/projectmplugin.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2015 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -21,6 +21,7 @@ #define PROJECTMPLUGIN_H #include <QWidget> +#include <QTime> #include <qmmp/visual.h> class QTimer; @@ -35,18 +36,25 @@ public: ProjectMPlugin(QWidget *parent = 0); virtual ~ProjectMPlugin(); - void add(float *data, size_t samples, int chan); - void clear(); +public slots: + void start(); + void stop(); private slots: + void onTimeout(); void setFullScreen(bool yes); private: void closeEvent(QCloseEvent *event); + void showEvent(QShowEvent *); + void hideEvent(QHideEvent *); QTimer *m_timer; ProjectMWidget *m_projectMWidget; QSplitter *m_splitter; short m_buf[2][512]; + float m_left[QMMP_VISUAL_NODE_SIZE]; + float m_right[QMMP_VISUAL_NODE_SIZE]; + bool m_running; }; diff --git a/src/plugins/Visual/projectm/projectmwidget.cpp b/src/plugins/Visual/projectm/projectmwidget.cpp index 8f0967b11..a9072db51 100644 --- a/src/plugins/Visual/projectm/projectmwidget.cpp +++ b/src/plugins/Visual/projectm/projectmwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2015 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * Copyright (C) 2007 by projectM team * @@ -22,7 +22,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <QTimer> #include <QDir> #include <QKeyEvent> #include <QMenu> @@ -43,8 +42,6 @@ ProjectMWidget::ProjectMWidget(QListWidget *listWidget, QWidget *parent) setMouseTracking(true); m_listWidget = listWidget; m_projectM = 0; - m_timer = new QTimer(this); - connect(m_timer, SIGNAL(timeout()),SLOT(updateGL())); m_menu = new QMenu(this); connect(SoundCore::instance(), SIGNAL(metaDataChanged()), SLOT(updateTitle())); #if QT_VERSION >= 0x040700 @@ -134,7 +131,6 @@ void ProjectMWidget::initializeGL() connect(m_listWidget, SIGNAL(currentRowChanged(int)), m_projectM, SLOT(selectPreset(int))); connect(m_projectM, SIGNAL(currentPresetChanged(int)), SLOT(setCurrentRow(int))); updateTitle(); - m_timer->start(0); } } diff --git a/src/plugins/Visual/projectm/projectmwidget.h b/src/plugins/Visual/projectm/projectmwidget.h index e6f739646..94d535ed0 100644 --- a/src/plugins/Visual/projectm/projectmwidget.h +++ b/src/plugins/Visual/projectm/projectmwidget.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2014 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -66,7 +66,6 @@ private: void createActions(); ProjectMWrapper *m_projectM; QMenu *m_menu; - QTimer *m_timer; QListWidget *m_listWidget; }; |
