Go to the documentation of this file.
8 static const std::array<const QString,11> kTts {
10 QString(
"Terrestrial VCT with current()"),
11 QString(
"Terrestrial VCT with !current()"),
12 QString(
"Cable VCT with current()"),
13 QString(
"Cable VCT with !current()"),
14 QString(
"Channel ETT"),
16 QString(
"EIT + 0x100"),
17 QString(
"Event ETT + 0x200"),
18 QString(
"DCCT + 0x1400"),
19 QString(
"RTT + 0x300")
37 if (tt >= 0x1400 && tt < 0x1500)
72 str.append(QString(
"Master Guide Section\n%1"
78 LOG(VB_GENERAL, LOG_ERR,
"MasterGuideTable::toString(): Table count mismatch");
82 str.append(QString(
" Table #%1 ").arg(i, 2, 10));
83 str.append(QString(
"pid(0x%1) ver(%2) ")
85 str.append(QString(
"size(%1) desc_len(%2) type: %4 %3 \n")
91 std::vector<const unsigned char*> desc =
95 str.append(QString(
" %1\n")
101 str.append(QString(
" global descriptors length(%1) ")
103 std::vector<const unsigned char*> desc =
106 str.append(QString(
"count: %1\n").arg(desc.size()));
107 for (
auto & i : desc)
109 str.append(QString(
" %1\n")
123 QString(
"%1<MasterGuideSection table_count=\"%2\" "
124 "global_descriptors_length=\"%3\"\n%4%5>\n")
131 std::vector<const unsigned char*> gdesc =
133 for (
auto & i : gdesc)
140 LOG(VB_GENERAL, LOG_ERR,
"MasterGuideTable::toStringXML(): Table count mismatch");
145 "%1<Table pid=\"0x%2\" version=\"%3\""
146 "\n%4type=\"0x%5\" type_desc=\"%6\""
147 "\n%7number_bytes=\"%8\" table_descriptors_length=\"%9\"")
158 std::vector<const unsigned char*> desc =
161 str += (desc.empty()) ?
" />\n" :
">\n";
162 for (
auto & j : desc)
169 str += indent_1 +
"</Table>\n";
172 return str +
"</MasterGuideSection>";
177 static const std::array<const std::string,6>s_modnames
179 "[Reserved]",
"Analog",
"SCTE mode 1",
180 "SCTE mode 2",
"ATSC 8-VSB",
"ATSC 16-VSB",
183 if (mode >= (
sizeof(s_modnames) /
sizeof(
char*)))
184 return QString(
"Unknown 0x%1").arg(mode,2,16,QChar(
'0'));
185 return QString::fromStdString(s_modnames[mode]);
190 static const std::array<const std::string,5> s_servicenames
192 "[Reserved]",
"Analog",
"ATSC TV",
"ATSC Audio",
"ATSC Data",
195 if (
type >= s_servicenames.size())
196 return QString(
"Unknown 0x%1").arg(
type,2,16,QChar(
'0'));
197 return QString::fromStdString(s_servicenames[
type]);
203 str.append(QString(
"%1 Virtual Channel Section\n%2"
204 " channel_count(%3) tsid(0x%4)")
213 str.append(QString(
" mapid(0x%1)").arg(sctemapid,0,16));
223 str.append(QString(
"global descriptors length(%1) ")
225 std::vector<const unsigned char*> desc =
228 str.append(QString(
"count: %1\n").arg(desc.size()));
229 for (
auto & i : desc)
231 str.append(QString(
" %1\n")
244 QString section_name = QString(
"%1VirtualChannelSection")
251 mapid = QString(
" mapid=\"0x%1\"").arg(sctemapid,4,16,QChar(
'0'));
255 QString(
"%1<%2 tsid=\"0x%3\" channel_count=\"%4\""
256 "\n%5global_descriptors_length=\"%6\"%7"
268 std::vector<const unsigned char*> gdesc =
270 for (
auto & i : gdesc)
279 return str + indent_0 + QString(
"</%1>").arg(section_name);
287 QString str = QString(
"%1<Channel %2\n%3descriptors_length=\"%4\">\n")
293 std::vector<const unsigned char*> desc =
295 for (
auto & i : desc)
301 return str + indent_0 +
"</Channel>";
311 str +=
"\n" + indent_0;
313 str += QString(R
"(modulation="0x%1" modulation_desc="%2" )")
316 str += QString(
"channel_tsid=\"0x%1\"")
318 str +=
"\n" + indent_0;
320 str += QString(
"program_number=\"%1\" ").arg(
ProgramNumber(chan));
321 str += QString(
"etm_location=\"%1\" ").arg(
ETMlocation(chan));
322 str += QString(
"access_controlled=\"%1\"")
324 str +=
"\n" + indent_0;
326 str += QString(
"hidden=\"%1\" ")
328 str += QString(
"hide_guide=\"%1\"")
330 str +=
"\n" + indent_0;
332 str += QString(R
"(service_type="0x%1" service_type_desc="%2")")
335 str +=
"\n" + indent_0;
337 str += QString(
"source_id=\"0x%1\"")
338 .arg(
SourceID(chan),4,16,QChar(
'0'));
346 return QString(R
"(major_channel="%1" minor_channel="%2" )")
354 str.append(QString(
" Channel #%1 ").arg(chan));
358 str.append(QString(
"cTSID(0x%1)\n")
362 str.append(QString(
"ETM_loc(%1) ").arg(
ETMlocation(chan)));
363 str.append(QString(
"access_ctrl(%1) ").arg(
static_cast<int>(
IsAccessControlled(chan))));
364 str.append(QString(
"hidden(%1) ").arg(
static_cast<int>(
IsHidden(chan))));
365 str.append(QString(
"hide_guide(%1) ").arg(
static_cast<int>(
IsHiddenInGuide(chan))));
368 str.append(QString(
" source_id(%1)\n").arg(
SourceID(chan)));
371 str.append(QString(
" descriptors length(%1) ")
373 std::vector<const unsigned char*> desc =
375 str.append(QString(
"count:%1\n").arg(desc.size()));
376 for (
auto & i : desc)
378 str.append(QString(
" %1\n")
389 QString(R
"(major_channel="%1" minor_channel="%2" )")
391 QString("channel_number=\"%1\" ")
394 return channel_info +
396 QString(R
"( path_select="%1" out_of_band="%2")")
404 str.append(QString(
" Channel #%1 ").arg(chan));
409 str.append(QString(
" %1-%2 ")
418 str.append(QString(
"cTSID(0x%1)\n")
422 str.append(QString(
"ETM_loc(%1) ").arg(
ETMlocation(chan)));
423 str.append(QString(
"access_ctrl(%1) ").arg(
static_cast<int>(
IsAccessControlled(chan))));
424 str.append(QString(
"hidden(%1) ").arg(
static_cast<int>(
IsHidden(chan))));
425 str.append(QString(
"hide_guide(%1) ").arg(
static_cast<int>(
IsHiddenInGuide(chan))));
428 str.append(QString(
" source_id(%1) ").arg(
SourceID(chan)));
429 str.append(QString(
"path_select(%1) ").arg(
static_cast<int>(
IsPathSelect(chan))));
430 str.append(QString(
"out_of_band(%1)\n").arg(
static_cast<int>(
IsOutOfBand(chan))));
434 str.append(QString(
" descriptors length(%1) ")
436 std::vector<const unsigned char*> desc =
438 str.append(QString(
"count:%1\n").arg(desc.size()));
439 for (
auto & i : desc)
440 str.append(QString(
" %1\n")
449 str.append(QString(
"Event Information Table\n"));
451 str.append(QString(
" pid(0x%1) sourceID(%2) eventCount(%3)\n")
455 str.append(QString(
" Event #%1 ID(%2) start_time(%3) length(%4 sec)\n")
459 str.append(QString(
" ETM_loc(%1) Title(%2)\n").
463 std::vector<const unsigned char*> desc =
465 for (
auto & j : desc)
466 str.append(QString(
"%1\n")
476 QString(
"Extended Text Table -- sourceID(%1) eventID(%2) "
477 "ettID(%3) isChannelETM(%4) isEventETM(%5)\n%6")
511 std::vector<const unsigned char*> parsed =
514 const unsigned char* desc =
526 QString(
"System Time Section GPSTime(%1) GPS2UTC_Offset(%2) ")
528 str.append(QString(
"DS(%3) Day(%4) Hour(%5)\n")
541 "%1<SystemTimeSection system_time=\"%2\" system_time_iso=\"%3\""
542 "\n%4in_dst=\"%5\" dst_start_day=\"%6\" dst_start_hour=\"%7\""
545 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