MythTV  master
tv_play.h
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 #ifndef TVPLAY_H
4 #define TVPLAY_H
5 
6 // C++
7 #include <cstdint>
8 #include <utility>
9 #include <vector>
10 using namespace std;
11 
12 // Qt
13 #include <QReadWriteLock>
14 #include <QWaitCondition>
15 #include <QStringList>
16 #include <QDateTime>
17 #include <QObject>
18 #include <QRegExp>
19 #include <QString>
20 #include <QMutex>
21 #include <QMap>
22 #include <QSet>
23 
24 // MythTV
25 #include "mythdeque.h"
26 #include "tv.h"
27 #include "channelinfo.h"
28 #include "videoouttypes.h"
29 #include "volumebase.h"
30 #include "inputinfo.h"
31 #include "channelgroup.h"
32 #include "mythtimer.h"
33 #include "osd.h"
34 #include "decoders/decoderbase.h"
35 
36 class QEvent;
37 class QKeyEvent;
38 class QTimerEvent;
39 class QDateTime;
40 class QDomDocument;
41 class QDomNode;
42 class OSD;
43 class RemoteEncoder;
44 class MythPlayer;
45 class DetectLetterbox;
46 class RingBuffer;
47 class ProgramInfo;
48 class PlayerContext;
49 class TvPlayWindow;
50 class TV;
51 class TVBrowseHelper;
52 struct osdInfo;
53 
54 using EMBEDRETURNVOID = void (*) (void *, bool);
55 using EMBEDRETURNVOIDEPG = void (*) (uint, const QString &, const QDateTime, TV *, bool, bool, int);
56 using EMBEDRETURNVOIDFINDER = void (*) (TV *, bool, bool);
57 using EMBEDRETURNVOIDSCHEDIT = void (*) (const ProgramInfo *, void *);
58 
59 // Locking order
60 //
61 // playerLock -> askAllowLock -> osdLock
62 // -> progListLock -> osdLock
63 // -> chanEditMapLock -> osdLock
64 // -> lastProgramLock
65 // -> recorderPlaybackInfoLock
66 // -> timerIdLock
67 // -> mainLoopCondLock
68 // -> channelGroupLock
69 //
70 // When holding one of these locks, you may lock any lock of the locks to
71 // the right of the current lock, but may not lock any lock to the left of
72 // this lock (which will cause a deadlock). Nor should you lock any other
73 // lock in the TV class without first adding it to the locking order list
74 // above.
75 //
76 // Note: Taking a middle lock such as askAllowLock, without taking a
77 // playerLock first does not violate these rules, but once you are
78 // holding it, you cannot later lock playerLock.
79 //
80 // It goes without saying that any locks outside of this class should only
81 // be taken one at a time, and should be taken last and released first of
82 // all the locks required for any algorithm. (Unless you use tryLock and
83 // release all locks if it can't gather them all at once, see the
84 // "multi_lock()" function as an example; but this is not efficient nor
85 // desirable and should be avoided when possible.)
86 //
87 
94 };
95 
100 {
103  kNoTuners = 2,
104 };
105 
106 enum {
113 };
114 
116 {
117  public:
118  AskProgramInfo() = default;
119  AskProgramInfo(QDateTime e, bool r, bool l, ProgramInfo *i) :
120  m_expiry(std::move(e)), m_hasRec(r), m_hasLater(l), m_info(i) {}
121 
122  QDateTime m_expiry;
123  bool m_hasRec {false};
124  bool m_hasLater {false};
125  bool m_isInSameInputGroup {false};
126  bool m_isConflicting {false};
127  ProgramInfo *m_info {nullptr};
128 };
129 
134 };
139 };
140 
145 };
146 
147 class MenuBase;
148 
150 {
151 public:
152  // Constructor for a menu element.
154  const QDomNode &node,
155  QString menuName,
157  bool doDisplay) :
158  m_menu(menu),
159  m_node(node),
160  m_category(kMenuCategoryMenu),
161  m_menuName(std::move(menuName)),
162  m_showContext(kMenuShowAlways),
163  m_currentContext(current),
164  m_action(""),
165  m_actionText(""),
166  m_doDisplay(doDisplay) {}
167  // Constructor for an item element.
169  const QDomNode &node,
170  MenuShowContext showContext,
172  QString action,
173  QString actionText,
174  bool doDisplay) :
175  m_menu(menu),
176  m_node(node),
177  m_category(kMenuCategoryItem),
178  m_menuName(""),
179  m_showContext(showContext),
180  m_currentContext(current),
181  m_action(std::move(action)),
182  m_actionText(std::move(actionText)),
183  m_doDisplay(doDisplay) {}
184  // Constructor for an itemlist element.
186  const QDomNode &node,
187  MenuShowContext showContext,
189  QString action,
190  bool doDisplay) :
191  m_menu(menu),
192  m_node(node),
193  m_category(kMenuCategoryItemlist),
194  m_menuName(""),
195  m_showContext(showContext),
196  m_currentContext(current),
197  m_action(std::move(action)),
198  m_actionText(""),
199  m_doDisplay(doDisplay) {}
200  const MenuBase &m_menu;
201  const QDomNode &m_node;
203  const QString m_menuName;
206  const QString m_action;
207  const QString m_actionText;
209 };
210 
212 {
213 public:
214  virtual bool MenuItemDisplay(const MenuItemContext &c) = 0;
215 };
216 
217 class MenuBase
218 {
219 public:
220  MenuBase() = default;
221  ~MenuBase();
222  bool LoadFromFile(const QString &filename,
223  const QString &menuname,
224  const char *translationContext,
225  const QString &keyBindingContext);
226  bool LoadFromString(const QString &text,
227  const QString &menuname,
228  const char *translationContext,
229  const QString &keyBindingContext);
230  bool IsLoaded(void) const { return (m_document != nullptr); }
231  QDomElement GetRoot(void) const;
232  QString Translate(const QString &text) const;
233  bool Show(const QDomNode &node, const QDomNode &selected,
234  MenuItemDisplayer &displayer,
235  bool doDisplay = true) const;
236  QString GetName(void) const { return m_menuName; }
237  const char *GetTranslationContext(void) const {
238  return m_translationContext;
239  }
240  const QString &GetKeyBindingContext(void) const {
241  return m_keyBindingContext;
242  }
243 private:
244  bool LoadFileHelper(const QString &filename,
245  const QString &menuname,
246  const char *translationContext,
247  const QString &keyBindingContext,
248  int includeLevel);
249  bool LoadStringHelper(const QString &text,
250  const QString &menuname,
251  const char *translationContext,
252  const QString &keyBindingContext,
253  int includeLevel);
254  void ProcessIncludes(QDomElement &root, int includeLevel);
255  QDomDocument *m_document {nullptr};
256  const char *m_translationContext {""};
257  QString m_menuName;
259 };
260 
279 class MTV_PUBLIC TV : public QObject, public MenuItemDisplayer
280 {
281  friend class PlaybackBox;
282  friend class GuideGrid;
283  friend class ProgFinder;
284  friend class ViewScheduled;
285  friend class ScheduleEditor;
286  friend class TvPlayWindow;
287  friend class TVBrowseHelper;
288 
289  Q_OBJECT
290  public:
291  // Check whether we already have a TV object
292  static bool IsTVRunning(void);
293  static TV* CurrentTVInstance(void) { return gTV; }
294  // Start media playback
295  static bool StartTV(ProgramInfo *tvrec,
296  uint flags,
297  const ChannelInfoList &selection = ChannelInfoList());
298  static bool IsPaused(void);
299 
300  // Public event handling
301  bool event(QEvent *e) override; // QObject
302  bool eventFilter(QObject *o, QEvent *e) override; // QObject
303 
304  // Public PlaybackBox methods
306  bool IsSameProgram(int player_idx, const ProgramInfo *rcinfo) const;
307 
308  // Public recorder methods
309  void FinishRecording(int player_ctx);
310 
311  // static functions
312  static void InitKeys(void);
313  static void ReloadKeys(void);
314  static void SetFuncPtr(const char *string, void *lptr);
315  static int ConfiguredTunerCards(void);
316  static bool IsTunable(uint chanid);
317 
320  {
321  public:
322  SleepTimerInfo(QString str, unsigned long secs)
323  : dispString(std::move(str)), seconds(secs) { ; }
324  QString dispString;
325  unsigned long seconds;
326  };
327 
328  public slots:
329  void HandleOSDClosed(int osdType);
330  void timerEvent(QTimerEvent *te) override; // QObject
331  void StopPlayback(void);
332 
333  protected:
334  // Protected event handling
335  void customEvent(QEvent *e) override; // QObject
336 
337  static QStringList lastProgramStringList;
343 
344  protected slots:
345  void onApplicationStateChange(Qt::ApplicationState state);
346 
347  private:
348  TV();
349  ~TV() override;
350  static TV* GetTV(void);
351  static void ReleaseTV(TV* tv);
352  static QMutex *gTVLock;
353  static TV *gTV;
354 
355  // Private initialisation
356  bool Init(bool createWindow = true);
357  void InitFromDB(void);
358  static QList<QKeyEvent> ConvertScreenPressKeyMap(const QString& keyList);
359 
360  // Top level playback methods
361  bool LiveTV(bool showDialogs, const ChannelInfoList &selection);
362  int Playback(const ProgramInfo &rcinfo);
363  void PlaybackLoop(void);
364 
365  // Private event handling
366  bool ProcessKeypressOrGesture(PlayerContext *actx, QEvent *e);
367  bool TranslateKeyPressOrGesture(const QString &context, QEvent *e,
368  QStringList &actions, bool isLiveTV,
369  bool allowJumps = true);
370  bool TranslateGesture(const QString &context, MythGestureEvent *e,
371  QStringList &actions, bool isLiveTV);
372  void ProcessNetworkControlCommand(PlayerContext *ctx, const QString &command);
373 
374  bool HandleTrackAction(PlayerContext *ctx, const QString &action);
375  bool ActiveHandleAction(PlayerContext *ctx,
376  const QStringList &actions,
377  bool isDVD, bool isDVDStillFrame);
378  bool BrowseHandleAction(PlayerContext *ctx, const QStringList &actions);
379  void OSDDialogEvent(int result, const QString& text, QString action);
380  bool PxPHandleAction(PlayerContext *ctx,const QStringList &actions);
381  bool ToggleHandleAction(PlayerContext *ctx,
382  const QStringList &actions, bool isDVD);
383  bool FFRewHandleAction(PlayerContext *ctx, const QStringList &actions);
384  bool ActivePostQHandleAction(PlayerContext *ctx, const QStringList &actions);
385  bool HandleJumpToProgramAction(PlayerContext *ctx,
386  const QStringList &actions);
387  bool SeekHandleAction(PlayerContext *actx, const QStringList &actions,
388  bool isDVD);
389  bool TimeStretchHandleAction(PlayerContext *ctx,
390  const QStringList &actions);
391  static bool DiscMenuHandleAction(PlayerContext *ctx, const QStringList &actions);
392  bool Handle3D(PlayerContext *ctx, const QString &action);
393 
394  // Timers and timer events
395  int StartTimer(int interval, int line);
396  void KillTimer(int id);
397 
398  void SetSpeedChangeTimer(uint when, int line);
399  void HandleEndOfPlaybackTimerEvent(void);
400  void HandleIsNearEndWhenEmbeddingTimerEvent(void);
401  void HandleEndOfRecordingExitPromptTimerEvent(void);
402  void HandleVideoExitDialogTimerEvent(void);
403  void HandlePseudoLiveTVTimerEvent(void);
404  void HandleSpeedChangeTimerEvent(void);
405  void ToggleSleepTimer(const PlayerContext *ctx);
406  void ToggleSleepTimer(const PlayerContext *ctx, const QString &time);
407  bool HandlePxPTimerEvent(void);
408  bool HandleLCDTimerEvent(void);
409  void HandleLCDVolumeTimerEvent(void);
410  void HandleSaveLastPlayPosEvent();
411 
412  // Commands used by frontend UI screens (PlaybackBox, GuideGrid etc)
413  void EditSchedule(const PlayerContext *ctx,
414  int editType = kScheduleProgramGuide);
415  bool StartEmbedding(const QRect &embedRect);
416  void StopEmbedding(void);
417  static bool IsTunable(const PlayerContext *ctx, uint chanid);
418  static QSet<uint> IsTunableOn(const PlayerContext *ctx, uint chanid);
419  void ChangeChannel(const PlayerContext *ctx, const ChannelInfoList &options);
420  void DoEditSchedule(int editType = kScheduleProgramGuide);
421  QString GetRecordingGroup(int player_idx) const;
422  void ChangeVolume(PlayerContext *ctx, bool up, int newvolume = -1);
423  void ToggleMute(PlayerContext *ctx, bool muteIndividualChannels = false);
424  void UpdateChannelList(int groupID);
425 
426  // Lock handling
427  OSD *GetOSDL(const char *file, int location);
428  OSD *GetOSDL(const PlayerContext *ctx, const char *file, int location);
429  void ReturnOSDLock(const PlayerContext *ctx, OSD *&osd);
430  PlayerContext *GetPlayerWriteLock(
431  int which, const char *file, int location);
432  PlayerContext *GetPlayerReadLock(
433  int which, const char *file, int location);
434  const PlayerContext *GetPlayerReadLock(
435  int which, const char *file, int location) const;
436  PlayerContext *GetPlayerHaveLock(
437  PlayerContext *locked_context,
438  int which, const char *file, int location);
439  const PlayerContext *GetPlayerHaveLock(
440  const PlayerContext *locked_context,
441  int which, const char *file, int location) const;
442  void ReturnPlayerLock(PlayerContext *&ctx);
443  void ReturnPlayerLock(const PlayerContext *&ctx) const;
444 
445  // Other toggles
446  void ToggleAutoExpire(PlayerContext *ctx);
447  void QuickRecord(PlayerContext *ctx);
448 
449  // General TV state
450  static bool StateIsRecording(TVState state);
451  static bool StateIsPlaying(TVState state);
452  static bool StateIsLiveTV(TVState state);
453 
454  TVState GetState(int player_idx) const;
455  static TVState GetState(const PlayerContext *actx);
456  void HandleStateChange(PlayerContext *mctx, PlayerContext *ctx);
457  void GetStatus(void);
458  void ForceNextStateNone(PlayerContext *ctx);
459  void ScheduleStateChange(PlayerContext *ctx);
460  void SetErrored(PlayerContext *ctx);
461  void setInPlayList(bool setting) { m_inPlaylist = setting; }
462  void setUnderNetworkControl(bool setting) { m_underNetworkControl = setting; }
463  void PrepToSwitchToRecordedProgram(PlayerContext *ctx,
464  const ProgramInfo &p);
468  kBookmarkAuto // set iff db_playback_exit_prompt==2
469  };
470  void PrepareToExitPlayer(PlayerContext *ctx, int line,
471  BookmarkAction bookmark = kBookmarkAuto);
472  void SetExitPlayer(bool set_it, bool wants_to);
473 
474  bool RequestNextRecorder(PlayerContext *ctx, bool showDialogs,
475  const ChannelInfoList &sel = ChannelInfoList());
476  void DeleteRecorder();
477 
478  bool StartRecorder(PlayerContext *ctx, int maxWait=-1);
479  void StopStuff(PlayerContext *mctx, PlayerContext *ctx,
480  bool stopRingBuffer, bool stopPlayer, bool stopRecorder);
481  void TeardownPlayer(PlayerContext *mctx, PlayerContext *ctx);
482 
483 
484  bool StartPlayer(PlayerContext *mctx, PlayerContext *ctx,
485  TVState desiredState);
486 
487  vector<long long> TeardownAllPlayers(PlayerContext *lctx);
488  void RestartAllPlayers(PlayerContext *lctx,
489  const vector<long long> &pos,
490  MuteState mctx_mute);
491  void RestartMainPlayer(PlayerContext *mctx);
492 
494  bool IsSwitchingCards(void) const { return m_switchToRec; }
496  bool getAllowRerecord(void) const { return m_allowRerecord; }
499  bool getEndOfRecording(void) const { return m_endOfRecording; }
502  bool getJumpToProgram(void) const { return m_jumpToProgram; }
503  static bool IsDeleteAllowed(const PlayerContext *ctx);
504 
505  // Channels
506  static void ToggleChannelFavorite(PlayerContext *ctx);
507  static void ToggleChannelFavorite(PlayerContext *ctx, const QString &changroup_name);
508  void ChangeChannel(PlayerContext *ctx, ChannelChangeDirection direction);
509  void ChangeChannel(PlayerContext *ctx, uint chanid, const QString &channum);
510 
511  void ShowPreviousChannel(PlayerContext *ctx);
512  void PopPreviousChannel(PlayerContext *ctx, bool immediate_change);
513 
514  // key queue commands
515  void AddKeyToInputQueue(PlayerContext *ctx, char key);
516  void ClearInputQueues(const PlayerContext *ctx, bool hideosd);
517  bool CommitQueuedInput(PlayerContext *ctx);
518  bool ProcessSmartChannel(const PlayerContext *ctx, QString &inputStr);
519 
520  // query key queues
521  bool HasQueuedInput(void) const
522  { return !GetQueuedInput().isEmpty(); }
523  bool HasQueuedChannel(void) const
524  { return m_queuedChanID || !GetQueuedChanNum().isEmpty(); }
525 
526  // get queued up input
527  QString GetQueuedInput(void) const;
528  int GetQueuedInputAsInt(bool *ok = nullptr, int base = 10) const;
529  QString GetQueuedChanNum(void) const;
530  uint GetQueuedChanID(void) const { return m_queuedChanID; }
531 
532  // Source and input
533  void SwitchSource(PlayerContext *ctx, uint source_direction);
534  void SwitchInputs(PlayerContext *ctx,
535  uint chanid = 0, QString channum = "", uint inputid = 0);
536 
537  // Pause/play
538  void PauseLiveTV(PlayerContext *ctx);
539  void UnpauseLiveTV(PlayerContext *ctx, bool bQuietly = false);
540  void DoPlay(PlayerContext *ctx);
541  float DoTogglePauseStart(PlayerContext *ctx);
542  void DoTogglePauseFinish(PlayerContext *ctx, float time, bool showOSD);
543  void DoTogglePause(PlayerContext *ctx, bool showOSD);
544  vector<bool> DoSetPauseState(PlayerContext *lctx, const vector<bool>&pause);
545  static bool ContextIsPaused(PlayerContext *ctx, const char *file, int location);
546 
547  // Program jumping stuff
548  void SetLastProgram(const ProgramInfo *rcinfo);
549  ProgramInfo *GetLastProgram(void) const;
550 
551  // Seek, skip, jump, speed
552  void DoSeek(PlayerContext *ctx, float time, const QString &mesg,
553  bool timeIsOffset, bool honorCutlist);
554  bool DoPlayerSeek(PlayerContext *ctx, float time);
555  bool DoPlayerSeekToFrame(PlayerContext *ctx, uint64_t target);
557  ARBSEEK_SET = 0,
560  ARBSEEK_END
561  };
562  void DoSeekAbsolute(PlayerContext *ctx, long long seconds, bool honorCutlist);
563  void DoArbSeek(PlayerContext *ctx, ArbSeekWhence whence, bool honorCutlist);
564  void DoJumpFFWD(PlayerContext *ctx);
565  void DoJumpRWND(PlayerContext *ctx);
566  void DoSeekFFWD(PlayerContext *ctx);
567  void DoSeekRWND(PlayerContext *ctx);
568  void NormalSpeed(PlayerContext *ctx);
569  void ChangeSpeed(PlayerContext *ctx, int direction);
570  void ToggleTimeStretch(PlayerContext *ctx);
571  void ChangeTimeStretch(PlayerContext *ctx, int dir, bool allowEdit = true);
572  void DVDJumpBack(PlayerContext *ctx);
573  void DVDJumpForward(PlayerContext *ctx);
574  float StopFFRew(PlayerContext *ctx);
575  void ChangeFFRew(PlayerContext *ctx, int direction);
576  void SetFFRew(PlayerContext *ctx, int index);
577 
578  // Private audio methods
579  void EnableUpmix(PlayerContext *ctx, bool enable, bool toggle = false);
580  void ChangeAudioSync(PlayerContext *ctx, int dir, int newsync = -9999);
581  bool AudioSyncHandleAction(PlayerContext *ctx, const QStringList &actions);
582  static void PauseAudioUntilBuffered(PlayerContext *ctx);
583 
584  // Chapters, titles and angles
585  static int GetNumChapters(const PlayerContext *ctx);
586  static void GetChapterTimes(const PlayerContext *ctx, QList<long long> &times);
587  static int GetCurrentChapter(const PlayerContext *ctx);
588  static int GetNumTitles(const PlayerContext *ctx);
589  static int GetCurrentTitle(const PlayerContext *ctx);
590  static int GetTitleDuration(const PlayerContext *ctx, int title);
591  static QString GetTitleName(const PlayerContext *ctx, int title);
592  void DoSwitchTitle(PlayerContext *ctx, int title);
593  static int GetNumAngles(const PlayerContext *ctx);
594  static int GetCurrentAngle(const PlayerContext *ctx);
595  static QString GetAngleName(const PlayerContext *ctx, int angle);
596  void DoSwitchAngle(PlayerContext *ctx, int angle);
597  void DoJumpChapter(PlayerContext *ctx, int chapter);
598 
599  // Commercial skipping
600  void DoSkipCommercials(PlayerContext *ctx, int direction);
601  void SetAutoCommercialSkip(const PlayerContext *ctx,
602  CommSkipMode skipMode = kCommSkipOff);
603 
604  // Transcode
605  void DoQueueTranscode(PlayerContext *ctx, const QString& profile);
606 
607  // Bookmarks
608  static bool IsBookmarkAllowed(const PlayerContext *ctx);
609  void SetBookmark(PlayerContext* ctx, bool clear = false);
610 
611  // OSD
612  bool ClearOSD(const PlayerContext *ctx);
613  void ToggleOSD(PlayerContext *ctx, bool includeStatusOSD);
614  void ToggleOSDDebug(PlayerContext *ctx);
615  void UpdateOSDDebug(const PlayerContext *ctx);
616  void UpdateOSDProgInfo(const PlayerContext *ctx, const char *whichInfo);
617  void UpdateOSDStatus(const PlayerContext *ctx, const QString& title, const QString& desc,
618  const QString& value, int type, const QString& units,
619  int position = 0,
621  void UpdateOSDStatus(const PlayerContext *ctx, osdInfo &info,
622  int type, enum OSDTimeout timeout);
623 
624  void UpdateOSDSeekMessage(const PlayerContext *ctx,
625  const QString &mesg, enum OSDTimeout timeout);
626  void UpdateOSDInput(const PlayerContext *ctx);
627  void UpdateOSDSignal(PlayerContext *ctx, const QStringList &strlist);
628  void UpdateOSDTimeoutMessage(PlayerContext *ctx);
629  void UpdateOSDAskAllowDialog(PlayerContext*);
630  void SetUpdateOSDPosition(bool set_it);
631 
632  // Captions/subtitles
633  bool SubtitleZoomHandleAction(PlayerContext *ctx,
634  const QStringList &actions);
635  void ChangeSubtitleZoom(PlayerContext *ctx, int dir);
636  bool SubtitleDelayHandleAction(PlayerContext *ctx,
637  const QStringList &actions);
638  void ChangeSubtitleDelay(PlayerContext *ctx, int dir);
639 
640  // PxP handling
641  bool CreatePBP(PlayerContext *lctx, const ProgramInfo *info);
642  bool CreatePIP(PlayerContext *lctx, const ProgramInfo *info);
643  bool ResizePIPWindow(PlayerContext *ctx);
644  bool IsPBPSupported(const PlayerContext *ctx = nullptr) const;
645  bool IsPIPSupported(const PlayerContext *ctx = nullptr) const;
646  void PxPToggleView( PlayerContext *actx, bool wantPBP);
647  void PxPCreateView( PlayerContext *actx, bool wantPBP);
648  void PxPTeardownView(PlayerContext *actx);
649  void PxPToggleType( PlayerContext *mctx, bool wantPBP);
650  void PxPSwap( PlayerContext *mctx, PlayerContext *pipctx);
651  bool PIPAddPlayer( PlayerContext *mctx, PlayerContext *ctx);
652  static bool PIPRemovePlayer(PlayerContext *mctx, PlayerContext *ctx);
653  void PBPRestartMainPlayer(PlayerContext *mctx);
654  void SetActive(PlayerContext *lctx, int index, bool osd_msg);
655 
656  // Video controls
657  void ToggleMoveBottomLine(PlayerContext *ctx);
658  void SaveBottomLine(PlayerContext *ctx);
659  void ToggleAspectOverride(PlayerContext *ctx,
660  AspectOverrideMode aspectMode = kAspect_Toggle);
661  void ToggleAdjustFill(PlayerContext *ctx,
662  AdjustFillMode adjustfillMode = kAdjustFill_Toggle);
663  static void DoToggleNightMode(const PlayerContext *ctx);
664  void DoTogglePictureAttribute(const PlayerContext *ctx,
666  void DoChangePictureAttribute(
667  PlayerContext *ctx,
669  bool up, int newvalue = -1);
670  bool PictureAttributeHandleAction(PlayerContext *ctx,
671  const QStringList &actions);
672  static PictureAttribute NextPictureAdjustType(
674  static void HandleDeinterlacer(PlayerContext* ctx, const QString &action);
675 
676  // Sundry on screen
677  static void ITVRestart(PlayerContext *ctx, bool isLive);
678  void EnableVisualisation(const PlayerContext *ctx, bool enable, bool toggle = false,
679  const QString &action = QString(""));
680 
681  // Manual zoom mode
682  void SetManualZoom(const PlayerContext *ctx, bool zoomON, const QString& desc);
683  bool ManualZoomHandleAction(PlayerContext *actx,
684  const QStringList &actions);
685 
686  // Channel editing support
687  void StartChannelEditMode(PlayerContext *ctx);
688  bool HandleOSDChannelEdit(PlayerContext *ctx, const QString& action);
689  static void ChannelEditAutoFill(const PlayerContext *ctx, InfoMap &infoMap);
690  static void ChannelEditXDSFill(const PlayerContext *ctx, InfoMap &infoMap);
691 
692  // General dialog handling
693  bool DialogIsVisible(PlayerContext *ctx, const QString &dialog);
694  void HandleOSDInfo(PlayerContext *ctx, const QString& action);
695  void ShowNoRecorderDialog(const PlayerContext *ctx,
696  NoRecorderMsg msgType = kNoRecorders);
697 
698  // AskAllow dialog handling
699  void ShowOSDAskAllow(PlayerContext *ctx);
700  void HandleOSDAskAllow(PlayerContext *ctx, const QString& action);
701  void AskAllowRecording(PlayerContext *ctx, const QStringList &msg,
702  int timeuntil, bool hasrec, bool haslater);
703 
704  // Program editing support
705  void ShowOSDCutpoint(PlayerContext *ctx, const QString &type);
706  bool HandleOSDCutpoint(PlayerContext *ctx, const QString& action);
707  void StartProgramEditMode(PlayerContext *ctx);
708 
709  // Already editing dialog
710  void ShowOSDAlreadyEditing(PlayerContext *ctx);
711  void HandleOSDAlreadyEditing(PlayerContext *ctx, const QString& action,
712  bool was_paused);
713 
714  // Sleep dialog handling
715  void ShowOSDSleep(void);
716  void HandleOSDSleep(PlayerContext *ctx, const QString& action);
717  void SleepDialogTimeout(void);
718 
719  // Idle dialog handling
720  void ShowOSDIdle(void);
721  void HandleOSDIdle(PlayerContext *ctx, const QString& action);
722  void IdleDialogTimeout(void);
723 
724  // Exit/delete dialog handling
725  void ShowOSDStopWatchingRecording(PlayerContext *ctx);
726  void ShowOSDPromptDeleteRecording(PlayerContext *ctx, const QString& title,
727  bool force = false);
728  bool HandleOSDVideoExit(PlayerContext *ctx, const QString& action);
729 
730  // Navigation Dialog
731  void StartOsdNavigation(PlayerContext *ctx);
732  void UpdateNavDialog(PlayerContext *ctx);
733 
734  // Menu dialog
735  void ShowOSDMenu(bool isCompact = false);
736 
737  void FillOSDMenuJumpRec (PlayerContext* ctx, const QString &category = "",
738  int level = 0, const QString &selected = "");
739 
740  void PlaybackMenuShow(const MenuBase &menu,
741  const QDomNode &node, const QDomNode &selected);
742  void CutlistMenuShow(const MenuBase &menu,
743  const QDomNode &node, const QDomNode &selected);
744  bool MenuItemDisplay(const MenuItemContext &c) override; // MenuItemDisplayer
745  bool MenuItemDisplayPlayback(const MenuItemContext &c);
746  bool MenuItemDisplayCutlist(const MenuItemContext &c);
747  void PlaybackMenuInit(const MenuBase &menu);
748  void PlaybackMenuDeinit(const MenuBase &menu);
749  static void MenuStrings(void);
750  void MenuLazyInit(void *field);
751 
752  // LCD
753  void UpdateLCD(void);
754  void ShowLCDChannelInfo(const PlayerContext *ctx);
755  void ShowLCDDVDInfo(const PlayerContext *ctx);
756 
757  // Other stuff
758  int GetLastRecorderNum(int player_idx) const;
759  static QStringList GetValidRecorderList(uint chanid);
760  static QStringList GetValidRecorderList(const QString &channum);
761  static QStringList GetValidRecorderList(uint, const QString&);
762 
763  static TVState RemoveRecording(TVState state);
764  void RestoreScreenSaver(const PlayerContext *ctx);
765 
766  // for temp debugging only..
767  int find_player_index(const PlayerContext *ctx) const;
768  static QString GetLiveTVIndex(const PlayerContext *ctx);
769 
770  private:
771  // Configuration variables from database
772  QString m_baseFilters;
773  QString m_dbChannelFormat {"<num> <sign>"};
774  uint m_dbIdleTimeout {0};
775  int m_dbPlaybackExitPrompt {0};
776  uint m_dbAutoexpireDefault {0};
777  bool m_dbAutoSetWatched {false};
778  bool m_dbEndOfRecExitPrompt {false};
779  bool m_dbJumpPreferOsd {true};
780  bool m_dbUseGuiSizeForTv {false};
781  bool m_dbUseVideoModes {false};
782  bool m_dbClearSavedPosition {false};
783  bool m_dbRunJobsOnRemote {false};
784  bool m_dbContinueEmbedded {false};
785  bool m_dbRunFrontendInWindow {false};
786  bool m_dbBrowseAlways {false};
787  bool m_dbBrowseAllTuners {false};
788  bool m_dbUseChannelGroups {false};
789  bool m_dbRememberLastChannelGroup {false};
791 
792  bool m_tryUnflaggedSkip {false};
793 
794  bool m_smartForward {false};
795  float m_ffRewRepos {1.0F};
796  bool m_ffRewReverse {false};
797  vector<int> m_ffRewSpeeds;
798 
799  uint m_vbimode {VBIMode::None};
800 
801  QElapsedTimer m_ctorTime;
802  uint m_switchToInputId {0};
803 
805  bool m_initFromDBDone {false};
806  QWaitCondition m_initFromDBWait;
807 
810  mutable bool m_wantsToQuit {true};
811  bool m_stretchAdjustment {false};
812  bool m_audiosyncAdjustment {false};
813  bool m_subtitleZoomAdjustment {false};
814  bool m_subtitleDelayAdjustment {false};
815  bool m_editMode {false};
816  bool m_zoomMode {false};
817  bool m_sigMonMode {false};
818  bool m_endOfRecording {false};
819  bool m_requestDelete {false};
820  bool m_allowRerecord {false};
821  bool m_doSmartForward {false};
822  bool m_queuedTranscode {false};
826  PictureAttribute m_adjustingPictureAttribute {kPictureAttribute_None};
827 
828  // Ask Allow state
829  QMap<QString,AskProgramInfo> m_askAllowPrograms;
830  QMutex m_askAllowLock {QMutex::Recursive};
831 
834  QMap<QString,ProgramList> m_progLists;
835 
836  mutable QMutex m_chanEditMapLock {QMutex::Recursive};
838 
841  vector<SleepTimerInfo> m_sleepTimes;
842  uint m_sleepIndex {0};
843  uint m_sleepTimerTimeout {0};
844  int m_sleepTimerId {0};
845  int m_sleepDialogTimerId {0};
846  int m_idleTimerId {0};
848  int m_idleDialogTimerId {0};
849 
852 
853  // CC/Teletex input state variables
855  bool m_ccInputMode {false};
856 
857  // Arbitrary Seek input state variables
859  bool m_asInputMode {false};
860 
861  // Channel changing state variables
863  QString m_queuedInput;
865  mutable QString m_queuedChanNum;
867  uint m_queuedChanID {0};
869  uint m_initialChanID {0};
870 
876  static const int kScreenPressRegionCount = 12;
877  QList<QKeyEvent> m_screenPressKeyMapPlayback;
878  QList<QKeyEvent> m_screenPressKeyMapLiveTV;
879 
880  // Channel changing timeout notification variables
881  QElapsedTimer m_lockTimer;
882  bool m_lockTimerOn {false};
884 
885  // Channel browsing state variables
886  TVBrowseHelper *m_browseHelper {nullptr};
887 
888  // Program Info for currently playing video
889  // (or next video if InChangeState() is true)
890  mutable QMutex m_lastProgramLock;
891  ProgramInfo *m_lastProgram {nullptr};
892  bool m_inPlaylist {false};
893  bool m_underNetworkControl {false};
894 
895  // Program Jumping
896  PIPState m_jumpToProgramPIPState {kPIPOff};
897  bool m_jumpToProgram {false};
898 
899  // Video Players
900  vector<PlayerContext*> m_player;
902  int m_playerActive {-1};
904  mutable QReadWriteLock m_playerLock;
905 
906  bool m_noHardwareDecoders {false};
907 
908  // Remote Encoders
910  RemoteEncoder *m_switchToRec {nullptr};
911 
912  // OSD info
913  QMap<OSD*,const PlayerContext*> m_osdLctx;
914 
915  // LCD Info
916  QString m_lcdTitle;
917  QString m_lcdSubtitle;
918  QString m_lcdCallsign;
919 
920  // Window info (GUI is optional, transcoding, preview img, etc)
921  TvPlayWindow *m_myWindow {nullptr};
922  QRect m_playerBounds;
927  bool m_weDisabledGUI {false};
928 
929  // embedded and suspended status
930  bool m_isEmbedded {false};
931  bool m_ignoreKeyPresses {false};
932  vector<bool> m_savedPause;
933 
934  // Channel group stuff
938  mutable QMutex m_channelGroupLock;
939  volatile int m_channelGroupId {-1};
941 
942  // Network Control stuff
944 
945  // Timers
946  using TimerContextMap = QMap<int,PlayerContext*>;
947  using TimerContextConstMap = QMap<int,const PlayerContext*>;
948  mutable QMutex m_timerIdLock;
949  volatile int m_lcdTimerId {0};
950  volatile int m_lcdVolumeTimerId {0};
951  volatile int m_networkControlTimerId {0};
952  volatile int m_jumpMenuTimerId {0};
953  volatile int m_pipChangeTimerId {0};
954  volatile int m_switchToInputTimerId {0};
955  volatile int m_ccInputTimerId {0};
956  volatile int m_asInputTimerId {0};
957  volatile int m_queueInputTimerId {0};
958  volatile int m_browseTimerId {0};
959  volatile int m_updateOSDPosTimerId {0};
960  volatile int m_updateOSDDebugTimerId {0};
961  volatile int m_endOfPlaybackTimerId {0};
962  volatile int m_embedCheckTimerId {0};
963  volatile int m_endOfRecPromptTimerId {0};
964  volatile int m_videoExitDialogTimerId {0};
965  volatile int m_pseudoChangeChanTimerId {0};
966  volatile int m_speedChangeTimerId {0};
967  volatile int m_errorRecoveryTimerId {0};
968  mutable volatile int m_exitPlayerTimerId {0};
969  volatile int m_saveLastPlayPosTimerId {0};
972 
973  // Playback menu state caching
974  PlayerContext *m_tvmCtx {nullptr};
975  OSD *m_tvmOsd {nullptr};
976 
977  // Various tracks
978  // XXX This ignores kTrackTypeTextSubtitle which is greater than
979  // kTrackTypeCount, and it unnecessarily includes
980  // kTrackTypeUnknown.
981  QStringList m_tvmTracks[kTrackTypeCount];
982  int m_tvmCurtrack[kTrackTypeCount] {};
983 
984  // Audio
985  bool m_tvmAvsync {true};
986  bool m_tvmVisual {false};
987  QString m_tvmActive;
988  bool m_tvmUpmixing {false};
989  bool m_tvmCanUpmix {false};
990  QStringList m_tvmVisualisers;
991 
992  // Video
993  AspectOverrideMode m_tvmAspectOverride {kAspect_Off};
994  AdjustFillMode m_tvmAdjustFill {kAdjustFill_Off};
995  bool m_tvmFillAutoDetect {false};
997  bool m_tvmStereoAllowed {false};
999  FrameScanType m_tvmScanType {kScan_Ignore};
1000  FrameScanType m_tvmScanTypeUnlocked {kScan_Ignore};
1001  bool m_tvmScanTypeLocked {false};
1002  QString m_tvmCurMode {};
1003  QStringList m_tvmDeinterlacers {};
1004  QString m_tvmCurrentDeinterlacer {};
1005  bool m_tvmDoubleRate {false};
1006 
1007  // Playback
1008  int m_tvmSpeedX100 {100};
1009  TVState m_tvmState {kState_None};
1010  bool m_tvmIsRecording {false};
1011  bool m_tvmIsRecorded {false};
1012  bool m_tvmIsVideo {false};
1013  CommSkipMode m_tvmCurSkip {kCommSkipOff};
1014  bool m_tvmIsPaused {false};
1015  bool m_tvmAllowPIP {false};
1016  bool m_tvmAllowPBP {false};
1017  bool m_tvmHasPIP {false};
1018  bool m_tvmHasPBP {false};
1019  int m_tvmFreeRecorderCount {-1};
1020  bool m_tvmIsDvd {false};
1021  bool m_tvmIsBd {false};
1022  bool m_tvmJump {false};
1023  bool m_tvmIsLiveTv {false};
1024  bool m_tvmPreviousChan {false};
1025 
1026  // Navigate
1027  int m_tvmNumChapters {0};
1028  int m_tvmCurrentChapter {0};
1029  QList<long long> m_tvmChapterTimes;
1030  int m_tvmNumAngles {0};
1031  int m_tvmCurrentAngle {0};
1032  int m_tvmNumTitles {0};
1033  int m_tvmCurrentTitle {0};
1034  // Subtitles
1035  uint m_tvmSubsCapMode {0};
1036  bool m_tvmSubsHaveText {false};
1037  bool m_tvmSubsForcedOn {true};
1038  bool m_tvmSubsEnabled {false};
1039  bool m_tvmSubsHaveSubs {false};
1040 
1041  bool m_tvmIsOn {false};
1042  bool m_tvmTranscoding {false};
1043 
1045  // End of playback menu state caching
1046 
1051 
1052  public:
1053  // Constants
1054  static const int kInitFFRWSpeed;
1055  static const uint kInputKeysMax;
1056  static const uint kNextSource;
1057  static const uint kPreviousSource;
1058  static const uint kMaxPIPCount;
1059  static const uint kMaxPBPCount;
1060 
1062  static const uint kInputModeTimeout;
1064  static const uint kLCDTimeout;
1066  static const uint kBrowseTimeout;
1068  static const uint kKeyRepeatTimeout;
1070  static const uint kPrevChanTimeout;
1077 
1085 };
1086 
1087 #endif
void(*)(TV *, bool, bool) EMBEDRETURNVOIDFINDER
Definition: tv_play.h:56
Helper class for Sleep Timer code.
Definition: tv_play.h:319
void(*)(uint, const QString &, const QDateTime, TV *, bool, bool, int) EMBEDRETURNVOIDEPG
Definition: tv_play.h:55
bool getAllowRerecord(void) const
Returns true if the user told Mythtv to allow re-recording of the show.
Definition: tv_play.h:496
MenuCategory
Definition: tv_play.h:130
NoRecorderMsg
Type of message displayed in ShowNoRecorderDialog()
Definition: tv_play.h:99
static const uint kMaxPIPCount
Definition: tv_play.h:1058
InfoMap m_chanEditMap
Channel Editing initial map.
Definition: tv_play.h:837
unsigned int slots[4]
Definition: element.c:38
A QElapsedTimer based timer to replace use of QTime as a timer.
Definition: mythtimer.h:13
void(*)(void *, bool) EMBEDRETURNVOID
Definition: tv_play.h:54
static const uint kPrevChanTimeout
How long to wait before applying all previous channel keypresses in msec.
Definition: tv_play.h:1070
static const uint kSaveLastPlayPosTimeout
Definition: tv_play.h:1084
QString dispString
Definition: tv_play.h:324
static EMBEDRETURNVOID RunPlaybackBoxPtr
function pointer for RunPlaybackBox in playbackbox.cpp
Definition: tv_play.h:338
ChannelChangeDirection
ChannelChangeDirection is an enumeration of possible channel changing directions.
Definition: tv.h:28
SleepTimerInfo(QString str, unsigned long secs)
Definition: tv_play.h:322
MenuBase m_playbackMenu
Definition: tv_play.h:1047
static TV * gTV
Definition: tv_play.h:353
QList< long long > m_tvmChapterTimes
Definition: tv_play.h:1029
vector< SleepTimerInfo > m_sleepTimes
Vector or sleep timer sleep times in seconds, with the appropriate UI message.
Definition: tv_play.h:841
vector< PlayerContext * > m_player
Definition: tv_play.h:900
MythTimer m_keyRepeatTimer
Queue of unprocessed key presses.
Definition: tv_play.h:851
QHash< QString, QString > InfoMap
Definition: mythtypes.h:15
const QString m_action
Definition: tv_play.h:206
vector< bool > m_savedPause
saved pause state before embedding
Definition: tv_play.h:932
QRect m_savedGuiBounds
Definition: tv_play.h:925
MenuItemContext(const MenuBase &menu, const QDomNode &node, QString menuName, MenuCurrentContext current, bool doDisplay)
Definition: tv_play.h:153
MuteState
Definition: volumebase.h:6
const char * GetTranslationContext(void) const
Definition: tv_play.h:237
QMutex m_initFromDBLock
Definition: tv_play.h:804
bool IsSwitchingCards(void) const
Returns true if we are currently in the process of switching recorders.
Definition: tv_play.h:494
QDateTime m_lastLockSeenTime
Definition: tv_play.h:883
bool
Definition: pxsup2dast.c:30
MenuBase m_playbackCompactMenu
Definition: tv_play.h:1048
FrameScanType
Definition: videoouttypes.h:78
BookmarkAction
Definition: tv_play.h:465
QVariant m_tvmJumprecBackHack
Definition: tv_play.h:1044
QMutex m_channelGroupLock
Lock necessary when modifying channel group variables.
Definition: tv_play.h:938
static const uint kNextSource
Definition: tv_play.h:1056
QMap< int, const PlayerContext * > TimerContextConstMap
Definition: tv_play.h:947
static MythThemedMenu * menu
bool getJumpToProgram(void) const
This is set if the user asked MythTV to jump to the previous recording in the playlist.
Definition: tv_play.h:502
TVState
TVState is an enumeration of the states used by TV and TVRec.
Definition: tv.h:50
const QString m_menuName
Definition: tv_play.h:203
static const uint kMaxPBPCount
Timeout for entry modes in msec.
Definition: tv_play.h:1059
unsigned long seconds
Definition: tv_play.h:325
QString m_queuedChanNum
Input key presses queued up so far to form a valid ChanNum.
Definition: tv_play.h:865
No free recorders.
Definition: tv_play.h:101
QStringList m_tvmVisualisers
Definition: tv_play.h:990
static EMBEDRETURNVOIDFINDER RunProgramFinderPtr
function pointer for RunProgramFinder in progfind.cpp
Definition: tv_play.h:341
QString m_baseFilters
Definition: tv_play.h:772
ChannelInfoList m_channelGroupChannelList
Definition: tv_play.h:940
OSDTimeout
Definition: osd.h:57
const QString m_actionText
Definition: tv_play.h:207
QMap< QString, AskProgramInfo > m_askAllowPrograms
Definition: tv_play.h:829
QElapsedTimer m_ctorTime
Definition: tv_play.h:801
Holds information on recordings and videos.
Definition: programinfo.h:67
AspectOverrideMode
Definition: videoouttypes.h:44
static const uint kEmbedCheckFrequency
Definition: tv_play.h:1079
QString m_lcdCallsign
Definition: tv_play.h:918
QList< QKeyEvent > m_screenPressKeyMapLiveTV
Definition: tv_play.h:878
#define MTV_PUBLIC
Definition: mythtvexp.h:15
No capture cards configured.
Definition: tv_play.h:103
static const int kInitFFRWSpeed
1x, default to normal speed
Definition: tv_play.h:1054
static void ReloadKeys(void)
ChannelGroupList m_dbChannelGroups
Definition: tv_play.h:790
static void clear(SettingsMap &cache, SettingsMap &overrides, const QString &myKey)
Definition: mythdb.cpp:846
Screen for viewing and managing upcoming and conflicted recordings.
Definition: viewscheduled.h:27
static const uint kBrowseTimeout
Timeout for browse mode exit in msec.
Definition: tv_play.h:1066
static const uint kIdleTimerDialogTimeout
How long to display idle timer dialog in seconds.
Definition: tv_play.h:1074
QReadWriteLock m_playerLock
lock on player and playerActive changes
Definition: tv_play.h:904
Construct a recording schedule.
static QMutex * gTVLock
Definition: tv_play.h:352
CommSkipMode
Definition: tv.h:130
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:10
#define GetState(a, b)
QString m_keyBindingContext
Definition: tv_play.h:258
MenuCurrentContext m_currentContext
Definition: tv_play.h:205
static const uint kSpeedChangeCheckFrequency
Definition: tv_play.h:1080
MenuItemContext(const MenuBase &menu, const QDomNode &node, MenuShowContext showContext, MenuCurrentContext current, QString action, bool doDisplay)
Definition: tv_play.h:185
MenuShowContext m_showContext
Definition: tv_play.h:204
MenuBase m_cutlistCompactMenu
Definition: tv_play.h:1050
QList< QKeyEvent > m_screenPressKeyMapPlayback
Definition: tv_play.h:877
Control TV playback.
Definition: tv_play.h:279
bool m_doDisplay
Definition: tv_play.h:208
QMutex m_lastProgramLock
Definition: tv_play.h:890
static const uint kEndOfRecPromptCheckFrequency
Definition: tv_play.h:1082
static EMBEDRETURNVOIDSCHEDIT RunScheduleEditorPtr
function pointer for RunScheduleEditor in scheduleeditor.cpp
Definition: tv_play.h:342
PictureAttribute
Definition: videoouttypes.h:87
QString m_lcdTitle
Definition: tv_play.h:916
MenuBase m_cutlistMenu
Definition: tv_play.h:1049
unsigned int uint
Definition: compat.h:140
static QStringList lastProgramStringList
stores last program info.
Definition: tv_play.h:337
static const uint kVideoExitDialogTimeout
How long to display idle timer dialog in msec.
Definition: tv_play.h:1076
MenuCategory m_category
Definition: tv_play.h:202
MenuItemContext(const MenuBase &menu, const QDomNode &node, MenuShowContext showContext, MenuCurrentContext current, QString action, QString actionText, bool doDisplay)
Definition: tv_play.h:168
A custom event that represents a mouse gesture.
Definition: mythgesture.h:39
static void InitKeys(void)
vector< ChannelGroupItem > ChannelGroupList
Definition: channelgroup.h:32
AskProgramInfo(QDateTime e, bool r, bool l, ProgramInfo *i)
Definition: tv_play.h:119
const MenuBase & m_menu
Definition: tv_play.h:200
MenuCurrentContext
Definition: tv_play.h:141
TimerContextMap m_stateChangeTimerId
Definition: tv_play.h:970
bool HasQueuedChannel(void) const
Definition: tv_play.h:523
static const uint kInputModeTimeout
Definition: tv_play.h:1062
QElapsedTimer m_lockTimer
Definition: tv_play.h:881
None State, this is the initial state in both TV and TVRec, it indicates that we are ready to change ...
Definition: tv.h:58
QMutex m_timerIdLock
Definition: tv_play.h:948
static EMBEDRETURNVOIDEPG RunProgramGuidePtr
function pointer for RunProgramGuide in guidegrid.cpp
Definition: tv_play.h:340
AdjustFillMode
Definition: videoouttypes.h:55
ArbSeekWhence
Definition: tv_play.h:556
static const uint kEndOfPlaybackFirstCheckTimer
Definition: tv_play.h:1083
QString m_queuedInput
Input key presses queued up so far...
Definition: tv_play.h:863
No current recordings.
Definition: tv_play.h:102
QString m_tvmActive
Definition: tv_play.h:987
vector< int > m_ffRewSpeeds
Definition: tv_play.h:797
StereoscopicMode
PictureAdjustType
Definition: tv.h:120
PIPState
Definition: videoouttypes.h:8
static const uint kInputKeysMax
When to start discarding early keys.
Definition: tv_play.h:1055
bool IsLoaded(void) const
Definition: tv_play.h:230
bool getEndOfRecording(void) const
This is set to true if the player reaches the end of the recording without the user explicitly exitin...
Definition: tv_play.h:499
MenuShowContext
Definition: tv_play.h:135
static const uint kEndOfPlaybackCheckFrequency
Definition: tv_play.h:1078
void(*)(const ProgramInfo *, void *) EMBEDRETURNVOIDSCHEDIT
Definition: tv_play.h:57
static const uint kKeyRepeatTimeout
Seek key repeat timeout in msec.
Definition: tv_play.h:1068
QMutex m_progListsLock
Definition: tv_play.h:833
Definition: osd.h:131
void setInPlayList(bool setting)
Definition: tv_play.h:461
static const uint kSleepTimerDialogTimeout
How long to display sleep timer dialog in msec.
Definition: tv_play.h:1072
QString GetName(void) const
Definition: tv_play.h:236
static EMBEDRETURNVOID RunViewScheduledPtr
function pointer for RunViewScheduled in viewscheduled.cpp
Definition: tv_play.h:339
QString m_lcdSubtitle
Definition: tv_play.h:917
QMap< int, PlayerContext * > TimerContextMap
Definition: tv_play.h:946
bool HasQueuedInput(void) const
Definition: tv_play.h:521
static const uint kPreviousSource
Definition: tv_play.h:1057
MythDeque< QString > m_changePxP
Definition: tv_play.h:832
TimerContextMap m_signalMonitorTimerId
Definition: tv_play.h:971
QMap< OSD *, const PlayerContext * > m_osdLctx
Definition: tv_play.h:913
Implements a file/stream reader/writer.
QDateTime m_expiry
Definition: tv_play.h:122
static const uint kLCDTimeout
Timeout for updating LCD info in msec.
Definition: tv_play.h:1064
void setUnderNetworkControl(bool setting)
Definition: tv_play.h:462
Simple screen shown while the video player is starting up.
Definition: tv_play_win.h:12
QString m_menuName
Definition: tv_play.h:257
scheduleEditTypes
Definition: tv_play.h:88
const QString & GetKeyBindingContext(void) const
Definition: tv_play.h:240
vector< ChannelInfo > ChannelInfoList
Definition: channelinfo.h:133
static const uint kErrorRecoveryCheckFrequency
Definition: tv_play.h:1081
QMap< QString, ProgramList > m_progLists
Definition: tv_play.h:834
static TV * CurrentTVInstance(void)
Definition: tv_play.h:293
const QDomNode & m_node
Definition: tv_play.h:201
uint GetQueuedChanID(void) const
Definition: tv_play.h:530
QWaitCondition m_initFromDBWait
Definition: tv_play.h:806
MythDeque< QString > m_networkControlCommands
Definition: tv_play.h:943