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