MythTV master
mythplayervisualiserui.cpp
Go to the documentation of this file.
1// MythTV
5
6#include "audioplayer.h"
8#include "tv_play.h"
9
10#define LOC QString("PlayerVis: ")
11
13 PlayerContext *Context, PlayerFlags Flags)
14 : MythPlayerVideoUI(MainWindow, Tv, Context, Flags)
15{
16 // Register our state type for signalling
17 qRegisterMetaType<MythVisualiserState>();
18
19 // Connect signals and slots
25
26
27 m_defaultVisualiser = gCoreContext->GetSetting("AudioVisualiser", "");
29 if (m_render)
30 {
32 }
33 else
34 {
35 LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to initialise m_visualiserList, m_render null");
36 }
37}
38
41{
42 LOG(VB_GENERAL, LOG_INFO, LOC + "Initialising visualiser");
45}
46
48{
50}
51
53{
54 m_visualiserState.m_canVisualise = State.m_channels == 1 || State.m_channels == 2;
56}
57
59{
60 m_uiScreenRect = Rect;
61}
62
64{
65 delete m_visual;
66 m_visual = nullptr;
69}
70
71void MythPlayerVisualiserUI::EnableVisualiser(bool Enable, bool Toggle, const QString &Name)
72{
73 bool osd = true;
74 QString visualiser = Name;
75 if (visualiser.startsWith("_AUTO_"))
76 {
77 visualiser = visualiser.mid(6);
78 osd = false;
79 }
80
81 bool want = Enable || !visualiser.isEmpty();
82 if (Toggle)
84
86 {
88 }
90 {
91 if (visualiser.isEmpty())
92 visualiser = m_defaultVisualiser;
93
94 if (m_visualiserState.m_visualiserName != visualiser)
95 {
98 if (m_visual)
99 {
102 }
103 }
104 }
105
106 if (osd)
107 UpdateOSDMessage(m_visual ? m_visualiserState.m_visualiserName : tr("Visualisation Off"));
109}
110
114{
115 m_checkAutoVisualise = false;
116
117 if (HaveVideo || !m_audio.HasAudioIn() || m_defaultVisualiser.isEmpty())
118 return;
119
121 return;
122
123 EnableVisualiser(true, false, "_AUTO_" + m_defaultVisualiser);
124}
125
126void MythPlayerVisualiserUI::EmbedVisualiser(bool Embed, QRect Rect)
127{
128 m_embedRect = Rect;
131}
132
134{
135 // Note - we must call the visualiser to drain its buffers even if it is not
136 // to be displayed (otherwise it fails). So do not check for output rect
137 // size (embedding) etc
138 if (!m_visual)
139 return;
140 if (m_visual->NeedsPrepare())
142}
143
145{
146 // As for PrepareVisualiser - always call the visualiser if it is present
147 if (!m_visual)
148 return;
150}
void AudioPlayerStateChanged(MythAudioPlayerState State)
bool HasAudioIn(void) const
Definition: audioplayer.h:51
QString GetSetting(const QString &key, const QString &defaultval="")
void InitialiseState() override
void UpdateOSDMessage(const QString &Message)
MythPainter * m_painter
MythRender * m_render
MythMainWindow * m_mainWindow
void VisualiserStateChanged(MythVisualiserState VisualiserState)
void EnableVisualiser(bool Enable, bool Toggle, const QString &Name)
void AudioPlayerStateChanged(const MythAudioPlayerState &State)
void InitialiseState() override
Set initial state and update player.
MythPlayerVisualiserUI(MythMainWindow *MainWindow, TV *Tv, PlayerContext *Context, PlayerFlags Flags)
MythVisualiserState m_visualiserState
void AutoVisualise(bool HaveVideo)
Enable visualisation if possible, there is no video and user has requested.
void EmbedVisualiser(bool Embed, QRect Rect={})
void UIScreenRectChanged(QRect Rect)
AudioPlayer m_audio
Definition: mythplayer.h:472
RenderType Type(void) const
void UIScreenRectChanged(const QRect &Rect)
QStringList m_visualiserList
void EmbedPlayback(bool Embed, const QRect &Rect={})
void VisualiserStateChanged(const MythVisualiserState &VisualiserState)
void EnableVisualiser(bool Enable, bool Toggle=false, const QString &Name=QString())
Control TV playback.
Definition: tv_play.h:156
bool NeedsPrepare() const
Definition: videovisual.h:52
virtual void Draw(QRect area, MythPainter *painter, QPaintDevice *device)=0
static VideoVisual * Create(const QString &name, AudioPlayer *audio, MythRender *render)
Definition: videovisual.cpp:23
virtual QString Name(void)=0
static QStringList GetVisualiserList(RenderType type)
Definition: videovisual.cpp:10
virtual void Prepare(const QRect)
Definition: videovisual.h:53
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
PlayerFlags
Definition: mythplayer.h:65
#define LOC
State
Definition: zmserver.h:69