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"
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);
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());
118 }
119}
This class is intended to detect the presence of needed tables.
bool IsAllGood(void) const override
void HandlePAT(const ProgramAssociationTable *pat) override
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
virtual void SetStreamData(MPEGStreamData *data)
Sets the MPEG stream data for DTVSignalMonitor to use, and connects the table signals to the monitor.
void SetStreamData(MPEGStreamData *sd)
Definition: iptvchannel.cpp:61
bool IsOpen(void) const override
Reports whether channel is already open.
IPTVChannel * GetIPTVChannel(void)
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
void SetStreamData(MPEGStreamData *data) override
Sets the MPEG stream data for DTVSignalMonitor to use, and connects the table signals to the monitor.
void HandlePAT(const ProgramAssociationTable *pat) override
~IPTVSignalMonitor() override
Stops signal monitoring and table monitoring threads.
void Stop(void) override
Stop signal monitoring and table monitoring threads.
Encapsulates data about MPEG stream and emits events for each table.
The Program Association Table lists all the programs in a stream, and is always found on PID 0.
Definition: mpegtables.h:599
void SetValue(int _value)
static const uint64_t kDTVSigMon_WaitForVCT
QRecursiveMutex m_statusLock
volatile bool m_exit
void SendMessageAllGood(void)
SignalMonitorValue m_signalLock
static const uint64_t kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_WaitForSDT
virtual void Stop()
Stop signal monitoring thread.
volatile bool m_running
ChannelBase * m_channel
static const uint64_t kDTVSigMon_WaitForPMT
virtual void EmitStatus(void)
static const uint64_t kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForMGT
SignalMonitorValue m_signalStrength
bool HasAnyFlag(uint64_t _flags) const
#define LOC
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39