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()),
QString ChannelString(uint channel) const override
bool IsPathSelect(uint i) const
QString XMLChannelValues(uint indent_level, uint channel) const override
bool SCTEIsChannelNumberTwoPart(uint i) const
bool IsOutOfBand(uint i) const
uint SCTEOnePartChannel(uint i) const
Provides the long channel name for the virtual channel containing this descriptor.
QString LongChannelNameString(void) const
Convenience function that returns a QString comprising a concatenation of all the segments in the Lon...
uint SourceID(void) const
bool IsEventETM(void) const
QString toString() const override
MultipleStringStructure ExtendedTextMessage() const
uint ExtendedTextTableID() const
bool IsChannelETM(void) const
static desc_list_t Parse(const unsigned char *data, uint len)
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
std::vector< unsigned char * > m_ptrs
const unsigned char * TableDescriptors(uint i) const
uint TableType(uint i) const
uint TableDescriptorsLength(uint i) const
uint GlobalDescriptorsLength() const
const unsigned char * GlobalDescriptors() const
uint TableDescriptorsBytes(uint i) const
QString toString(void) const override
QString TableClassString(uint i) const
uint TablePID(uint i) const
uint TableVersion(uint i) const
QString toStringXML(uint indent_level) const override
int TableClass(uint i) const
const TSHeader * tsheader() const
const unsigned char * pesdata() const
Contains Packet Identifier numeric values.
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
const unsigned char * psipdata(void) const
QString XMLValues(uint indent_level) const
virtual QString toString(void) const
QString XMLChannelValues(uint indent_level, uint channel) const override
QString ChannelString(uint channel) const override
QString ShortChannelName(uint i) const
QString ModulationModeString(uint i) const
bool IsHiddenInGuide(uint i) const
bool IsHidden(uint i) const
virtual QString XMLChannelValues(uint indent_level, uint channel) const
uint MajorChannel(uint i) const
const unsigned char * Descriptors(uint i) const
uint ChannelTransportStreamID(uint i) const
uint TransportStreamID() const
QString toString(void) const override
uint MinorChannel(uint i) const
virtual QString ChannelString(uint channel) const =0
uint GlobalDescriptorsLength() const
int Find(int major, int minor) const
bool IsAccessControlled(uint i) const
QString ServiceTypeString(uint i) const
uint ETMlocation(uint i) const
uint ProgramNumber(uint i) const
uint SourceID(uint i) const
virtual QString ChannelStringXML(uint indent_level, uint channel) const
uint DescriptorsLength(uint i) const
QString GetExtendedChannelName(uint idx) const
uint ServiceType(uint i) const
uint ModulationMode(uint i) const
std::vector< unsigned char * > m_ptrs
QString toStringXML(uint indent_level) const override
uint ChannelCount() const
const unsigned char * GlobalDescriptors() const
static const iso6937table * d
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
QString bool_to_string(bool val)
This is equivalent to QVariant(bool).toString()
QString indentSpaces(unsigned int level, unsigned int size=4)