15#define DBG_SM(FUNC, MSG) LOG(VB_CHANNEL, LOG_INFO, \
16 QString("DTVSigMon[%1]: %2 %3").arg(m_inputid).arg(FUNC, MSG))
18#define LOC QString("DTVSigMon[%1]: ").arg(m_inputid)
24 uint64_t key = (((uint64_t)psip.
TableID()) << 32) | psip.
CRC();
26 QList<uint64_t>::iterator it =
27 std::lower_bound(seen_crc.begin(), seen_crc.end(), key);
29 if ((it == seen_crc.end()) || (*it != key))
31 seen_crc.insert(it, key);
45 uint64_t wait_for_mask)
46 :
SignalMonitor(db_cardnum, _channel, _release_stream, wait_for_mask),
47 m_seenPAT(QObject::tr(
"Seen")+
" PAT",
"seen_pat", 1,
true, 0, 1, 0ms),
48 m_seenPMT(QObject::tr(
"Seen")+
" PMT",
"seen_pmt", 1,
true, 0, 1, 0ms),
49 m_seenMGT(QObject::tr(
"Seen")+
" MGT",
"seen_mgt", 1,
true, 0, 1, 0ms),
50 m_seenVCT(QObject::tr(
"Seen")+
" VCT",
"seen_vct", 1,
true, 0, 1, 0ms),
51 m_seenNIT(QObject::tr(
"Seen")+
" NIT",
"seen_nit", 1,
true, 0, 1, 0ms),
52 m_seenSDT(QObject::tr(
"Seen")+
" SDT",
"seen_sdt", 1,
true, 0, 1, 0ms),
53 m_seenCrypt(QObject::tr(
"Seen")+
" Crypt",
"seen_crypt", 1,
true, 0, 1, 0ms),
54 m_matchingPAT(QObject::tr(
"Matching")+
" PAT",
"matching_pat", 1,
true, 0, 1, 0ms),
55 m_matchingPMT(QObject::tr(
"Matching")+
" PMT",
"matching_pmt", 1,
true, 0, 1, 0ms),
56 m_matchingMGT(QObject::tr(
"Matching")+
" MGT",
"matching_mgt", 1,
true, 0, 1, 0ms),
57 m_matchingVCT(QObject::tr(
"Matching")+
" VCT",
"matching_vct", 1,
true, 0, 1, 0ms),
58 m_matchingNIT(QObject::tr(
"Matching")+
" NIT",
"matching_nit", 1,
true, 0, 1, 0ms),
59 m_matchingSDT(QObject::tr(
"Matching")+
" SDT",
"matching_sdt", 1,
true, 0, 1, 0ms),
60 m_matchingCrypt(QObject::tr(
"Matching")+
" Crypt",
"matching_crypt",
90 static int seenGood = -1;
91 static int matchingGood = -1;
99 DBG_SM(
"GetStatusList", QString(
"WaitForPMT seen(%1) matching(%2)")
174 std::vector<uint> add_eit;
175 std::vector<uint> del_eit;
180 for (
uint eit : del_eit)
182 uint_vec_t::iterator it;
189 for (
uint eit : add_eit)
199 DBG_SM(QString(
"SetChannel(%1, %2)").arg(major).arg(
minor),
"");
217 DBG_SM(QString(
"SetProgramNumber(%1)").arg(progNum),
"");
232 DBG_SM(QString(
"SetDVBService(transport_id: %1, network_id: %2, "
233 "service_id: %3)").arg(transport_id).arg(network_id).arg(service_id),
"");
314 LOG(VB_CHANNEL, LOG_DEBUG,
LOC + QString(
"HandlePAT() ") +
315 QString(
"Received PAT for tsid %1 waiting for tsid %2")
319 int spts_program = 0;
342 if (spts_program > 0)
344 LOG(VB_GENERAL, LOG_INFO,
LOC +
345 QString(
"Program %1 found in PAT of SPTS").arg(spts_program));
353 QString errStr = QString(
"Program #%1 not found in PAT!")
371 LOG(VB_CHANNEL, LOG_DEBUG,
LOC +
372 QString(
"Wrong PMT; pmt->ProgramNumber(%1) desired(%2)")
378 LOG(VB_CHANNEL, LOG_DEBUG,
LOC +
379 QString(
"Found PMT; pmt->ProgramNumber(%1)")
383 LOG(VB_GENERAL, LOG_NOTICE,
LOC +
400 if ((hasVideo >=
GetStreamData()->GetVideoStreamsRequired()) &&
411 LOG(VB_GENERAL, LOG_ERR,
LOC +
412 QString(
"We want %1 audio and %2 video streams")
415 QString(
"\n\t\t\tBut have %1 audio and %2 video streams")
416 .arg(hasAudio).arg(hasVideo));
422 LOG(VB_CHANNEL, LOG_DEBUG,
LOC + QString(
"Time Offset: %1")
458 LOG(VB_GENERAL, LOG_ERR,
LOC +
459 QString(
"Could not find channel %1_%2 in TVCT")
469 DBG_SM(
"HandleTVCT()", QString(
"tvct->ProgramNumber(idx %1): prog num %2")
485 LOG(VB_GENERAL, LOG_ERR,
LOC +
486 QString(
"Could not find channel %1_%2 in CVCT")
496 DBG_SM(
"HandleCVCT()", QString(
"cvct->ProgramNumber(idx %1): prog num %2")
505 LOG(VB_CHANNEL, LOG_DEBUG,
LOC + QString(
"Time Offset: %1")
542 DBG_SM(
"HandleSDT()", QString(
"tsid = %1 orig_net_id = %2")
Encapsulates data about ATSC stream and emits events for most tables.
void RemoveATSCMainListener(ATSCMainStreamListener *val)
void SetVersionTVCT(uint tsid, int version)
void SetVersionCVCT(uint tsid, int version)
void RemoveATSCAuxListener(ATSCAuxStreamListener *val)
void AddATSCAuxListener(ATSCAuxStreamListener *val)
void AddATSCMainListener(ATSCMainStreamListener *val)
void SetDesiredChannel(int major, int minor)
This table contains information about the cable channels transmitted on this multiplex.
Class providing a generic interface to digital tuning hardware.
bool IsAllGood(void) const override
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
SignalMonitorValue m_matchingVCT
void SetDVBService(uint network_id, uint transport_id, int service_id)
SignalMonitorValue m_matchingPAT
void HandlePAT(const ProgramAssociationTable *pat) override
SignalMonitorValue m_matchingCrypt
void UpdateListeningForEIT(void)
void AddFlags(uint64_t _flags) override
void HandleNIT(const NetworkInformationTable *nit) override
void HandleTDT(const TimeDateTable *tdt) override
std::vector< uint > m_eitPids
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
DTVChannel * GetDTVChannel(void)
SignalMonitorValue m_matchingPMT
SignalMonitorValue m_seenPMT
~DTVSignalMonitor() override
SignalMonitorValue m_matchingMGT
void HandleSTT(const SystemTimeTable *stt) override
void HandleMGT(const MasterGuideTable *mgt) override
SignalMonitorValue m_matchingSDT
SignalMonitorValue m_seenSDT
uint m_detectedTransportID
SignalMonitorValue m_seenVCT
void UpdateMonitorValues(void)
SignalMonitorValue m_seenPAT
ATSCStreamData * GetATSCStreamData()
Returns the ATSC stream data if it exists.
void SetChannel(int major, int minor)
void RemoveFlags(uint64_t _flags) override
SignalMonitorValue m_seenMGT
void HandleCVCT(uint pid, const CableVirtualChannelTable *cvct) override
void HandleSDT(uint tsid, const ServiceDescriptionTable *sdt) override
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
MPEGStreamData * m_streamData
SignalMonitorValue m_seenNIT
void SetProgramNumber(int progNum)
DTVSignalMonitor(int db_cardnum, DTVChannel *_channel, bool _release_stream, uint64_t wait_for_mask)
SignalMonitorValue m_seenCrypt
ScanStreamData * GetScanStreamData()
Returns the scan stream data if it exists.
DVBStreamData * GetDVBStreamData()
Returns the DVB stream data if it exists.
void HandleEncryptionStatus(uint pnum, bool enc_status) override
QList< uint64_t > m_seenTableCrc
SignalMonitorValue m_matchingNIT
void HandleTVCT(uint pid, const TerrestrialVirtualChannelTable *tvct) override
virtual void SetStreamData(MPEGStreamData *data)
Sets the MPEG stream data for DTVSignalMonitor to use, and connects the table signals to the monitor.
void RemoveDVBMainListener(DVBMainStreamListener *val)
void SetDesiredService(uint netid, uint tsid, int serviceid)
void AddDVBMainListener(DVBMainStreamListener *val)
void SetVersionSDT(uint tsid, int version, uint last_section)
Encapsulates data about MPEG stream and emits events for each table.
void AddMPEGListener(MPEGStreamListener *val)
void SetDesiredProgram(int p)
void TestDecryption(const ProgramMapTable *pmt)
void RemoveMPEGListener(MPEGStreamListener *val)
virtual void RemoveListeningPID(uint pid)
void SetVersionPAT(uint tsid, int version, uint last_section)
virtual void AddListeningPID(uint pid, PIDPriority priority=kPIDPriorityNormal)
This table tells the decoder on which PIDs to find other tables, and their sizes and each table's cur...
uint TablePID(uint i) const
int TableClass(uint i) const
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
The Program Association Table lists all the programs in a stream, and is always found on PID 0.
QString toString(void) const override
uint ProgramCount(void) const
uint TransportStreamID(void) const
uint FindPID(uint progNum) const
uint ProgramNumber(uint i) const
uint ProgramPID(uint i) const
A PMT table maps a program described in the ProgramAssociationTable to various PID's which describe t...
bool IsEncrypted(const QString &sistandard) const
Returns true iff PMT contains CA descriptor for a vid/aud stream.
uint StreamCount(void) const
uint ProgramNumber(void) const
bool IsAudio(uint i, const QString &sistandard) const
Returns true iff the stream at index i is an audio stream.
bool IsVideo(uint i, const QString &sistandard) const
Returns true iff the stream at index i is a video stream.
This table tells the decoder on which PIDs to find A/V data.
uint TSID() const
transport_stream_id 16 3.0 0x0000
uint OriginalNetworkID() const
original_network_id 16 8.0
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
QString GetName(void) const
Returns the long name of this value.
void SetValue(int _value)
QString GetStatus() const
Returns a signal monitor value as one long string.
Signal monitoring base class.
static const uint64_t kDTVSigMon_WaitForVCT
static const uint64_t kDTVSigMon_VCTMatch
We've seen a VCT matching our requirements.
QRecursiveMutex m_statusLock
virtual void RemoveFlags(uint64_t _flags)
static const uint64_t kDTVSigMon_CryptSeen
We've seen something indicating whether the data stream is encrypted.
static const uint64_t kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_PMTMatch
We've seen a PMT matching our requirements.
virtual QStringList GetStatusList(void) const
Returns QStringList containing all signals and their current values.
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
static const uint64_t kDTVSigMon_CVCTSeen
We've seen a CVCT, the cable version of the VCT.
static const uint64_t kDTVSigMon_WaitForSDT
static const uint64_t kDTVSigMon_NITSeen
We've seen a NIT, which tells us where to find SDT and other DVB tables.
virtual bool IsAllGood(void) const
static const uint64_t kDTVSigMon_MGTMatch
We've seen an MGT matching our requirements.
static const uint64_t kDTVSigMon_CryptMatch
We've seen unencrypted data in data stream.
static const uint64_t kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_SDTSeen
We've seen a SDT, which maps DVB Channels to MPEG program numbers, and provides additional data.
static const uint64_t kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForCrypt
static const uint64_t kDTVSigMon_PATMatch
We've seen a PAT matching our requirements.
static const uint64_t kDTVSigMon_CVCTMatch
We've seen a CVCT matching our requirements.
static const uint64_t kDTVSigMon_WaitForMGT
static const uint64_t kDTVSigMon_TVCTMatch
We've seen a TVCT matching our requirements.
virtual void AddFlags(uint64_t _flags)
static const uint64_t kDTVSigMon_TVCTSeen
We've seen a TVCT, the terrestrial version of the VCT.
static const uint64_t kDTVSigMon_VCTSeen
We've seen a VCT, which maps ATSC Channels to MPEG program numbers, and provides additional data.
static const uint64_t kDTVSigMon_MGTSeen
We've seen a MGT, which tells us on which PIDs to find VCT and other ATSC tables.
static const uint64_t kDTVSigMon_SDTMatch
We've seen an SDT matching our requirements.
static const uint64_t kDTVSigMon_PMTSeen
We've seen a PMT, which maps program to audio, video and other stream PIDs.
static const uint64_t kDTVSigMon_NITMatch
We've seen an NIT matching our requirements.
volatile uint64_t m_flags
static const uint64_t kDTVSigMon_PATSeen
We've seen a PAT, which maps MPEG program numbers to pids where we find PMTs.
This table contains information about the terrestrial channels transmitted on this multiplex.
This table gives the current DVB stream time.
uint TransportStreamID() const
QString toString(void) const override
int Find(int major, int minor) const
uint ProgramNumber(uint i) const
#define DBG_SM(FUNC, MSG)
static bool insert_crc(QList< uint64_t > &seen_crc, const PSIPTable &psip)
static pid_list_t::iterator find(const PIDInfoMap &map, pid_list_t &list, pid_list_t::iterator begin, pid_list_t::iterator end, bool find_open)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
VERBOSE_PREAMBLE Most true