MythTV  master
dvbsignalmonitor.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 #include <cerrno>
4 #include <cmath>
5 #include <cstring>
6 
7 #include <unistd.h>
8 
9 //Qt headers
10 #include <QCoreApplication>
11 
12 // MythTV headers
13 #include "libmyth/mythcontext.h"
14 #include "libmythbase/mythdbcon.h"
15 
16 #include "cardutil.h"
17 #include "dvbchannel.h"
18 #include "dvbrecorder.h"
19 #include "dvbsignalmonitor.h"
20 #include "dvbstreamhandler.h"
21 #include "dvbtypes.h"
22 #include "mpeg/atscstreamdata.h"
23 #include "mpeg/atsctables.h"
24 #include "mpeg/dvbstreamdata.h"
25 #include "mpeg/mpegtables.h"
26 
27 #define LOC QString("DVBSigMon[%1](%2): ") \
28  .arg(m_inputid).arg(m_channel->GetDevice())
29 
46  bool _release_stream,
47  uint64_t _flags)
48  : DTVSignalMonitor(db_cardnum, _channel, _release_stream, _flags),
49  // This snr setup is incorrect for API 3.x but works better
50  // than int16_t range in practice, however this is correct
51  // for the 4.0 DVB API which uses a uint16_t for the snr
52  m_signalToNoise (QCoreApplication::translate("(Common)",
53  "Signal To Noise"), "snr",
54  0, true, 0, 65535, 0ms),
55  m_bitErrorRate (tr("Bit Error Rate"), "ber",
56  65535, false, 0, 65535, 0ms),
57  m_uncorrectedBlocks(tr("Uncorrected Blocks"), "ucb",
58  65535, false, 0, 65535, 0ms),
59  m_rotorPosition (tr("Rotor Progress"), "pos",
60  100, true, 0, 100, 0ms),
61  m_streamHandlerStarted(false),
62  m_streamHandler(nullptr)
63 {
64  // This value should probably come from the database...
65  int threshold = 0; // signal strength threshold
66 
67  // Tuning timeout time for channel lock from database, minimum is 3s
68  std::chrono::milliseconds wait = 3s; // Minimum timeout time
69  std::chrono::milliseconds signal_timeout = 0ms; // Not used
70  std::chrono::milliseconds tuning_timeout = 0ms; // Maximum time for channel lock from card
71  CardUtil::GetTimeouts(db_cardnum, signal_timeout, tuning_timeout);
72  if (tuning_timeout < wait)
73  {
74  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
75  QString("Tuning timeout from database: %1 ms is too small, using %2 ms")
76  .arg(tuning_timeout.count()).arg(wait.count()));
77  }
78  else
79  {
80  wait = tuning_timeout; // Use value from database
81  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
82  QString("Tuning timeout: %1 ms").arg(wait.count()));
83  }
84 
87  m_signalStrength.SetThreshold(threshold);
88 
89  // This is incorrect for API 3.x but works better than int16_t range
90  // in practice, however this is correct for the 4.0 DVB API
91  m_signalStrength.SetRange(0, 65535);
92 
93  // Determine the signal monitoring capabilities from the card and
94  // do not use the capabilities that are not present.
95  uint64_t rmflags = 0;
96  bool mok = false;
97 
98  auto log_message = [&mok](const QString& loc, const QString& msg)
99  {
100  if (mok)
101  LOG(VB_CHANNEL, LOG_INFO, loc + "Can " + msg);
102  else
103  LOG(VB_GENERAL, LOG_WARNING, loc + "Cannot " + msg + ENO);
104  };
105 
106  auto log_message_channel = [&mok](const QString& loc, const QString& msg)
107  {
108  if (mok)
109  LOG(VB_CHANNEL, LOG_INFO, loc + "Can " + msg);
110  else
111  LOG(VB_CHANNEL, LOG_WARNING, loc + "Cannot " + msg + ENO);
112  };
113 
114  auto update_rmflags = [&mok, &rmflags](uint64_t flag)
115  {
116  if (!mok)
117  rmflags |= flag;
118  };
119 
120  // Signal strength
121  auto flag = kSigMon_WaitForSig;
122  if (HasFlags(flag))
123  {
124  _channel->GetSignalStrength(&mok);
125  update_rmflags(flag);
126  log_message(LOC, "measure Signal Strength");
127  }
128 
129  // Signal/Noise ratio
130  flag = kDVBSigMon_WaitForSNR;
131  if (HasFlags(flag))
132  {
133  _channel->GetSNR(&mok);
134  update_rmflags(flag);
135  log_message(LOC, "measure S/N");
136  }
137 
138  // Bit error rate
139  flag = kDVBSigMon_WaitForBER;
140  if (HasFlags(flag))
141  {
142  _channel->GetBitErrorRate(&mok);
143  update_rmflags(flag);
144  log_message_channel(LOC, "measure Bit Error Rate");
145  }
146 
147  // Uncorrected block count
148  flag = kDVBSigMon_WaitForUB;
149  if (HasFlags(flag))
150  {
151  _channel->GetUncorrectedBlockCount(&mok);
152  update_rmflags(flag);
153  log_message_channel(LOC, "count Uncorrected Blocks");
154  }
155 
156  RemoveFlags(rmflags);
157 
158  LOG(VB_CHANNEL, LOG_INFO, LOC + "DVBSignalMonitor::ctor " +
159  QString("initial flags %1").arg(sm_flags_to_string(m_flags)));
160 
162  if (m_minimumUpdateRate > 30ms)
164 
166 }
167 
172 {
175 }
176 
177 // documented in dtvsignalmonitor.h
179 {
180  QMutexLocker locker(&m_statusLock);
181  m_rotorPosition.SetThreshold((int)roundf(100 * target));
182 }
183 
184 void DVBSignalMonitor::GetRotorStatus(bool &was_moving, bool &is_moving)
185 {
186  DVBChannel *dvbchannel = GetDVBChannel();
187  if (!dvbchannel)
188  return;
189 
190  const DiSEqCDevRotor *rotor = dvbchannel->GetRotor();
191  if (!rotor)
192  return;
193 
194  QMutexLocker locker(&m_statusLock);
195  was_moving = m_rotorPosition.GetValue() < 100;
196  int pos = (int)truncf(rotor->GetProgress() * 100);
198  is_moving = m_rotorPosition.GetValue() < 100;
199 }
200 
205 {
206  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- begin");
208  if (GetStreamData())
210  m_streamHandlerStarted = false;
211  m_streamHandler->SetRetuneAllowed(false, nullptr, nullptr);
212  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- end");
213 }
214 
215 QStringList DVBSignalMonitor::GetStatusList(void) const
216 {
217  QStringList list = DTVSignalMonitor::GetStatusList();
218  m_statusLock.lock();
227  m_statusLock.unlock();
228  return list;
229 }
230 
231 void DVBSignalMonitor::HandlePMT(uint program_num, const ProgramMapTable *pmt)
232 {
233  DTVSignalMonitor::HandlePMT(program_num, pmt);
234 
235  if (pmt->ProgramNumber() == (uint)m_programNumber)
236  {
237  DVBChannel *dvbchannel = GetDVBChannel();
238  if (dvbchannel)
239  dvbchannel->SetPMT(pmt);
240  }
241 }
242 
244 {
246  DVBChannel *dvbchannel = GetDVBChannel();
247  if (dvbchannel)
248  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
249 }
250 
252 {
254  DVBChannel *dvbchannel = GetDVBChannel();
255  if (dvbchannel)
256  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
257 }
258 
260 {
261  return dynamic_cast<DVBChannel*>(m_channel);
262 }
263 
271 {
272  if (!m_running || m_exit)
273  return;
274 
276  {
277  if (!m_streamHandler->IsRunning())
278  {
279  m_error = tr("Error: stream handler died");
280  m_updateDone = true;
281  return;
282  }
283 
284  // Update signal status for display
285  DVBChannel *dvbchannel = GetDVBChannel();
286  if (dvbchannel)
287  {
288  // Get info from card
289  uint sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
290  uint snr = (uint) (dvbchannel->GetSNR() * 65535);
291 
292  // Set SignalMonitorValues from info from card.
293  {
294  QMutexLocker locker(&m_statusLock);
295 
300 
301  // LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
302  // QString("Update sig:%1 snr:%2").arg(sig).arg(snr));
303  }
304  }
305 
306  EmitStatus();
307  if (IsAllGood())
309 
310  m_updateDone = true;
311  return;
312  }
313 
315 
316  DVBChannel *dvbchannel = GetDVBChannel();
317  if (!dvbchannel)
318  return;
319 
320  // Handle retuning after rotor has turned
322  {
323  if (dvbchannel->GetRotor())
324  {
326  m_streamHandler->SetRetuneAllowed(true, this, dvbchannel);
328  }
329  else
331  }
332 
333  bool wasLocked = false;
334  bool isLocked = false;
335  uint sig = 0;
336  uint snr = 0;
337  uint ber = 0;
338  uint ublocks = 0;
339 
340  // Get info from card
341  bool has_lock = dvbchannel->HasLock();
343  sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
345  snr = (uint) (dvbchannel->GetSNR() * 65535);
347  ber = (uint) dvbchannel->GetBitErrorRate();
349  ublocks = (uint) dvbchannel->GetUncorrectedBlockCount();
350 
351  has_lock |= m_streamHandler->IsRunning();
352 
353  // Set SignalMonitorValues from info from card.
354  {
355  QMutexLocker locker(&m_statusLock);
356 
357  // BER and UB are actually uint32 values, but we
358  // clamp them at 64K. This is because these values
359  // are actually cumulative, but we don't try to
360  // normalize these to a time period.
361 
362  wasLocked = m_signalLock.IsGood();
363  m_signalLock.SetValue((has_lock) ? 1 : 0);
364  isLocked = m_signalLock.IsGood();
365 
373  m_uncorrectedBlocks.SetValue(ublocks);
374  }
375 
376  // Signal lock change
377  if (wasLocked != isLocked)
378  {
379  LOG(VB_CHANNEL, LOG_INFO, LOC + "UpdateValues -- Signal " +
380  (isLocked ? "Locked" : "Lost"));
381  }
382 
383  EmitStatus();
384  if (IsAllGood())
386 
387  // Start table monitoring if we are waiting on any table
388  // and we have a lock.
389  if (isLocked && GetStreamData() &&
394  {
396  m_streamHandler->AddListener(GetStreamData(), true, false);
397  m_streamHandlerStarted = true;
398  }
399 
400  m_updateDone = true;
401 }
402 
407 {
408  // Emit signals..
418 }
DVBSignalMonitor::m_signalToNoise
SignalMonitorValue m_signalToNoise
Definition: dvbsignalmonitor.h:61
DTVSignalMonitor::AddFlags
void AddFlags(uint64_t _flags) override
Definition: dtvsignalmonitor.cpp:140
DVBChannel::GetUncorrectedBlockCount
double GetUncorrectedBlockCount(bool *ok=nullptr) const
Returns # of uncorrected blocks since last call. First call undefined.
Definition: dvbchannel.cpp:1493
SignalMonitor::m_flags
volatile uint64_t m_flags
Definition: signalmonitor.h:206
ENO
#define ENO
This can be appended to the LOG args with "+".
Definition: mythlogging.h:73
DTVSignalMonitor::RemoveFlags
void RemoveFlags(uint64_t _flags) override
Definition: dtvsignalmonitor.cpp:146
DVBStreamHandler::SetRetuneAllowed
void SetRetuneAllowed(bool allow, DTVSignalMonitor *sigmon, DVBChannel *dvbchan)
Definition: dvbstreamhandler.cpp:493
SignalMonitor::m_minimumUpdateRate
std::chrono::milliseconds m_minimumUpdateRate
Definition: signalmonitor.h:209
DVBChannel::GetRotor
const DiSEqCDevRotor * GetRotor(void) const
Returns rotor object if it exists, nullptr otherwise.
Definition: dvbchannel.cpp:1158
DiSEqCDevRotor
Rotor class.
Definition: diseqc.h:302
SignalMonitorValue::SetValue
void SetValue(int _value)
Definition: signalmonitorvalue.h:74
DVBSignalMonitor::m_bitErrorRate
SignalMonitorValue m_bitErrorRate
Definition: dvbsignalmonitor.h:62
false
VERBOSE_PREAMBLE false
Definition: verbosedefs.h:89
SignalMonitorValue::SetThreshold
void SetThreshold(int _threshold)
Definition: signalmonitorvalue.h:84
TimeDateTable
This table gives the current DVB stream time.
Definition: dvbtables.h:381
PID::MPEG_PAT_PID
@ MPEG_PAT_PID
Definition: mpegtables.h:211
SignalMonitorValue::GetStatus
QString GetStatus() const
Returns a signal monitor value as one long string.
Definition: signalmonitorvalue.h:32
DVBSignalMonitor::m_uncorrectedBlocks
SignalMonitorValue m_uncorrectedBlocks
Definition: dvbsignalmonitor.h:63
MThread::wait
bool wait(std::chrono::milliseconds time=std::chrono::milliseconds::max())
Wait for the MThread to exit, with a maximum timeout.
Definition: mthread.cpp:300
SignalMonitor::m_channel
ChannelBase * m_channel
Definition: signalmonitor.h:203
ProgramMapTable
A PMT table maps a program described in the ProgramAssociationTable to various PID's which describe t...
Definition: mpegtables.h:694
MThread::usleep
static void usleep(std::chrono::microseconds time)
Definition: mthread.cpp:335
SignalMonitor::kDTVSigMon_WaitForMGT
static const uint64_t kDTVSigMon_WaitForMGT
Definition: signalmonitor.h:183
SignalMonitor::kDVBSigMon_WaitForSNR
static const uint64_t kDVBSigMon_WaitForSNR
Wait for the Signal to Noise Ratio to rise above a threshold.
Definition: signalmonitor.h:194
DTVSignalMonitor::HandleSTT
void HandleSTT(const SystemTimeTable *stt) override
Definition: dtvsignalmonitor.cpp:419
SignalMonitor::SendMessage
void SendMessage(SignalMonitorMessageType type, const SignalMonitorValue &val)
Definition: signalmonitor.cpp:413
DVBSignalMonitor::SetRotorTarget
void SetRotorTarget(float target) override
Sets rotor target pos from 0.0 to 1.0.
Definition: dvbsignalmonitor.cpp:178
SignalMonitor::m_exit
volatile bool m_exit
Definition: signalmonitor.h:227
mythdbcon.h
DVBSignalMonitor::m_streamHandler
DVBStreamHandler * m_streamHandler
Definition: dvbsignalmonitor.h:67
DTVSignalMonitor::GetStreamData
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
Definition: dtvsignalmonitor.h:59
atscstreamdata.h
ProgramMapTable::ProgramNumber
uint ProgramNumber(void) const
Definition: mpegtables.h:731
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
DVBSignalMonitor::~DVBSignalMonitor
~DVBSignalMonitor() override
Stops signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:171
DVBSignalMonitor::GetStatusList
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
Definition: dvbsignalmonitor.cpp:215
DTVSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dtvsignalmonitor.cpp:502
SignalMonitor::m_running
volatile bool m_running
Definition: signalmonitor.h:226
DVBStreamHandler::RetuneMonitor
void RetuneMonitor(void)
Definition: dvbstreamhandler.cpp:512
SignalMonitor::kDVBSigMon_WaitForBER
static const uint64_t kDVBSigMon_WaitForBER
Wait for the Bit Error Rate to fall below a threshold.
Definition: signalmonitor.h:196
DVBSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dvbsignalmonitor.cpp:251
DVBChannel::GetSignalStrength
double GetSignalStrength(bool *ok=nullptr) const
Returns signal strength in the range [0.0..1.0] (non-calibrated).
Definition: dvbchannel.cpp:1257
DVBChannel::SetPMT
void SetPMT(const ProgramMapTable *pmt)
Tells the Conditional Access Module which streams we wish to decode.
Definition: dvbchannel.cpp:726
SignalMonitorValue::GetName
QString GetName(void) const
Returns the long name of this value.
Definition: signalmonitorvalue.cpp:83
DVBSignalMonitor::EmitStatus
void EmitStatus(void) override
Emits signals for lock, signal strength, etc.
Definition: dvbsignalmonitor.cpp:406
DVBSignalMonitor::UpdateValues
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
Definition: dvbsignalmonitor.cpp:270
SignalMonitor::HasAnyFlag
bool HasAnyFlag(uint64_t _flags) const
Definition: signalmonitor.cpp:283
dvbchannel.h
true
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:95
SignalMonitor::kSigMon_WaitForSig
static const uint64_t kSigMon_WaitForSig
Definition: signalmonitor.h:187
SignalMonitor::m_error
QString m_error
Definition: signalmonitor.h:216
DVBSignalMonitor::GetRotorStatus
void GetRotorStatus(bool &was_moving, bool &is_moving) override
Definition: dvbsignalmonitor.cpp:184
DVBSignalMonitor::m_rotorPosition
SignalMonitorValue m_rotorPosition
Definition: dvbsignalmonitor.h:64
StreamHandler::RemoveListener
virtual void RemoveListener(MPEGStreamData *data)
Definition: streamhandler.cpp:80
SignalMonitor::m_statusLock
QRecursiveMutex m_statusLock
Definition: signalmonitor.h:232
dvbstreamhandler.h
DTVSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dtvsignalmonitor.cpp:359
dvbrecorder.h
DiSEqCDevRotor::GetProgress
double GetProgress(void) const
Returns an indication of rotor progress.
Definition: diseqc.cpp:1953
SignalMonitorValue::GetValue
int GetValue() const
Returns the value.
Definition: signalmonitorvalue.h:40
SignalMonitor::kDVBSigMon_WaitForUB
static const uint64_t kDVBSigMon_WaitForUB
Wait for uncorrected FEC blocks to fall below a threshold.
Definition: signalmonitor.h:198
SignalMonitorValue::SetTimeout
void SetTimeout(std::chrono::milliseconds _timeout)
Definition: signalmonitorvalue.h:98
dvbsignalmonitor.h
dvbtypes.h
SignalMonitor::m_signalStrength
SignalMonitorValue m_signalStrength
Definition: signalmonitor.h:219
SignalMonitor::m_inputid
int m_inputid
Definition: signalmonitor.h:205
SignalMonitor::kDVBSigMon_WaitForPos
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
Definition: signalmonitor.h:200
DVBStreamHandler::Return
static void Return(DVBStreamHandler *&ref, int inputid)
Definition: dvbstreamhandler.cpp:74
DVBStreamHandler::Get
static DVBStreamHandler * Get(const QString &devname, int inputid)
Definition: dvbstreamhandler.cpp:44
sm_flags_to_string
QString sm_flags_to_string(uint64_t flags)
Definition: signalmonitor.h:237
DVBStreamHandler::IsRetuneAllowed
bool IsRetuneAllowed(void) const
Definition: dvbstreamhandler.h:42
SignalMonitor::m_signalLock
SignalMonitorValue m_signalLock
Definition: signalmonitor.h:218
DVBSignalMonitor::GetDVBChannel
DVBChannel * GetDVBChannel(void)
Definition: dvbsignalmonitor.cpp:259
SignalMonitor::SendMessageAllGood
void SendMessageAllGood(void)
Definition: signalmonitor.cpp:468
kStatusBitErrorRate
@ kStatusBitErrorRate
Definition: signalmonitorlistener.h:16
SignalMonitor::kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPMT
Definition: signalmonitor.h:182
DVBSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dvbsignalmonitor.cpp:231
SignalMonitor::kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForPAT
Definition: signalmonitor.h:181
SignalMonitor::m_updateDone
bool m_updateDone
Definition: signalmonitor.h:210
SignalMonitor::kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_WaitForNIT
Definition: signalmonitor.h:185
SignalMonitor::EmitStatus
virtual void EmitStatus(void)
Definition: signalmonitor.cpp:475
SignalMonitor::kDTVSigMon_WaitForSDT
static const uint64_t kDTVSigMon_WaitForSDT
Definition: signalmonitor.h:186
DVBChannel::GetSNR
double GetSNR(bool *ok=nullptr) const
Returns signal/noise in the range [0..1.0].
Definition: dvbchannel.cpp:1342
DTVSignalMonitor::GetStatusList
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
Definition: dtvsignalmonitor.cpp:74
DVBSignalMonitor::HandleSTT
void HandleSTT(const SystemTimeTable *stt) override
Definition: dvbsignalmonitor.cpp:243
mpegtables.h
kStatusRotorPosition
@ kStatusRotorPosition
Definition: signalmonitorlistener.h:18
SignalMonitorValue::SetRange
void SetRange(int _min, int _max)
Sets the minimum and maximum values.
Definition: signalmonitorvalue.h:93
LOC
#define LOC
Definition: dvbsignalmonitor.cpp:27
uint
unsigned int uint
Definition: compat.h:79
CardUtil::GetTimeouts
static bool GetTimeouts(uint inputid, std::chrono::milliseconds &signal_timeout, std::chrono::milliseconds &channel_timeout)
Definition: cardutil.cpp:2306
DVBSignalMonitor::DVBSignalMonitor
DVBSignalMonitor(void)
kStatusSignalToNoise
@ kStatusSignalToNoise
Definition: signalmonitorlistener.h:15
SignalMonitorValue::IsGood
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
Definition: signalmonitorvalue.h:56
DVBChannel::GetMinSignalMonitorDelay
std::chrono::milliseconds GetMinSignalMonitorDelay(void) const
Definition: dvbchannel.h:65
dvbstreamdata.h
TimeOffset
Definition: channelsettings.cpp:175
DVBChannel::GetBitErrorRate
double GetBitErrorRate(bool *ok=nullptr) const
Returns # of corrected bits since last call. First call undefined.
Definition: dvbchannel.cpp:1425
DVBChannel
Provides interface to the tuning hardware when using DVB drivers.
Definition: dvbchannel.h:31
SignalMonitor::HasFlags
bool HasFlags(uint64_t _flags) const
Definition: signalmonitor.cpp:278
cardutil.h
DVBChannel::SetTimeOffset
void SetTimeOffset(double offset)
Tells the Conditional Access Module the offset from the computers utc time to dvb time.
Definition: dvbchannel.cpp:738
kStatusUncorrectedBlocks
@ kStatusUncorrectedBlocks
Definition: signalmonitorlistener.h:17
mythcontext.h
DVBChannel::HasLock
bool HasLock(bool *ok=nullptr) const
Returns true iff we have a signal carrier lock.
Definition: dvbchannel.cpp:1166
DTVSignalMonitor
This class is intended to detect the presence of needed tables.
Definition: dtvsignalmonitor.h:14
atsctables.h
SystemTimeTable
This table contains the GPS time at the time of transmission.
Definition: atsctables.h:684
StreamHandler::AddListener
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
Definition: streamhandler.cpp:35
MPEGStreamData::AddListeningPID
virtual void AddListeningPID(uint pid, PIDPriority priority=kPIDPriorityNormal)
Definition: mpegstreamdata.h:120
DVBSignalMonitor::Stop
void Stop(void) override
Stop signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:204
StreamHandler::IsRunning
bool IsRunning(void) const
Definition: streamhandler.cpp:163
SignalMonitor::Stop
virtual void Stop()
Stop signal monitoring thread.
Definition: signalmonitor.cpp:307
DTVSignalMonitor::IsAllGood
bool IsAllGood(void) const override
Definition: dtvsignalmonitor.cpp:585
DVBChannel::GetCardNum
QString GetCardNum(void) const
Returns DVB device number, used to construct filenames for DVB devices.
Definition: dvbchannel.h:59
DTVSignalMonitor::m_programNumber
int m_programNumber
Definition: dtvsignalmonitor.h:137
DVBSignalMonitor::m_streamHandlerStarted
bool m_streamHandlerStarted
Definition: dvbsignalmonitor.h:66
SignalMonitor::kDTVSigMon_WaitForVCT
static const uint64_t kDTVSigMon_WaitForVCT
Definition: signalmonitor.h:184