MythTV master
encoderlink.cpp
Go to the documentation of this file.
1// ANSI C++ headers
2#include <chrono> // for milliseconds
3#include <thread> // for sleep_for
4#include <utility>
5
6// QT headers
7#include <QMap> // for QMap
8
9// MythTV headers
10#include "libmythbase/compat.h"
13#include "libmythbase/mythlogging.h" // for LOG
16#include "libmythtv/inputinfo.h" // for InputInfo
17#include "libmythtv/programinfo.h" // for ProgramInfo
18#include "libmythtv/tv_rec.h"
19
20// MythBackend
21#include "encoderlink.h"
22#include "playbacksock.h"
23
24#define LOC QString("EncoderLink(%1): ").arg(m_inputid)
25#define LOC_ERR QString("EncoderLink(%1) Error: ").arg(m_inputid)
26
46 QString lhostname)
47 : m_inputid(inputid), m_sock(lsock), m_hostname(std::move(lhostname)),
48 m_sleepStatusTime(MythDate::current()),
49 m_lastSleepTime(MythDate::current()),
50 m_lastWakeTime(MythDate::current()),
51 m_endRecordingTime(MythDate::current().addDays(-2)),
52 m_startRecordingTime(m_endRecordingTime)
53{
55}
56
61 : m_inputid(inputid), m_tv(ltv), m_local(true),
62 m_sleepStatusTime(MythDate::current()),
63 m_lastSleepTime(MythDate::current()),
64 m_lastWakeTime(MythDate::current()),
65 m_endRecordingTime(MythDate::current().addDays(-2)),
66 m_startRecordingTime(m_endRecordingTime)
67{
68}
69
75{
76 if (m_tv)
77 {
78 delete m_tv;
79 m_tv = nullptr;
80 }
81 SetSocket(nullptr);
82}
83
88{
89 QMutexLocker locker(&m_sockLock);
90 if (m_sock)
91 {
92 m_sock->IncrRef();
93 return true;
94 }
95 return false;
96}
97
102{
103 QMutexLocker locker(&m_sockLock);
104 if (m_sock)
105 {
106 m_sock->DecrRef();
107 return true;
108 }
109 return false;
110}
111
118{
119 if (lsock)
120 {
121 lsock->IncrRef();
122
123 if (gCoreContext->GetSettingOnHost("SleepCommand", m_hostname).isEmpty())
125 else
127 }
128 else
129 {
130 if (IsFallingAsleep())
132 else
134 }
135
137 m_sock = lsock;
138}
139
144{
145 m_sleepStatus = newStatus;
147}
148
154bool EncoderLink::IsBusy(InputInfo *busy_input, std::chrono::seconds time_buffer)
155{
156 if (m_local)
157 return m_tv->IsBusy(busy_input, time_buffer);
158
159 if (HasSockAndIncrRef())
160 {
161 ReferenceLocker rlocker(m_sock);
162 return m_sock->IsBusy(m_inputid, busy_input, time_buffer);
163 }
164
165 return false;
166}
167
177{
178 bool retval = false;
179
180 TVState state = GetState();
181
182 if (state == kState_RecordingOnly || state == kState_WatchingRecording ||
183 state == kState_WatchingLiveTV)
184 {
185 retval = true;
186 }
187
188 return retval;
189}
190
196{
197 TVState retval = kState_Error;
198
199 if (!IsConnected())
200 return retval;
201
202 if (m_local)
203 {
204 retval = m_tv->GetState();
205 }
206 else if (HasSockAndIncrRef())
207 {
208 ReferenceLocker rlocker(m_sock);
210 }
211 else
212 {
213 LOG(VB_GENERAL, LOG_ERR, QString("Broken for input: %1")
214 .arg(m_inputid));
215 }
216
217 return retval;
218}
219
225{
226 uint retval = 0;
227
228 if (!IsConnected())
229 return retval;
230
231 if (m_local)
232 {
233 retval = m_tv->GetFlags();
234 }
235 else if (HasSockAndIncrRef())
236 {
237 ReferenceLocker rlocker(m_sock);
239 }
240 else
241 {
242 LOG(VB_GENERAL, LOG_ERR, LOC + "GetFlags failed");
243 }
244
245 return retval;
246}
247
254{
255 return (rec->GetChanID() == m_chanid &&
257}
258
268{
269 bool retval = false;
270 ProgramInfo *tvrec = nullptr;
271
272 if (m_local)
273 {
274 while (kState_ChangingState == GetState())
275 std::this_thread::sleep_for(100us);
276
277 if (IsBusyRecording())
278 tvrec = m_tv->GetRecording();
279
280 if (tvrec)
281 {
282 retval = tvrec->IsSameRecording(*rec);
283 delete tvrec;
284 }
285 }
286 else
287 {
288 if (HasSockAndIncrRef())
289 {
290 ReferenceLocker rlocker(m_sock);
291 retval = m_sock->EncoderIsRecording(m_inputid, rec);
292 }
293 }
294
295 return retval;
296}
297
307 std::chrono::seconds secsleft,
308 bool hasLater)
309{
310 if (m_local)
311 {
312 m_tv->RecordPending(rec, secsleft, hasLater);
313 }
314 else if (HasSockAndIncrRef())
315 {
316 ReferenceLocker rlocker(m_sock);
317 m_sock->RecordPending(m_inputid, rec, secsleft, hasLater);
318 }
319}
320
327{
328 if (!IsConnected())
329 return true;
330
332 return true;
333
334 return false;
335}
336
339{
340 if (HasSockAndIncrRef())
341 {
342 ReferenceLocker rlocker(m_sock);
343 return m_sock->CheckFile(pginfo);
344 }
345 pginfo->SetPathname(GetPlaybackURL(pginfo));
346 return pginfo->IsLocal();
347}
348
356{
357 if (m_local)
358 return m_tv->GetMaxBitrate();
359 if (HasSockAndIncrRef())
360 {
361 ReferenceLocker rlocker(m_sock);
363 }
364
365 return -1;
366}
367
382std::chrono::milliseconds EncoderLink::SetSignalMonitoringRate(std::chrono::milliseconds rate, int notifyFrontend)
383{
384 if (m_local)
385 return m_tv->SetSignalMonitoringRate(rate, notifyFrontend);
386 if (HasSockAndIncrRef())
387 {
388 ReferenceLocker rlocker(m_sock);
390 notifyFrontend);
391 }
392 return -1ms;
393}
394
398{
399 if (IsLocal() || !HasSockAndIncrRef())
400 return false;
401 ReferenceLocker rlocker(m_sock);
402
404
405 return m_sock->GoToSleep();
406}
407
413{
414 if (m_locked)
415 return -2;
416
417 m_locked = true;
418 return m_inputid;
419}
420
428{
430
433 m_chanid = rec->GetChanID();
434
435 if (m_local)
436 {
437 retval = m_tv->StartRecording(rec);
438 }
439 else if (HasSockAndIncrRef())
440 {
441 ReferenceLocker rlocker(m_sock);
442 retval = m_sock->StartRecording(m_inputid, rec);
443 }
444 else
445 {
446 LOG(VB_GENERAL, LOG_ERR,
447 QString("Wanted to start recording on recorder %1,\n\t\t\t"
448 "but the backend is not there anymore\n")
449 .arg(m_inputid));
450 }
451
452 if (retval != RecStatus::Recording &&
453 retval != RecStatus::Tuning &&
454 retval != RecStatus::Failing)
455 {
458 m_chanid = 0;
459 }
460
461 return retval;
462}
463
465{
467
468 if (m_local)
469 {
470 retval = m_tv->GetRecordingStatus();
471 }
472 else if (HasSockAndIncrRef())
473 {
474 ReferenceLocker rlocker(m_sock);
476 }
477 else
478 {
479 LOG(VB_GENERAL, LOG_ERR,
480 QString("Wanted to get status on recorder %1,\n\t\t\t"
481 "but the backend is not there anymore\n")
482 .arg(m_inputid));
483 }
484
485 if (retval != RecStatus::Recording &&
486 retval != RecStatus::Tuning &&
487 retval != RecStatus::Failing)
488 {
491 m_chanid = 0;
492 }
493
494 return retval;
495}
496
504{
505 ProgramInfo *info = nullptr;
506
507 if (m_local)
508 {
510 }
511 else if (HasSockAndIncrRef())
512 {
513 ReferenceLocker rlocker(m_sock);
515 }
516
517 return info;
518}
519
525void EncoderLink::StopRecording(bool killFile)
526{
529 m_chanid = 0;
530
531 if (m_local)
532 {
533 m_tv->StopRecording(killFile);
534 return;
535 }
536}
537
544{
545 if (m_local)
546 {
548 return;
549 }
551}
552
559{
560 if (m_local)
561 return m_tv->IsReallyRecording();
562
563 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: IsReallyRecording");
564 return false;
565}
566
575{
576 if (m_local)
577 return m_tv->GetFramerate();
578
579 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFramerate");
580 return -1;
581}
582
591{
592 if (m_local)
593 return m_tv->GetFramesWritten();
594
595 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFramesWritten");
596 return -1;
597}
598
606{
607 if (m_local)
608 return m_tv->GetFilePosition();
609
610 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFilePosition");
611 return -1;
612}
613
620int64_t EncoderLink::GetKeyframePosition(uint64_t desired)
621{
622 if (m_local)
623 return m_tv->GetKeyframePosition(desired);
624
625 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetKeyframePosition");
626 return -1;
627}
628
630 int64_t start, int64_t end, frm_pos_map_t &map)
631{
632 if (!m_local)
633 {
634 LOG(VB_GENERAL, LOG_ERR,
635 "Should be local only query: GetKeyframePositions");
636 return false;
637 }
638
639 return m_tv->GetKeyframePositions(start, end, map);
640}
641
643 int64_t start, int64_t end, frm_pos_map_t &map)
644{
645 if (!m_local)
646 {
647 LOG(VB_GENERAL, LOG_ERR,
648 "Should be local only query: GetKeyframeDurations");
649 return false;
650 }
651
652 return m_tv->GetKeyframeDurations(start, end, map);
653}
654
661{
662 if (m_local)
664 else
665 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: FrontendReady");
666}
667
677{
678 if (m_local)
679 {
680 m_tv->CancelNextRecording(cancel);
681 }
682 else if (HasSockAndIncrRef())
683 {
684 ReferenceLocker rlocker(m_sock);
686 }
687}
688
700void EncoderLink::SpawnLiveTV(LiveTVChain *chain, bool pip, QString startchan)
701{
702 if (m_local)
703 m_tv->SpawnLiveTV(chain, pip, std::move(startchan));
704 else
705 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SpawnLiveTV");
706}
707
712{
713 if (m_local)
714 return m_tv->GetChainID();
715
716 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SpawnLiveTV");
717 return "";
718}
719
726{
727 if (m_local)
728 m_tv->StopLiveTV();
729 else
730 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: StopLiveTV");
731}
732
740{
741 if (m_local)
743 else
744 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: PauseRecorder");
745}
746
753{
754 if (m_local)
755 m_tv->SetLiveRecording(recording);
756 else
757 LOG(VB_GENERAL, LOG_ERR,
758 "Should be local only query: SetLiveRecording");
759}
760
764void EncoderLink::SetNextLiveTVDir(const QString& dir)
765{
766 if (m_local)
767 {
769 }
770 else if (HasSockAndIncrRef())
771 {
772 ReferenceLocker rlocker(m_sock);
774 }
775}
776
783QString EncoderLink::GetInput(void) const
784{
785 if (m_local)
786 return m_tv->GetInput();
787
788 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetInput");
789 return {};
790}
791
802QString EncoderLink::SetInput(QString input)
803{
804 if (m_local)
805 return m_tv->SetInput(std::move(input));
806
807 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetInput");
808 return {};
809}
810
816void EncoderLink::ToggleChannelFavorite(const QString& changroup)
817{
818 if (m_local)
819 m_tv->ToggleChannelFavorite(changroup);
820 else
821 LOG(VB_GENERAL, LOG_ERR,
822 "Should be local only query: ToggleChannelFavorite");
823}
824
832{
833 if (m_local)
834 m_tv->ChangeChannel(channeldirection);
835 else
836 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: ChangeChannel");
837}
838
846void EncoderLink::SetChannel(const QString &name)
847{
848 if (m_local)
849 m_tv->SetChannel(name);
850 else
851 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetChannel");
852}
853
863{
864 if (!m_local)
865 {
866 LOG(VB_GENERAL, LOG_ERR,
867 "Should be local only query: GetPictureAttribute");
868 return -1;
869 }
870
871 return m_tv->GetPictureAttribute(attr);
872}
873
883 PictureAttribute attr,
884 bool direction)
885{
886 if (!m_local)
887 {
888 LOG(VB_GENERAL, LOG_ERR,
889 "Should be local only query: ChangePictureAttribute");
890 return -1;
891 }
892
893 return m_tv->ChangePictureAttribute(type, attr, direction);
894}
895
905bool EncoderLink::CheckChannel(const QString &name)
906{
907 if (m_local)
908 return m_tv->CheckChannel(name);
909
910 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: CheckChannel");
911 return false;
912}
913
923bool EncoderLink::ShouldSwitchToAnotherInput(const QString &channelid)
924{
925 if (m_local)
926 return m_tv->ShouldSwitchToAnotherInput(channelid);
927
928 LOG(VB_GENERAL, LOG_ERR,
929 "Should be local only query: ShouldSwitchToAnotherInput");
930 return false;
931}
932
941 const QString &prefix,
942 uint &complete_valid_channel_on_rec,
943 bool &is_extra_char_useful,
944 QString &needed_spacer)
945{
946 if (m_local)
947 {
948 return m_tv->CheckChannelPrefix(
949 prefix, complete_valid_channel_on_rec,
950 is_extra_char_useful, needed_spacer);
951 }
952
953 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: CheckChannelPrefix");
954 complete_valid_channel_on_rec = 0;
955 is_extra_char_useful = false;
956 needed_spacer = "";
957 return false;
958}
959
966 QString &title, QString &subtitle,
967 QString &desc, QString &category,
968 QString &starttime, QString &endtime,
969 QString &callsign, QString &iconpath,
970 QString &channelname, uint &_chanid,
971 QString &seriesid, QString &programid)
972{
973 if (m_local)
974 {
975 m_tv->GetNextProgram(direction,
976 title, subtitle, desc, category, starttime,
977 endtime, callsign, iconpath, channelname,
978 _chanid, seriesid, programid);
979 }
980 else
981 {
982 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetNextProgram");
983 }
984}
985
986bool EncoderLink::GetChannelInfo(uint &chanid, uint &sourceid,
987 QString &callsign, QString &channum,
988 QString &channame, QString &xmltv) const
989{
990 if (!m_local)
991 {
992 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetChannelInfo");
993 return false;
994 }
995
996 return m_tv->GetChannelInfo(chanid, sourceid,
997 callsign, channum, channame, xmltv);
998}
999
1001 const QString& oldchannum,
1002 const QString& callsign, const QString& channum,
1003 const QString& channame, const QString& xmltv)
1004{
1005 if (!m_local)
1006 {
1007 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetChannelInfo");
1008 return false;
1009 }
1010
1011 return m_tv->SetChannelInfo(chanid, sourceid, oldchannum,
1012 callsign, channum,
1013 channame, xmltv);
1014}
1015
1017{
1018 if (m_local)
1019 {
1020 LOG(VB_GENERAL, LOG_ERR, LOC + "Called on local recorder");
1021 return false;
1022 }
1023
1024 bool retval = m_sock->AddChildInput(childid);
1025 return retval;
1026}
1027
1028/* vim: set expandtab tabstop=4 shiftwidth=4: */
Keeps track of recordings in a current LiveTV instance.
Definition: livetvchain.h:33
QString GetSettingOnHost(const QString &key, const QString &host, const QString &defaultval="")
bool IsBusy(int capturecardnum, InputInfo *busy_input=nullptr, std::chrono::seconds time_buffer=5s)
void CancelNextRecording(int capturecardnum, bool cancel)
RecStatus::Type GetRecordingStatus(int capturecardnum)
bool GoToSleep(void)
Tells a slave to go to sleep.
long long GetMaxBitrate(int capturecardnum)
bool CheckFile(ProgramInfo *pginfo)
ProgramInfo * GetRecording(uint cardid)
Returns the ProgramInfo being used by any current recording.
std::chrono::milliseconds SetSignalMonitoringRate(int capturecardnum, std::chrono::milliseconds rate, int notifyFrontend)
bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo)
void RecordPending(int capturecardnum, const ProgramInfo *pginfo, std::chrono::seconds secsleft, bool hasLater)
int GetEncoderState(int capturecardnum)
Returns the maximum bits per second the recorder can produce.
RecStatus::Type StartRecording(int capturecardnum, ProgramInfo *pginfo)
void SetNextLiveTVDir(int capturecardnum, const QString &dir)
bool AddChildInput(uint childid)
Tells a slave to add a child input.
Holds information on recordings and videos.
Definition: programinfo.h:74
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
Definition: programinfo.h:380
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
Definition: programinfo.h:412
bool IsLocal(void) const
Definition: programinfo.h:358
bool IsSameRecording(const ProgramInfo &other) const
Definition: programinfo.h:339
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
Definition: programinfo.h:420
void SetPathname(const QString &pn)
virtual int DecrRef(void)
Decrements reference count and deletes on 0.
virtual int IncrRef(void)
Increments reference count.
This decrements the reference on destruction.
This is the coordinating class of the Recorder Subsystem.
Definition: tv_rec.h:142
bool ShouldSwitchToAnotherInput(const QString &chanid) const
Checks if named channel exists on current tuner, or another tuner.
Definition: tv_rec.cpp:2237
bool GetChannelInfo(uint &chanid, uint &sourceid, QString &callsign, QString &channum, QString &channame, QString &xmltvid) const
Definition: tv_rec.cpp:3335
bool GetKeyframePositions(int64_t start, int64_t end, frm_pos_map_t &map) const
Returns byte position in RingBuffer of a keyframes according to recorder.
Definition: tv_rec.cpp:2670
void PauseRecorder(void)
Tells "recorder" to pause, used for channel and input changes.
Definition: tv_rec.cpp:2979
uint GetFlags(void) const
Definition: tv_rec.h:245
void FrontendReady(void)
Tells TVRec that the frontend's TV class is ready for messages.
Definition: tv_rec.h:164
bool SetChannelInfo(uint chanid, uint sourceid, const QString &oldchannum, const QString &callsign, const QString &channum, const QString &channame, const QString &xmltvid)
Definition: tv_rec.cpp:3376
QString GetChainID(void)
Get the chainid of the livetv instance.
Definition: tv_rec.cpp:2755
void SetChannel(const QString &name, uint requestType=kFlagDetect)
Changes to a named channel on the current tuner.
Definition: tv_rec.cpp:3143
ProgramInfo * GetRecording(void)
Allocates and returns a ProgramInfo for the current recording.
Definition: tv_rec.cpp:277
void SetNextLiveTVDir(QString dir)
Definition: tv_rec.cpp:4626
RecStatus::Type GetRecordingStatus(void) const
Definition: tv_rec.cpp:711
void FinishRecording(void)
Tells TVRec to finish the current recording as soon as possible.
Definition: tv_rec.h:161
long long GetMaxBitrate(void) const
Returns the maximum bits per second this recorder can produce.
Definition: tv_rec.cpp:2697
RecStatus::Type StartRecording(ProgramInfo *pginfo)
Tells TVRec to Start recording the program "rcinfo" as soon as possible.
Definition: tv_rec.cpp:437
void ToggleChannelFavorite(const QString &changroupname)
Toggles whether the current channel should be on our favorites list.
Definition: tv_rec.cpp:3007
int ChangePictureAttribute(PictureAdjustType type, PictureAttribute attr, bool direction)
Returns current value [0,100] if it succeeds, -1 otherwise.
Definition: tv_rec.cpp:3076
long long GetFramesWritten(void)
Returns number of frames written to disk by recorder.
Definition: tv_rec.cpp:2622
void RecordPending(const ProgramInfo *rcinfo, std::chrono::seconds secsleft, bool hasLater)
Tells TVRec "rcinfo" is the next pending recording.
Definition: tv_rec.cpp:311
bool CheckChannelPrefix(const QString &prefix, uint &complete_valid_channel_on_rec, bool &is_extra_char_useful, QString &needed_spacer) const
Checks a prefix against the channels in the DB.
Definition: tv_rec.cpp:2373
void StopLiveTV(void)
Tells TVRec to stop a "Live TV" recorder.
Definition: tv_rec.cpp:2932
void GetNextProgram(BrowseDirection direction, QString &title, QString &subtitle, QString &desc, QString &category, QString &starttime, QString &endtime, QString &callsign, QString &iconpath, QString &channum, uint &chanid, QString &seriesid, QString &programid)
Definition: tv_rec.cpp:3219
long long GetFilePosition(void)
Returns total number of bytes written by RingBuffer.
Definition: tv_rec.cpp:2637
bool IsBusy(InputInfo *busy_input=nullptr, std::chrono::seconds time_buffer=5s) const
Returns true if the recorder is busy, or will be within the next time_buffer seconds.
Definition: tv_rec.cpp:2539
void CancelNextRecording(bool cancel)
Tells TVRec to cancel the upcoming recording.
Definition: tv_rec.cpp:387
void ChangeChannel(ChannelChangeDirection dir)
Changes to a channel in the 'dir' channel change direction.
Definition: tv_rec.h:206
QString GetInput(void) const
Returns current input.
Definition: tv_rec.cpp:3092
void SetLiveRecording(int recording)
Tells the Scheduler about changes to the recording status of the LiveTV recording.
Definition: tv_rec.cpp:2886
TVState GetState(void) const
Returns the TVState of the recorder.
Definition: tv_rec.cpp:263
int GetPictureAttribute(PictureAttribute attr)
Definition: tv_rec.cpp:3058
void SpawnLiveTV(LiveTVChain *newchain, bool pip, QString startchan)
Tells TVRec to spawn a "Live TV" recorder.
Definition: tv_rec.cpp:2725
void StopRecording(bool killFile=false)
Changes from a recording state to kState_None.
Definition: tv_rec.cpp:747
std::chrono::milliseconds SetSignalMonitoringRate(std::chrono::milliseconds rate, int notifyFrontend=1)
Sets the signal monitoring rate.
Definition: tv_rec.cpp:2183
bool IsReallyRecording(void)
Returns true if frontend can consider the recorder started.
Definition: tv_rec.cpp:2528
int64_t GetKeyframePosition(uint64_t desired) const
Returns byte position in RingBuffer of a keyframe according to recorder.
Definition: tv_rec.cpp:2653
bool CheckChannel(const QString &name) const
Checks if named channel exists on current tuner.
Definition: tv_rec.cpp:2327
bool GetKeyframeDurations(int64_t start, int64_t end, frm_pos_map_t &map) const
Definition: tv_rec.cpp:2681
float GetFramerate(void)
Returns recordering frame rate from the recorder.
Definition: tv_rec.cpp:2607
QString SetInput(QString input)
Changes to the specified input.
Definition: tv_rec.cpp:3117
unsigned int uint
Definition: compat.h:60
QString GetPlaybackURL(ProgramInfo *pginfo, bool storePath)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
dictionary info
Definition: azlyrics.py:7
QMap< long long, long long > frm_pos_map_t
Frame # -> File offset map.
Definition: programtypes.h:44
SleepStatus
SleepStatus is an enumeration of the awake/sleep status of a slave.
Definition: tv.h:100
@ sStatus_Asleep
A slave is considered asleep when it is not awake and not undefined.
Definition: tv.h:107
@ sStatus_Awake
A slave is awake when it is connected to the master.
Definition: tv.h:103
@ sStatus_Undefined
A slave's sleep status is undefined when it has never connected to the master backend or is not able ...
Definition: tv.h:120
BrowseDirection
Used to request ProgramInfo for channel browsing.
Definition: tv.h:41
PictureAdjustType
Definition: tv.h:124
ChannelChangeDirection
ChannelChangeDirection is an enumeration of possible channel changing directions.
Definition: tv.h:32
TVState
TVState is an enumeration of the states used by TV and TVRec.
Definition: tv.h:54
@ kState_RecordingOnly
Recording Only is a TVRec only state for when we are recording a program, but there is no one current...
Definition: tv.h:87
@ kState_WatchingLiveTV
Watching LiveTV is the state for when we are watching a recording and the user has control over the c...
Definition: tv.h:66
@ kState_Error
Error State, if we ever try to enter this state errored is set.
Definition: tv.h:57
@ kState_WatchingRecording
Watching Recording is the state for when we are watching an in progress recording,...
Definition: tv.h:83
@ kState_ChangingState
This is a placeholder state which we never actually enter, but is returned by GetState() when we are ...
Definition: tv.h:92
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:86
PictureAttribute