MythTV  master
iptvsignalmonitor.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 // MythTV headers
5 
6 #include "iptvchannel.h"
7 #include "iptvsignalmonitor.h"
8 #include "mpeg/mpegstreamdata.h"
9 
10 #define LOC QString("IPTVSigMon[%1](%2): ") \
11  .arg(m_inputid).arg(m_channel->GetDevice())
12 
27  IPTVChannel *_channel,
28  bool _release_stream,
29  uint64_t _flags)
30  : DTVSignalMonitor(db_cardnum, _channel, _release_stream, _flags)
31 {
32  LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");
35 }
36 
41 {
42  LOG(VB_CHANNEL, LOG_INFO, LOC + "dtor");
44 }
45 
47 {
48  return dynamic_cast<IPTVChannel*>(m_channel);
49 }
50 
55 {
56  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- begin");
58  GetIPTVChannel()->SetStreamData(nullptr);
59  m_streamHandlerStarted = false;
60  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- end");
61 }
62 
64 {
67 }
68 
70 {
71  LOG(VB_CHANNEL, LOG_INFO, LOC + QString("HandlePAT pn: %1")
72  .arg(m_programNumber));
74 }
75 
83 {
84  if (!m_running || m_exit)
85  return;
86 
87  IPTVChannel *channel = GetIPTVChannel();
88  if (channel == nullptr)
89  return;
90 
91  if (!m_locked && channel->IsOpen())
92  {
93  QMutexLocker locker(&m_statusLock);
96  m_locked = true;
97  }
98 
99  EmitStatus();
100  if (IsAllGood())
102 
103  m_updateDone = true;
104 
106  return;
107 
108  // Start table monitoring if we are waiting on any table
109  // and we have a lock.
110  if (GetStreamData() &&
114  {
115  LOG(VB_CHANNEL, LOG_INFO, LOC + "UpdateValues: start sigmon");
116  channel->SetStreamData(GetStreamData());
117  m_streamHandlerStarted = true;
118  }
119 }
LOC
#define LOC
Definition: iptvsignalmonitor.cpp:10
SignalMonitorValue::SetValue
void SetValue(int _value)
Definition: signalmonitorvalue.h:74
SignalMonitor::m_channel
ChannelBase * m_channel
Definition: signalmonitor.h:201
SignalMonitor::kDTVSigMon_WaitForMGT
static const uint64_t kDTVSigMon_WaitForMGT
Definition: signalmonitor.h:181
SignalMonitor::m_exit
volatile bool m_exit
Definition: signalmonitor.h:225
DTVSignalMonitor::GetStreamData
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
Definition: dtvsignalmonitor.h:59
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
iptvsignalmonitor.h
IPTVSignalMonitor::HandlePAT
void HandlePAT(const ProgramAssociationTable *pat) override
Definition: iptvsignalmonitor.cpp:69
IPTVSignalMonitor::IPTVSignalMonitor
IPTVSignalMonitor(void)
SignalMonitor::m_running
volatile bool m_running
Definition: signalmonitor.h:224
SignalMonitor::HasAnyFlag
bool HasAnyFlag(uint64_t _flags) const
Definition: signalmonitor.cpp:280
SignalMonitor::m_statusLock
QRecursiveMutex m_statusLock
Definition: signalmonitor.h:227
SignalMonitor::m_signalStrength
SignalMonitorValue m_signalStrength
Definition: signalmonitor.h:217
mythlogging.h
SignalMonitor::m_signalLock
SignalMonitorValue m_signalLock
Definition: signalmonitor.h:216
SignalMonitor::SendMessageAllGood
void SendMessageAllGood(void)
Definition: signalmonitor.cpp:465
SignalMonitor::kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPMT
Definition: signalmonitor.h:180
SignalMonitor::kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForPAT
Definition: signalmonitor.h:179
SignalMonitor::m_updateDone
bool m_updateDone
Definition: signalmonitor.h:208
SignalMonitor::kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_WaitForNIT
Definition: signalmonitor.h:183
SignalMonitor::EmitStatus
virtual void EmitStatus(void)
Definition: signalmonitor.cpp:472
SignalMonitor::kDTVSigMon_WaitForSDT
static const uint64_t kDTVSigMon_WaitForSDT
Definition: signalmonitor.h:184
MPEGStreamData
Encapsulates data about MPEG stream and emits events for each table.
Definition: mpegstreamdata.h:85
IPTVChannel
Definition: iptvchannel.h:24
IPTVSignalMonitor::~IPTVSignalMonitor
~IPTVSignalMonitor() override
Stops signal monitoring and table monitoring threads.
Definition: iptvsignalmonitor.cpp:40
IPTVSignalMonitor::SetStreamData
void SetStreamData(MPEGStreamData *data) override
Sets the MPEG stream data for DTVSignalMonitor to use, and connects the table signals to the monitor.
Definition: iptvsignalmonitor.cpp:63
ProgramAssociationTable
The Program Association Table lists all the programs in a stream, and is always found on PID 0.
Definition: mpegtables.h:617
IPTVChannel::IsOpen
bool IsOpen(void) const override
Reports whether channel is already open.
Definition: iptvchannel.cpp:154
IPTVChannel::SetStreamData
void SetStreamData(MPEGStreamData *sd)
Definition: iptvchannel.cpp:61
mpegstreamdata.h
iptvchannel.h
IPTVSignalMonitor::GetIPTVChannel
IPTVChannel * GetIPTVChannel(void)
Definition: iptvsignalmonitor.cpp:46
IPTVSignalMonitor::Stop
void Stop(void) override
Stop signal monitoring and table monitoring threads.
Definition: iptvsignalmonitor.cpp:54
DTVSignalMonitor::SetStreamData
virtual void SetStreamData(MPEGStreamData *data)
Sets the MPEG stream data for DTVSignalMonitor to use, and connects the table signals to the monitor.
Definition: dtvsignalmonitor.cpp:258
DTVSignalMonitor
This class is intended to detect the presence of needed tables.
Definition: dtvsignalmonitor.h:14
IPTVSignalMonitor::UpdateValues
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
Definition: iptvsignalmonitor.cpp:82
IPTVSignalMonitor::m_streamHandlerStarted
bool m_streamHandlerStarted
Definition: iptvsignalmonitor.h:35
IPTVSignalMonitor::m_locked
bool m_locked
Definition: iptvsignalmonitor.h:36
SignalMonitor::Stop
virtual void Stop()
Stop signal monitoring thread.
Definition: signalmonitor.cpp:304
DTVSignalMonitor::HandlePAT
void HandlePAT(const ProgramAssociationTable *pat) override
Definition: dtvsignalmonitor.cpp:291
DTVSignalMonitor::IsAllGood
bool IsAllGood(void) const override
Definition: dtvsignalmonitor.cpp:585
DTVSignalMonitor::m_programNumber
int m_programNumber
Definition: dtvsignalmonitor.h:137
SignalMonitor::kDTVSigMon_WaitForVCT
static const uint64_t kDTVSigMon_WaitForVCT
Definition: signalmonitor.h:182