Qmmp
Loading...
Searching...
No Matches
visual.h
1/***************************************************************************
2 * Copyright (C) 2008-2025 by Ilya Kotov *
3 * forkotov02@ya.ru *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
20#ifndef VISUAL_H
21#define VISUAL_H
22
23#include <QMutex>
24#include <QStringList>
25#include <QWidget>
26#include <QHash>
27#include <stddef.h>
28#include "qmmp_export.h"
29
30#define QMMP_VISUAL_NODE_SIZE 512 //samples
31#define QMMP_VISUAL_FFT_SIZE 256 //samples
32
33class VisualFactory;
34class VisualBuffer;
35typedef struct _struct_fft_state fft_state;
36
40class QMMP_EXPORT Visual : public QWidget
41{
42 Q_OBJECT
43public:
49 Visual(QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags());
53 virtual ~Visual();
57 static QList<VisualFactory*> factories();
62 static QString file(const VisualFactory *factory);
68 static void setEnabled(VisualFactory *factory, bool enable = true);
73 static bool isEnabled(const VisualFactory *factory);
77 static void add(Visual*visual);
81 static void remove(Visual*);
88 static void initialize(QWidget *parent, QObject *receiver = nullptr, const char *member = nullptr);
92 static QList<Visual *> *visuals();
98 static void showSettings(VisualFactory *factory, QWidget *parent);
107 static void addAudio(float *pcm, int samples, int channels, qint64 ts, qint64 delay);
111 static void clearBuffer();
112
113public slots:
117 virtual void start();
121 virtual void stop();
122
123signals:
128
129protected:
134 virtual void closeEvent (QCloseEvent *event) override;
142 bool takeData(float *left, float *right = nullptr);
151 bool takeFFTData(float *left, float *right = nullptr);
152
153private:
154 static void createVisualization(VisualFactory *factory, QWidget *parent);
155 static QList<VisualFactory*> *m_factories;
156 static QHash <const VisualFactory*, QString> *m_files;
157 static void checkFactories();
158 static QList<Visual*> m_visuals;
159 static QHash<VisualFactory*, Visual*> m_vis_map; //internal visualization
160 static QWidget *m_parentWidget;
161 static QObject *m_receiver;
162 static const char *m_member;
163 static VisualBuffer m_buffer;
164
165 fft_state *m_state = nullptr;
166 float *m_left_fft = nullptr, *m_right_fft = nullptr;
167 float *m_tmp_data = nullptr;
168};
169
170#endif
Visual plugin interface (visual factory).
Definition visualfactory.h:46
static void setEnabled(VisualFactory *factory, bool enable=true)
static QString file(const VisualFactory *factory)
static QList< Visual * > * visuals()
static void addAudio(float *pcm, int samples, int channels, qint64 ts, qint64 delay)
static void add(Visual *visual)
Visual(QWidget *parent, Qt::WindowFlags f=Qt::WindowFlags())
virtual ~Visual()
bool takeFFTData(float *left, float *right=nullptr)
static void remove(Visual *)
static void showSettings(VisualFactory *factory, QWidget *parent)
virtual void start()
void closedByUser()
static QList< VisualFactory * > factories()
virtual void closeEvent(QCloseEvent *event) override
static void clearBuffer()
static bool isEnabled(const VisualFactory *factory)
static void initialize(QWidget *parent, QObject *receiver=nullptr, const char *member=nullptr)
virtual void stop()
bool takeData(float *left, float *right=nullptr)