Go to the documentation of this file.
11 static const std::array<const QString,11> kTts {
13 QString(
"Terrestrial VCT with current()"),
14 QString(
"Terrestrial VCT with !current()"),
15 QString(
"Cable VCT with current()"),
16 QString(
"Cable VCT with !current()"),
17 QString(
"Channel ETT"),
19 QString(
"EIT + 0x100"),
20 QString(
"Event ETT + 0x200"),
21 QString(
"DCCT + 0x1400"),
22 QString(
"RTT + 0x300")
40 if (tt >= 0x1400 && tt < 0x1500)
75 str.append(QString(
"Master Guide Section\n%1"
81 LOG(VB_GENERAL, LOG_ERR,
"MasterGuideTable::toString(): Table count mismatch");
85 str.append(QString(
" Table #%1 ").arg(i, 2, 10));
86 str.append(QString(
"pid(0x%1) ver(%2) ")
88 str.append(QString(
"size(%1) desc_len(%2) type: %4 %3 \n")
94 std::vector<const unsigned char*> desc =
98 str.append(QString(
" %1\n")
104 str.append(QString(
" global descriptors length(%1) ")
106 std::vector<const unsigned char*> desc =
109 str.append(QString(
"count: %1\n").arg(desc.size()));
110 for (
auto & i : desc)
112 str.append(QString(
" %1\n")
126 QString(
"%1<MasterGuideSection table_count=\"%2\" "
127 "global_descriptors_length=\"%3\"\n%4%5>\n")
134 std::vector<const unsigned char*> gdesc =
136 for (
auto & i : gdesc)
143 LOG(VB_GENERAL, LOG_ERR,
"MasterGuideTable::toStringXML(): Table count mismatch");
148 "%1<Table pid=\"0x%2\" version=\"%3\""
149 "\n%4type=\"0x%5\" type_desc=\"%6\""
150 "\n%7number_bytes=\"%8\" table_descriptors_length=\"%9\"")
161 std::vector<const unsigned char*> desc =
164 str += (desc.empty()) ?
" />\n" :
">\n";
165 for (
auto & j : desc)
172 str += indent_1 +
"</Table>\n";
175 return str +
"</MasterGuideSection>";
180 static const std::array<const std::string,6>s_modnames
182 "[Reserved]",
"Analog",
"SCTE mode 1",
183 "SCTE mode 2",
"ATSC 8-VSB",
"ATSC 16-VSB",
186 if (mode >= (
sizeof(s_modnames) /
sizeof(
char*)))
187 return QString(
"Unknown 0x%1").arg(mode,2,16,QChar(
'0'));
188 return QString::fromStdString(s_modnames[mode]);
193 static const std::array<const std::string,5> s_servicenames
195 "[Reserved]",
"Analog",
"ATSC TV",
"ATSC Audio",
"ATSC Data",
198 if (
type >= s_servicenames.size())
199 return QString(
"Unknown 0x%1").arg(
type,2,16,QChar(
'0'));
200 return QString::fromStdString(s_servicenames[
type]);
206 str.append(QString(
"%1 Virtual Channel Section\n%2"
207 " channel_count(%3) tsid(0x%4)")
216 str.append(QString(
" mapid(0x%1)").arg(sctemapid,0,16));
226 str.append(QString(
"global descriptors length(%1) ")
228 std::vector<const unsigned char*> desc =
231 str.append(QString(
"count: %1\n").arg(desc.size()));
232 for (
auto & i : desc)
234 str.append(QString(
" %1\n")
247 QString section_name = QString(
"%1VirtualChannelSection")
254 mapid = QString(
" mapid=\"0x%1\"").arg(sctemapid,4,16,QChar(
'0'));
258 QString(
"%1<%2 tsid=\"0x%3\" channel_count=\"%4\""
259 "\n%5global_descriptors_length=\"%6\"%7"
271 std::vector<const unsigned char*> gdesc =
273 for (
auto & i : gdesc)
282 return str + indent_0 + QString(
"</%1>").arg(section_name);
290 QString str = QString(
"%1<Channel %2\n%3descriptors_length=\"%4\">\n")
296 std::vector<const unsigned char*> desc =
298 for (
auto & i : desc)
304 return str + indent_0 +
"</Channel>";
314 str +=
"\n" + indent_0;
316 str += QString(R
"(modulation="0x%1" modulation_desc="%2" )")
319 str += QString(
"channel_tsid=\"0x%1\"")
321 str +=
"\n" + indent_0;
323 str += QString(
"program_number=\"%1\" ").arg(
ProgramNumber(chan));
324 str += QString(
"etm_location=\"%1\" ").arg(
ETMlocation(chan));
325 str += QString(
"access_controlled=\"%1\"")
327 str +=
"\n" + indent_0;
329 str += QString(
"hidden=\"%1\" ")
331 str += QString(
"hide_guide=\"%1\"")
333 str +=
"\n" + indent_0;
335 str += QString(R
"(service_type="0x%1" service_type_desc="%2")")
338 str +=
"\n" + indent_0;
340 str += QString(
"source_id=\"0x%1\"")
341 .arg(
SourceID(chan),4,16,QChar(
'0'));
349 return QString(R
"(major_channel="%1" minor_channel="%2" )")
357 str.append(QString(
" Channel #%1 ").arg(chan));
361 str.append(QString(
"cTSID(0x%1)\n")
365 str.append(QString(
"ETM_loc(%1) ").arg(
ETMlocation(chan)));
366 str.append(QString(
"access_ctrl(%1) ").arg(
static_cast<int>(
IsAccessControlled(chan))));
367 str.append(QString(
"hidden(%1) ").arg(
static_cast<int>(
IsHidden(chan))));
368 str.append(QString(
"hide_guide(%1) ").arg(
static_cast<int>(
IsHiddenInGuide(chan))));
371 str.append(QString(
" source_id(%1)\n").arg(
SourceID(chan)));
374 str.append(QString(
" descriptors length(%1) ")
376 std::vector<const unsigned char*> desc =
378 str.append(QString(
"count:%1\n").arg(desc.size()));
379 for (
auto & i : desc)
381 str.append(QString(
" %1\n")
392 QString(R
"(major_channel="%1" minor_channel="%2" )")
394 QString("channel_number=\"%1\" ")
397 return channel_info +
399 QString(R
"( path_select="%1" out_of_band="%2")")
407 str.append(QString(
" Channel #%1 ").arg(chan));
412 str.append(QString(
" %1-%2 ")
421 str.append(QString(
"cTSID(0x%1)\n")
425 str.append(QString(
"ETM_loc(%1) ").arg(
ETMlocation(chan)));
426 str.append(QString(
"access_ctrl(%1) ").arg(
static_cast<int>(
IsAccessControlled(chan))));
427 str.append(QString(
"hidden(%1) ").arg(
static_cast<int>(
IsHidden(chan))));
428 str.append(QString(
"hide_guide(%1) ").arg(
static_cast<int>(
IsHiddenInGuide(chan))));
431 str.append(QString(
" source_id(%1) ").arg(
SourceID(chan)));
432 str.append(QString(
"path_select(%1) ").arg(
static_cast<int>(
IsPathSelect(chan))));
433 str.append(QString(
"out_of_band(%1)\n").arg(
static_cast<int>(
IsOutOfBand(chan))));
437 str.append(QString(
" descriptors length(%1) ")
439 std::vector<const unsigned char*> desc =
441 str.append(QString(
"count:%1\n").arg(desc.size()));
442 for (
auto & i : desc)
443 str.append(QString(
" %1\n")
452 str.append(QString(
"Event Information Table\n"));
454 str.append(QString(
" pid(0x%1) sourceID(%2) eventCount(%3)\n")
458 str.append(QString(
" Event #%1 ID(%2) start_time(%3) length(%4 sec)\n")
462 str.append(QString(
" ETM_loc(%1) Title(%2)\n").
466 std::vector<const unsigned char*> desc =
468 for (
auto & j : desc)
469 str.append(QString(
"%1\n")
479 QString(
"Extended Text Table -- sourceID(%1) eventID(%2) "
480 "ettID(%3) isChannelETM(%4) isEventETM(%5)\n%6")
514 std::vector<const unsigned char*> parsed =
517 const unsigned char* desc =
529 QString(
"System Time Section GPSTime(%1) GPS2UTC_Offset(%2) ")
531 str.append(QString(
"DS(%3) Day(%4) Hour(%5)\n")
544 "%1<SystemTimeSection system_time=\"%2\" system_time_iso=\"%3\""
545 "\n%4in_dst=\"%5\" dst_start_day=\"%6\" dst_start_hour=\"%7\""
548 QString::number(
GPSRaw()),
uint ETMlocation(uint i) const
int TableClass(uint i) const
uint SourceID(void) const
QString TableClassString(uint i) const
bool IsAccessControlled(uint i) const
QString toStringXML(uint indent_level) const override
QString XMLChannelValues(uint indent_level, uint channel) const override
Provides the long channel name for the virtual channel containing this descriptor.
QString toStringXML(uint indent_level) const override
uint ExtendedTextTableID() const
uint GlobalDescriptorsLength() const
const unsigned char * pesdata() const
const TSHeader * tsheader() const
QString ShortChannelName(uint i) const
QString ChannelString(uint channel) const override
uint SourceID(uint i) const
QString XMLChannelValues(uint indent_level, uint channel) const override
QString indentSpaces(unsigned int level, unsigned int size=4)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
QString ChannelString(uint channel) const override
uint ProgramNumber(uint i) const
std::vector< unsigned char * > m_ptrs
bool IsHiddenInGuide(uint i) const
QString toString(void) const override
const unsigned char * Descriptors(uint i) const
bool IsHidden(uint i) const
std::vector< unsigned char * > m_ptrs
uint ChannelTransportStreamID(uint i) const
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
virtual QString XMLChannelValues(uint indent_level, uint channel) const
virtual QString toString(void) const
uint MajorChannel(uint i) const
QString ServiceTypeString(uint i) const
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
int Find(int major, int minor) const
uint TablePID(uint i) const
static desc_list_t Parse(const unsigned char *data, uint len)
uint TableVersion(uint i) const
uint TableDescriptorsBytes(uint i) const
QString toString() const override
virtual QString ChannelString(uint channel) const =0
uint TableDescriptorsLength(uint i) const
Contains Packet Identifier numeric values.
const unsigned char * GlobalDescriptors() const
uint DescriptorsLength(uint i) const
bool IsPathSelect(uint i) const
virtual QString ChannelStringXML(uint indent_level, uint channel) const
uint GlobalDescriptorsLength() const
const unsigned char * TableDescriptors(uint i) const
QString toString(void) const override
uint ServiceType(uint i) const
bool IsEventETM(void) const
bool SCTEIsChannelNumberTwoPart(uint i) const
MultipleStringStructure ExtendedTextMessage() const
const unsigned char * GlobalDescriptors() const
uint SCTEOnePartChannel(uint i) const
QString XMLValues(uint indent_level) const
static const iso6937table * d
bool IsChannelETM(void) const
QString ModulationModeString(uint i) const
uint ModulationMode(uint i) const
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
uint TableType(uint i) const
QString bool_to_string(bool val)
This is equivalent to QVariant(bool).toString()
uint ChannelCount() const
uint TransportStreamID() const
QString LongChannelNameString(void) const
Convenience function that returns a QString comprising a concatenation of all the segments in the Lon...
bool IsOutOfBand(uint i) const
uint MinorChannel(uint i) const
const unsigned char * psipdata(void) const
QString GetExtendedChannelName(uint idx) const