MythTV master
playercontext.h
Go to the documentation of this file.
1#ifndef PLAYER_CONTEXT_H
2#define PLAYER_CONTEXT_H
3
4#include <vector>
5#include <deque>
6
7// Qt headers
8#include <QWidget>
9#include <QString>
10#include <QRecursiveMutex>
11#include <QHash>
12#include <QRect>
13#include <QObject>
14#include <QDateTime>
15
16// MythTV headers
21#include "libmythtv/mythtvexp.h"
22#include "libmythtv/tv.h"
24
25class TV;
26class RemoteEncoder;
27class MythPlayer;
28class MythMediaBuffer;
29class ProgramInfo;
30class LiveTVChain;
31class QPainter;
32class MythMainWindow;
33
34struct osdInfo
35{
37 QHash<QString,int> values;
38};
39
40enum PseudoState : std::uint8_t
41{
45};
46
47using StringDeque = std::deque<QString>;
48
50{
51 public:
52 explicit PlayerContext(QString inUseID = QString("Unknown"));
54
55 // Actions
56 void TeardownPlayer(void);
57 void StopPlaying(void) const;
58 void UpdateTVChain(const QStringList &data = QStringList());
59 bool ReloadTVChain(void);
60 void PushPreviousChannel(void);
61 QString PopPreviousChannel(void);
62
63 void ChangeState(TVState newState);
64 void ForceNextStateNone(void);
65 TVState DequeueNextState(void);
66
67 bool HandlePlayerSpeedChangeFFRew(void);
68 bool HandlePlayerSpeedChangeEOF(void);
69
70 // Locking
71 void LockState(void) const;
72 void UnlockState(void) const;
73
74 void LockPlayingInfo(const char *file, int line) const;
75 void UnlockPlayingInfo(const char *file, int line) const;
76
77 void LockDeletePlayer(const char *file, int line) const;
78 void UnlockDeletePlayer(const char *file, int line) const;
79
80 // Sets
81 void SetInitialTVState(bool islivetv);
82 void SetPlayer(MythPlayer *newplayer);
83 void SetRecorder(RemoteEncoder *rec);
84 void SetTVChain(LiveTVChain *chain);
85 void SetRingBuffer(MythMediaBuffer *Buffer);
86 void SetPlayingInfo(const ProgramInfo *info);
87 void SetPlayGroup(const QString &group);
88 void SetPseudoLiveTV(const ProgramInfo *pi, PseudoState new_state);
89 void SetPlayerChangingBuffers(bool val) { m_playerUnsafe = val; }
90
91 // Gets
92 QString GetPreviousChannel(void) const;
93 uint GetCardID(void) const { return m_lastCardid; }
94 QString GetFilters(const QString &baseFilters) const;
95 QString GetPlayMessage(void) const;
96 TVState GetState(void) const;
97 bool GetPlayingInfoMap(InfoMap &infoMap) const;
98
99 // Boolean Gets
100 bool IsPlayerChangingBuffers(void) const { return m_playerUnsafe; }
101 bool HasPlayer(void) const;
102 bool IsPlayerErrored(void) const;
103 bool IsPlayerPlaying(void) const;
104 bool IsRecorderErrored(void) const;
105 bool InStateChange(void) const;
107 bool IsErrored(void) const { return m_errored; }
108 bool IsSameProgram(const ProgramInfo &p) const;
109
110 public:
111 QString m_recUsage;
112 MythPlayer *m_player {nullptr};
113 volatile bool m_playerUnsafe {false};
114 RemoteEncoder *m_recorder {nullptr};
115 LiveTVChain *m_tvchain {nullptr};
116 MythMediaBuffer *m_buffer {nullptr};
117 ProgramInfo *m_playingInfo {nullptr};
118 std::chrono::seconds m_playingLen {0s};
120 int m_lastCardid {-1};
122 int m_ffRewState {0};
124 int m_ffRewIndex {0};
126 int m_ffRewSpeed {0};
127 TVState m_playingState {kState_None};
128
129 bool m_errored {false};
130
131 // Previous channel functionality state variables
133
134 // Recording to play next, after LiveTV
135 ProgramInfo *m_pseudoLiveTVRec {nullptr};
136 PseudoState m_pseudoLiveTVState {kPseudoNormalLiveTV};
137
138 std::chrono::seconds m_fftime {0s};
139 std::chrono::seconds m_rewtime {0s};
140 std::chrono::minutes m_jumptime {0min};
147 float m_tsNormal {1.0F};
148 float m_tsAlt {1.5F};
149
150 mutable QRecursiveMutex m_playingInfoLock;
151 mutable QRecursiveMutex m_deletePlayerLock;
152 mutable QRecursiveMutex m_stateLock;
153
154 // Signal info
155 mutable QStringList m_lastSignalMsg;
159
160 // tv state related
162
164 static constexpr std::chrono::milliseconds kSMExitTimeout { 2s };
165 static constexpr uint kMaxChannelHistory { 30 };
166};
167
168#endif // PLAYER_CONTEXT_H
#define GetState(a, b)
Keeps track of recordings in a current LiveTV instance.
Definition: livetvchain.h:33
A QElapsedTimer based timer to replace use of QTime as a timer.
Definition: mythtimer.h:14
QString m_recUsage
bool IsErrored(void) const
This is set if the player encountered some irrecoverable error.
QRecursiveMutex m_playingInfoLock
StringDeque m_prevChan
Previous channels.
QStringList m_lastSignalMsg
MythTimer m_lastSignalMsgTime
QRecursiveMutex m_deletePlayerLock
QDateTime m_playingRecStart
void SetPlayerChangingBuffers(bool val)
Definition: playercontext.h:89
InfoMap m_lastSignalUIInfo
bool IsPlayerChangingBuffers(void) const
QRecursiveMutex m_stateLock
MythDeque< TVState > m_nextState
uint GetCardID(void) const
Definition: playercontext.h:93
MythTimer m_lastSignalUIInfoTime
Holds information on recordings and videos.
Definition: programinfo.h:68
Control TV playback.
Definition: tv_play.h:156
unsigned int uint
Definition: freesurround.h:24
#define MTV_PUBLIC
Definition: mythtvexp.h:15
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15
dictionary info
Definition: azlyrics.py:7
PseudoState
Definition: playercontext.h:41
@ kPseudoRecording
Definition: playercontext.h:44
@ kPseudoNormalLiveTV
Definition: playercontext.h:42
@ kPseudoChangeChannel
Definition: playercontext.h:43
std::deque< QString > StringDeque
Definition: playercontext.h:47
QHash< QString, int > values
Definition: playercontext.h:37
InfoMap text
Definition: playercontext.h:36
TVState
TVState is an enumeration of the states used by TV and TVRec.
Definition: tv.h:54
@ kState_None
None State, this is the initial state in both TV and TVRec, it indicates that we are ready to change ...
Definition: tv.h:61