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