MythTV  master
eitscanner.h
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 #ifndef EITSCANNER_H
3 #define EITSCANNER_H
4 
5 // Qt includes
6 #include <QWaitCondition>
7 #include <QStringList>
8 #include <QDateTime>
9 #include <QRunnable>
10 #include <QMutex>
11 
12 class TVRec;
13 class MThread;
14 class ChannelBase;
15 class DVBSIParser;
16 class EITHelper;
17 class ProgramMapTable;
18 
19 class EITSource
20 {
21  protected:
22  virtual ~EITSource() = default;
23  public:
24  virtual void SetEITHelper(EITHelper*) = 0;
25  virtual void SetEITRate(float rate) = 0;
26 };
27 
28 class EITScanner : public QRunnable
29 {
30  public:
31  explicit EITScanner(uint cardnum);
32  ~EITScanner() override { TeardownAll(); }
33 
34  void StartEITEventProcessing(ChannelBase *channel, EITSource *eitSource);
35  void StopEITEventProcessing(void);
36 
37  void StartActiveScan(TVRec *rec, std::chrono::seconds max_seconds_per_multiplex);
38  void StopActiveScan(void);
39 
40  protected:
41  void run(void) override; // QRunnable
42 
43  private:
44  void TeardownAll(void);
45  void RescheduleRecordings(void);
46 
47  QMutex m_lock;
48  ChannelBase *m_channel {nullptr};
49  EITSource *m_eitSource {nullptr};
50 
51  EITHelper *m_eitHelper {nullptr};
52  MThread *m_eventThread {nullptr};
53  volatile bool m_exitThread {false};
54  QWaitCondition m_exitThreadCond; // protected by m_lock
55 
56  TVRec *m_rec {nullptr};
57  volatile bool m_activeScan {false}; // active scan true, passive scan false
58  volatile bool m_activeScanStopped {true}; // protected by m_lock
59  QWaitCondition m_activeScanCond; // protected by m_lock
61  std::chrono::seconds m_activeScanTrigTime {0s};
62  QStringList m_activeScanChannels;
63  QStringList::iterator m_activeScanNextChan;
64 
66  uint m_sourceid {0}; // Video source ID
67  QString m_sourceName; // Video source name
68  uint m_eitCount {0}; // Processsed EIT events
69  uint m_mplexid {0}; // Transport stream multiplex ID
70 };
71 
72 #endif // EITSCANNER_H
EITScanner::RescheduleRecordings
void RescheduleRecordings(void)
Tells scheduler about programming changes.
Definition: eitscanner.cpp:179
EITScanner::StopEITEventProcessing
void StopEITEventProcessing(void)
Stops inserting Event Information Tables into DB.
Definition: eitscanner.cpp:221
EITScanner::m_cardnum
uint m_cardnum
Definition: eitscanner.h:65
EITScanner::m_exitThread
volatile bool m_exitThread
Definition: eitscanner.h:53
EITScanner::StartEITEventProcessing
void StartEITEventProcessing(ChannelBase *channel, EITSource *eitSource)
Start inserting Event Information Tables from the multiplex we happen to be tuned to into the databas...
Definition: eitscanner.cpp:188
EITScanner::m_activeScanNextTrig
QDateTime m_activeScanNextTrig
Definition: eitscanner.h:60
EITScanner::m_activeScanCond
QWaitCondition m_activeScanCond
Definition: eitscanner.h:59
EITScanner::m_eitSource
EITSource * m_eitSource
Definition: eitscanner.h:49
EITScanner::~EITScanner
~EITScanner() override
Definition: eitscanner.h:32
ProgramMapTable
A PMT table maps a program described in the ProgramAssociationTable to various PID's which describe t...
Definition: mpegtables.h:694
EITScanner::m_sourceid
uint m_sourceid
Definition: eitscanner.h:66
EITScanner::EITScanner
EITScanner(uint cardnum)
Definition: eitscanner.cpp:35
EITScanner::m_sourceName
QString m_sourceName
Definition: eitscanner.h:67
EITScanner::m_rec
TVRec * m_rec
Definition: eitscanner.h:56
EITScanner::m_eitHelper
EITHelper * m_eitHelper
Definition: eitscanner.h:51
EITSource::SetEITRate
virtual void SetEITRate(float rate)=0
EITScanner::StopActiveScan
void StopActiveScan(void)
Stop active EIT scan.
Definition: eitscanner.cpp:333
ChannelBase
Abstract class providing a generic interface to tuning hardware.
Definition: channelbase.h:31
EITSource::~EITSource
virtual ~EITSource()=default
EITScanner::m_eventThread
MThread * m_eventThread
Definition: eitscanner.h:52
EITSource::SetEITHelper
virtual void SetEITHelper(EITHelper *)=0
EITScanner::StartActiveScan
void StartActiveScan(TVRec *rec, std::chrono::seconds max_seconds_per_multiplex)
Start active EIT scan.
Definition: eitscanner.cpp:253
EITScanner::m_exitThreadCond
QWaitCondition m_exitThreadCond
Definition: eitscanner.h:54
EITScanner::m_lock
QMutex m_lock
Definition: eitscanner.h:47
uint
unsigned int uint
Definition: compat.h:81
EITHelper
Definition: eithelper.h:93
EITScanner::m_activeScanTrigTime
std::chrono::seconds m_activeScanTrigTime
Definition: eitscanner.h:61
EITScanner::m_activeScan
volatile bool m_activeScan
Definition: eitscanner.h:57
EITScanner::m_activeScanNextChan
QStringList::iterator m_activeScanNextChan
Definition: eitscanner.h:63
EITScanner::m_channel
ChannelBase * m_channel
Definition: eitscanner.h:48
EITScanner::run
void run(void) override
This runs the event loop for EITScanner until 'm_exitThread' is true.
Definition: eitscanner.cpp:79
TVRec
This is the coordinating class of the Recorder Subsystem.
Definition: tv_rec.h:142
MThread
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:48
EITScanner::m_mplexid
uint m_mplexid
Definition: eitscanner.h:69
EITScanner::m_activeScanChannels
QStringList m_activeScanChannels
Definition: eitscanner.h:62
EITScanner::m_activeScanStopped
volatile bool m_activeScanStopped
Definition: eitscanner.h:58
EITScanner
Acts as glue between ChannelBase, EITSource and EITHelper.
Definition: eitscanner.h:28
EITScanner::TeardownAll
void TeardownAll(void)
Stop active scan, delete thread and delete eithelper.
Definition: eitscanner.cpp:55
EITSource
Definition: eitscanner.h:19
EITScanner::m_eitCount
uint m_eitCount
Definition: eitscanner.h:68