MythTV  master
scanstreamdata.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 // Copyright (c) 2003-2004, Daniel Thor Kristjansson
3 #include "scanstreamdata.h"
4 #include "atsctables.h"
5 #include "dvbtables.h"
6 
7 ScanStreamData::ScanStreamData(bool no_default_pid) :
8  MPEGStreamData(-1, -1, true),
9  ATSCStreamData(-1, -1, -1, true),
10  DVBStreamData(0, 0, -1, -1, true),
11  m_noDefaultPid(no_default_pid)
12 {
13  if (m_noDefaultPid)
14  m_pidsListening.clear();
15 }
16 
18 
22 bool ScanStreamData::IsRedundant(uint pid, const PSIPTable &psip) const
23 {
24  return (ATSCStreamData::IsRedundant(pid,psip) ||
25  DVBStreamData::IsRedundant(pid,psip));
26 }
27 
32 {
33  bool h0 = ATSCStreamData::HandleTables(pid, psip);
34  bool h1 = DVBStreamData::HandleTables(pid, psip);
35  return h0 || h1;
36 }
37 
39 {
40  // MPEG
43 
44  // ATSC
47 
48  // DVB
52 
53  // Extra
54  if (m_dvbUkFreesatSi)
56 }
57 
59 {
61  ATSCStreamData::Reset(-1,-1);
62  DVBStreamData::Reset(0,0,-1);
63 
64  if (m_noDefaultPid)
65  {
66  m_pidsListening.clear();
67  return;
68  }
69 
71 }
72 
73 void ScanStreamData::Reset(uint desired_netid, uint desired_tsid, int desired_serviceid)
74 {
75  DVBStreamData::Reset(desired_netid, desired_tsid, desired_serviceid);
76 
77  if (m_noDefaultPid)
78  {
79  m_pidsListening.clear();
80  return;
81  }
82 
84 }
85 
86 QString ScanStreamData::GetSIStandard(const QString& guess) const
87 {
88  if (HasCachedMGT())
89  return "atsc";
90 
91  if (HasCachedAnyNIT())
92  return "dvb";
93 
94  QMutexLocker locker(&m_cacheLock);
95 
96  for (const auto *pmt : std::as_const(m_cachedPmts))
97  {
98  for (uint i = 0; (guess != "dvb") && (i < pmt->StreamCount()); i++)
99  {
100  if (StreamID::OpenCableVideo == pmt->StreamType(i))
101  return "opencable";
102  }
103 
105  pmt->ProgramInfo(), pmt->ProgramInfoLength(),
107 
108  for (auto & desc : descs)
109  {
110  RegistrationDescriptor reg(desc);
111  if (!reg.IsValid())
112  continue;
113  if (reg.FormatIdentifierString() == "SCTE")
114  return "opencable";
115  }
116  }
117 
118  return "mpeg";
119 }
120 
121 
123 {
124  if (!psip)
125  return false;
126 
128  return true;
130 }
ScanStreamData::HandleTables
bool HandleTables(uint pid, const PSIPTable &psip) override
Processes PSIP tables.
Definition: scanstreamdata.cpp:31
MPEGStreamData::m_pidsListening
pid_map_t m_pidsListening
Definition: mpegstreamdata.h:323
MPEGStreamData::m_cacheLock
QRecursiveMutex m_cacheLock
Definition: mpegstreamdata.h:355
DVBStreamData::IsRedundant
bool IsRedundant(uint pid, const PSIPTable &psip) const override
Returns true if table already seen.
Definition: dvbstreamdata.cpp:76
PID::SCTE_PSIP_PID
@ SCTE_PSIP_PID
Definition: mpegtables.h:237
ScanStreamData::DeleteCachedTable
bool DeleteCachedTable(const PSIPTable *psip) const override
Definition: scanstreamdata.cpp:122
ATSCStreamData::DeleteCachedTable
bool DeleteCachedTable(const PSIPTable *psip) const override
Definition: atscstreamdata.cpp:883
ScanStreamData::Reset
void Reset(void) override
Definition: scanstreamdata.cpp:58
PID::DVB_SDT_PID
@ DVB_SDT_PID
Definition: mpegtables.h:216
ATSCStreamData::HasCachedMGT
bool HasCachedMGT(bool current=true) const
Definition: atscstreamdata.cpp:626
DVBStreamData::Reset
void Reset(void) override
Definition: dvbstreamdata.h:41
RegistrationDescriptor
Definition: mpegdescriptors.h:429
DVBStreamData::HandleTables
bool HandleTables(uint pid, const PSIPTable &psip) override
Process PSIP packets.
Definition: dvbstreamdata.cpp:205
ATSCStreamData::HandleTables
bool HandleTables(uint pid, const PSIPTable &psip) override
Process PSIP packets.
Definition: atscstreamdata.cpp:206
DVBStreamData::DeleteCachedTable
bool DeleteCachedTable(const PSIPTable *psip) const override
Definition: dvbstreamdata.cpp:938
RegistrationDescriptor::FormatIdentifierString
QString FormatIdentifierString(void) const
Definition: mpegdescriptors.h:443
true
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:95
ATSCStreamData::Reset
void Reset(void) override
Definition: atscstreamdata.h:37
PID::MPEG_CAT_PID
@ MPEG_CAT_PID
Definition: mpegtables.h:212
ScanStreamData::m_noDefaultPid
bool m_noDefaultPid
Definition: scanstreamdata.h:43
PSIPTable
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
Definition: mpegtables.h:409
MPEGDescriptor::IsValid
bool IsValid(void) const
Definition: mpegdescriptors.h:342
PID::DVB_TDT_PID
@ DVB_TDT_PID
Definition: mpegtables.h:219
ScanStreamData::ScanStreamData
ScanStreamData(bool no_default_pid=false)
Definition: scanstreamdata.cpp:7
scanstreamdata.h
ATSCStreamData
Encapsulates data about ATSC stream and emits events for most tables.
Definition: atscstreamdata.h:29
desc_list_t
std::vector< const unsigned char * > desc_list_t
Definition: mpegdescriptors.h:18
MPEGStreamData
Encapsulates data about MPEG stream and emits events for each table.
Definition: mpegstreamdata.h:85
MPEGDescriptor::ParseOnlyInclude
static desc_list_t ParseOnlyInclude(const unsigned char *data, uint len, int excluded_descid)
Definition: mpegdescriptors.cpp:57
DVBStreamData
Definition: dvbstreamdata.h:33
PID::DVB_NIT_PID
@ DVB_NIT_PID
Definition: mpegtables.h:215
dvbtables.h
StreamID::OpenCableVideo
@ OpenCableVideo
Always MPEG-2??
Definition: mpegtables.h:120
uint
unsigned int uint
Definition: compat.h:81
DescriptorID::registration
@ registration
Definition: mpegdescriptors.h:29
PID::ATSC_PSIP_PID
@ ATSC_PSIP_PID
Definition: mpegtables.h:235
ScanStreamData::AddAllListeningPIDs
void AddAllListeningPIDs(void)
Definition: scanstreamdata.cpp:38
ATSCStreamData::IsRedundant
bool IsRedundant(uint pid, const PSIPTable &psip) const override
Returns true if table already seen.
Definition: atscstreamdata.cpp:158
MPEGStreamData::Reset
virtual void Reset(void)
Definition: mpegstreamdata.h:94
atsctables.h
ScanStreamData::m_dvbUkFreesatSi
bool m_dvbUkFreesatSi
listen for additional Freesat service information
Definition: scanstreamdata.h:42
MPEGStreamData::AddListeningPID
virtual void AddListeningPID(uint pid, PIDPriority priority=kPIDPriorityNormal)
Definition: mpegstreamdata.h:120
ScanStreamData::GetSIStandard
QString GetSIStandard(const QString &guess="mpeg") const
Definition: scanstreamdata.cpp:86
DVBStreamData::HasCachedAnyNIT
bool HasCachedAnyNIT(bool current=true) const
Definition: dvbstreamdata.cpp:616
PID::FREESAT_SI_PID
@ FREESAT_SI_PID
Definition: mpegtables.h:240
PID::MPEG_PAT_PID
@ MPEG_PAT_PID
Definition: mpegtables.h:211
ScanStreamData::IsRedundant
bool IsRedundant(uint pid, const PSIPTable &psip) const override
Returns true if table already seen.
Definition: scanstreamdata.cpp:22
ScanStreamData::~ScanStreamData
~ScanStreamData() override
Definition: scanstreamdata.cpp:17
MPEGStreamData::m_cachedPmts
pmt_cache_t m_cachedPmts
Definition: mpegstreamdata.h:358