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
14#include "libmythbase/programinfo.h" // for ProgramInfo
17#include "libmythtv/inputinfo.h" // for InputInfo
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 retval = m_tv->GetState();
204 else if (HasSockAndIncrRef())
205 {
206 ReferenceLocker rlocker(m_sock);
208 }
209 else
210 {
211 LOG(VB_GENERAL, LOG_ERR, QString("Broken for input: %1")
212 .arg(m_inputid));
213 }
214
215 return retval;
216}
217
223{
224 uint retval = 0;
225
226 if (!IsConnected())
227 return retval;
228
229 if (m_local)
230 retval = m_tv->GetFlags();
231 else if (HasSockAndIncrRef())
232 {
233 ReferenceLocker rlocker(m_sock);
235 }
236 else
237 {
238 LOG(VB_GENERAL, LOG_ERR, LOC + "GetFlags failed");
239 }
240
241 return retval;
242}
243
250{
251 return (rec->GetChanID() == m_chanid &&
253}
254
264{
265 bool retval = false;
266 ProgramInfo *tvrec = nullptr;
267
268 if (m_local)
269 {
270 while (kState_ChangingState == GetState())
271 std::this_thread::sleep_for(100us);
272
273 if (IsBusyRecording())
274 tvrec = m_tv->GetRecording();
275
276 if (tvrec)
277 {
278 retval = tvrec->IsSameRecording(*rec);
279 delete tvrec;
280 }
281 }
282 else
283 {
284 if (HasSockAndIncrRef())
285 {
286 ReferenceLocker rlocker(m_sock);
287 retval = m_sock->EncoderIsRecording(m_inputid, rec);
288 }
289 }
290
291 return retval;
292}
293
303 std::chrono::seconds secsleft,
304 bool hasLater)
305{
306 if (m_local)
307 m_tv->RecordPending(rec, secsleft, hasLater);
308 else if (HasSockAndIncrRef())
309 {
310 ReferenceLocker rlocker(m_sock);
311 m_sock->RecordPending(m_inputid, rec, secsleft, hasLater);
312 }
313}
314
321{
322 if (!IsConnected())
323 return true;
324
326 return true;
327
328 return false;
329}
330
333{
334 if (HasSockAndIncrRef())
335 {
336 ReferenceLocker rlocker(m_sock);
337 return m_sock->CheckFile(pginfo);
338 }
339 pginfo->SetPathname(GetPlaybackURL(pginfo));
340 return pginfo->IsLocal();
341}
342
350{
351 if (m_local)
352 return m_tv->GetMaxBitrate();
353 if (HasSockAndIncrRef())
354 {
355 ReferenceLocker rlocker(m_sock);
357 }
358
359 return -1;
360}
361
376std::chrono::milliseconds EncoderLink::SetSignalMonitoringRate(std::chrono::milliseconds rate, int notifyFrontend)
377{
378 if (m_local)
379 return m_tv->SetSignalMonitoringRate(rate, notifyFrontend);
380 if (HasSockAndIncrRef())
381 {
382 ReferenceLocker rlocker(m_sock);
384 notifyFrontend);
385 }
386 return -1ms;
387}
388
392{
393 if (IsLocal() || !HasSockAndIncrRef())
394 return false;
395 ReferenceLocker rlocker(m_sock);
396
398
399 return m_sock->GoToSleep();
400}
401
407{
408 if (m_locked)
409 return -2;
410
411 m_locked = true;
412 return m_inputid;
413}
414
422{
424
427 m_chanid = rec->GetChanID();
428
429 if (m_local)
430 retval = m_tv->StartRecording(rec);
431 else if (HasSockAndIncrRef())
432 {
433 ReferenceLocker rlocker(m_sock);
434 retval = m_sock->StartRecording(m_inputid, rec);
435 }
436 else
437 {
438 LOG(VB_GENERAL, LOG_ERR,
439 QString("Wanted to start recording on recorder %1,\n\t\t\t"
440 "but the backend is not there anymore\n")
441 .arg(m_inputid));
442 }
443
444 if (retval != RecStatus::Recording &&
445 retval != RecStatus::Tuning &&
446 retval != RecStatus::Failing)
447 {
450 m_chanid = 0;
451 }
452
453 return retval;
454}
455
457{
459
460 if (m_local)
461 retval = m_tv->GetRecordingStatus();
462 else if (HasSockAndIncrRef())
463 {
464 ReferenceLocker rlocker(m_sock);
466 }
467 else
468 {
469 LOG(VB_GENERAL, LOG_ERR,
470 QString("Wanted to get status on recorder %1,\n\t\t\t"
471 "but the backend is not there anymore\n")
472 .arg(m_inputid));
473 }
474
475 if (retval != RecStatus::Recording &&
476 retval != RecStatus::Tuning &&
477 retval != RecStatus::Failing)
478 {
481 m_chanid = 0;
482 }
483
484 return retval;
485}
486
494{
495 ProgramInfo *info = nullptr;
496
497 if (m_local)
499 else if (HasSockAndIncrRef())
500 {
501 ReferenceLocker rlocker(m_sock);
503 }
504
505 return info;
506}
507
513void EncoderLink::StopRecording(bool killFile)
514{
517 m_chanid = 0;
518
519 if (m_local)
520 {
521 m_tv->StopRecording(killFile);
522 return;
523 }
524}
525
532{
533 if (m_local)
534 {
536 return;
537 }
539}
540
547{
548 if (m_local)
549 return m_tv->IsReallyRecording();
550
551 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: IsReallyRecording");
552 return false;
553}
554
563{
564 if (m_local)
565 return m_tv->GetFramerate();
566
567 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFramerate");
568 return -1;
569}
570
579{
580 if (m_local)
581 return m_tv->GetFramesWritten();
582
583 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFramesWritten");
584 return -1;
585}
586
594{
595 if (m_local)
596 return m_tv->GetFilePosition();
597
598 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetFilePosition");
599 return -1;
600}
601
608int64_t EncoderLink::GetKeyframePosition(uint64_t desired)
609{
610 if (m_local)
611 return m_tv->GetKeyframePosition(desired);
612
613 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetKeyframePosition");
614 return -1;
615}
616
618 int64_t start, int64_t end, frm_pos_map_t &map)
619{
620 if (!m_local)
621 {
622 LOG(VB_GENERAL, LOG_ERR,
623 "Should be local only query: GetKeyframePositions");
624 return false;
625 }
626
627 return m_tv->GetKeyframePositions(start, end, map);
628}
629
631 int64_t start, int64_t end, frm_pos_map_t &map)
632{
633 if (!m_local)
634 {
635 LOG(VB_GENERAL, LOG_ERR,
636 "Should be local only query: GetKeyframeDurations");
637 return false;
638 }
639
640 return m_tv->GetKeyframeDurations(start, end, map);
641}
642
649{
650 if (m_local)
652 else
653 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: FrontendReady");
654}
655
665{
666 if (m_local)
667 m_tv->CancelNextRecording(cancel);
668 else if (HasSockAndIncrRef())
669 {
670 ReferenceLocker rlocker(m_sock);
672 }
673}
674
686void EncoderLink::SpawnLiveTV(LiveTVChain *chain, bool pip, QString startchan)
687{
688 if (m_local)
689 m_tv->SpawnLiveTV(chain, pip, std::move(startchan));
690 else
691 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SpawnLiveTV");
692}
693
698{
699 if (m_local)
700 return m_tv->GetChainID();
701
702 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SpawnLiveTV");
703 return "";
704}
705
712{
713 if (m_local)
714 m_tv->StopLiveTV();
715 else
716 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: StopLiveTV");
717}
718
726{
727 if (m_local)
729 else
730 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: PauseRecorder");
731}
732
739{
740 if (m_local)
741 m_tv->SetLiveRecording(recording);
742 else
743 LOG(VB_GENERAL, LOG_ERR,
744 "Should be local only query: SetLiveRecording");
745}
746
750void EncoderLink::SetNextLiveTVDir(const QString& dir)
751{
752 if (m_local)
754 else if (HasSockAndIncrRef())
755 {
756 ReferenceLocker rlocker(m_sock);
758 }
759}
760
767QString EncoderLink::GetInput(void) const
768{
769 if (m_local)
770 return m_tv->GetInput();
771
772 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetInput");
773 return {};
774}
775
786QString EncoderLink::SetInput(QString input)
787{
788 if (m_local)
789 return m_tv->SetInput(std::move(input));
790
791 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetInput");
792 return {};
793}
794
800void EncoderLink::ToggleChannelFavorite(const QString& changroup)
801{
802 if (m_local)
803 m_tv->ToggleChannelFavorite(changroup);
804 else
805 LOG(VB_GENERAL, LOG_ERR,
806 "Should be local only query: ToggleChannelFavorite");
807}
808
816{
817 if (m_local)
818 m_tv->ChangeChannel(channeldirection);
819 else
820 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: ChangeChannel");
821}
822
830void EncoderLink::SetChannel(const QString &name)
831{
832 if (m_local)
833 m_tv->SetChannel(name);
834 else
835 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetChannel");
836}
837
847{
848 if (!m_local)
849 {
850 LOG(VB_GENERAL, LOG_ERR,
851 "Should be local only query: GetPictureAttribute");
852 return -1;
853 }
854
855 return m_tv->GetPictureAttribute(attr);
856}
857
867 PictureAttribute attr,
868 bool direction)
869{
870 if (!m_local)
871 {
872 LOG(VB_GENERAL, LOG_ERR,
873 "Should be local only query: ChangePictureAttribute");
874 return -1;
875 }
876
877 return m_tv->ChangePictureAttribute(type, attr, direction);
878}
879
889bool EncoderLink::CheckChannel(const QString &name)
890{
891 if (m_local)
892 return m_tv->CheckChannel(name);
893
894 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: CheckChannel");
895 return false;
896}
897
907bool EncoderLink::ShouldSwitchToAnotherInput(const QString &channelid)
908{
909 if (m_local)
910 return m_tv->ShouldSwitchToAnotherInput(channelid);
911
912 LOG(VB_GENERAL, LOG_ERR,
913 "Should be local only query: ShouldSwitchToAnotherInput");
914 return false;
915}
916
925 const QString &prefix,
926 uint &complete_valid_channel_on_rec,
927 bool &is_extra_char_useful,
928 QString &needed_spacer)
929{
930 if (m_local)
931 {
932 return m_tv->CheckChannelPrefix(
933 prefix, complete_valid_channel_on_rec,
934 is_extra_char_useful, needed_spacer);
935 }
936
937 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: CheckChannelPrefix");
938 complete_valid_channel_on_rec = 0;
939 is_extra_char_useful = false;
940 needed_spacer = "";
941 return false;
942}
943
950 QString &title, QString &subtitle,
951 QString &desc, QString &category,
952 QString &starttime, QString &endtime,
953 QString &callsign, QString &iconpath,
954 QString &channelname, uint &_chanid,
955 QString &seriesid, QString &programid)
956{
957 if (m_local)
958 {
959 m_tv->GetNextProgram(direction,
960 title, subtitle, desc, category, starttime,
961 endtime, callsign, iconpath, channelname,
962 _chanid, seriesid, programid);
963 }
964 else
965 {
966 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetNextProgram");
967 }
968}
969
970bool EncoderLink::GetChannelInfo(uint &chanid, uint &sourceid,
971 QString &callsign, QString &channum,
972 QString &channame, QString &xmltv) const
973{
974 if (!m_local)
975 {
976 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: GetChannelInfo");
977 return false;
978 }
979
980 return m_tv->GetChannelInfo(chanid, sourceid,
981 callsign, channum, channame, xmltv);
982}
983
985 const QString& oldchannum,
986 const QString& callsign, const QString& channum,
987 const QString& channame, const QString& xmltv)
988{
989 if (!m_local)
990 {
991 LOG(VB_GENERAL, LOG_ERR, "Should be local only query: SetChannelInfo");
992 return false;
993 }
994
995 return m_tv->SetChannelInfo(chanid, sourceid, oldchannum,
996 callsign, channum,
997 channame, xmltv);
998}
999
1001{
1002 if (m_local)
1003 {
1004 LOG(VB_GENERAL, LOG_ERR, LOC + "Called on local recorder");
1005 return false;
1006 }
1007
1008 bool retval = m_sock->AddChildInput(childid);
1009 return retval;
1010}
1011
1012/* 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:68
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
Definition: programinfo.h:373
QDateTime GetRecordingStartTime(void) const
Approximate time the recording started.
Definition: programinfo.h:405
bool IsLocal(void) const
Definition: programinfo.h:352
bool IsSameRecording(const ProgramInfo &other) const
Definition: programinfo.h:333
QDateTime GetRecordingEndTime(void) const
Approximate time the recording should have ended, did end, or is intended to end.
Definition: programinfo.h:413
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:143
bool ShouldSwitchToAnotherInput(const QString &chanid) const
Checks if named channel exists on current tuner, or another tuner.
Definition: tv_rec.cpp:2235
bool GetChannelInfo(uint &chanid, uint &sourceid, QString &callsign, QString &channum, QString &channame, QString &xmltvid) const
Definition: tv_rec.cpp:3341
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:2668
void PauseRecorder(void)
Tells "recorder" to pause, used for channel and input changes.
Definition: tv_rec.cpp:2977
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:3382
QString GetChainID(void)
Get the chainid of the livetv instance.
Definition: tv_rec.cpp:2753
void SetChannel(const QString &name, uint requestType=kFlagDetect)
Changes to a named channel on the current tuner.
Definition: tv_rec.cpp:3139
ProgramInfo * GetRecording(void)
Allocates and returns a ProgramInfo for the current recording.
Definition: tv_rec.cpp:278
void SetNextLiveTVDir(QString dir)
Definition: tv_rec.cpp:4610
RecStatus::Type GetRecordingStatus(void) const
Definition: tv_rec.cpp:712
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:2695
RecStatus::Type StartRecording(ProgramInfo *pginfo)
Tells TVRec to Start recording the program "rcinfo" as soon as possible.
Definition: tv_rec.cpp:438
void ToggleChannelFavorite(const QString &changroupname)
Toggles whether the current channel should be on our favorites list.
Definition: tv_rec.cpp:3005
int ChangePictureAttribute(PictureAdjustType type, PictureAttribute attr, bool direction)
Returns current value [0,100] if it succeeds, -1 otherwise.
Definition: tv_rec.cpp:3072
long long GetFramesWritten(void)
Returns number of frames written to disk by recorder.
Definition: tv_rec.cpp:2620
void RecordPending(const ProgramInfo *rcinfo, std::chrono::seconds secsleft, bool hasLater)
Tells TVRec "rcinfo" is the next pending recording.
Definition: tv_rec.cpp:312
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:2371
void StopLiveTV(void)
Tells TVRec to stop a "Live TV" recorder.
Definition: tv_rec.cpp:2930
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:3215
long long GetFilePosition(void)
Returns total number of bytes written by RingBuffer.
Definition: tv_rec.cpp:2635
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:2537
void CancelNextRecording(bool cancel)
Tells TVRec to cancel the upcoming recording.
Definition: tv_rec.cpp:388
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:3088
void SetLiveRecording(int recording)
Tells the Scheduler about changes to the recording status of the LiveTV recording.
Definition: tv_rec.cpp:2884
TVState GetState(void) const
Returns the TVState of the recorder.
Definition: tv_rec.cpp:264
int GetPictureAttribute(PictureAttribute attr)
Definition: tv_rec.cpp:3054
void SpawnLiveTV(LiveTVChain *newchain, bool pip, QString startchan)
Tells TVRec to spawn a "Live TV" recorder.
Definition: tv_rec.cpp:2723
void StopRecording(bool killFile=false)
Changes from a recording state to kState_None.
Definition: tv_rec.cpp:748
std::chrono::milliseconds SetSignalMonitoringRate(std::chrono::milliseconds rate, int notifyFrontend=1)
Sets the signal monitoring rate.
Definition: tv_rec.cpp:2181
bool IsReallyRecording(void)
Returns true if frontend can consider the recorder started.
Definition: tv_rec.cpp:2526
int64_t GetKeyframePosition(uint64_t desired) const
Returns byte position in RingBuffer of a keyframe according to recorder.
Definition: tv_rec.cpp:2651
bool CheckChannel(const QString &name) const
Checks if named channel exists on current tuner.
Definition: tv_rec.cpp:2325
bool GetKeyframeDurations(int64_t start, int64_t end, frm_pos_map_t &map) const
Definition: tv_rec.cpp:2679
float GetFramerate(void)
Returns recordering frame rate from the recorder.
Definition: tv_rec.cpp:2605
QString SetInput(QString input)
Changes to the specified input.
Definition: tv_rec.cpp:3113
QString GetPlaybackURL(ProgramInfo *pginfo, bool storePath)
unsigned int uint
Definition: freesurround.h:24
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
STL namespace.
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:95
PictureAttribute