MythTV master
atsctables.cpp
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2// Copyright (c) 2003-2004, Daniel Thor Kristjansson
3#include "atsctables.h"
4
6
7#include "atscdescriptors.h"
8
10{
11 static const std::array<const QString,11> kTts {
12 QString("UNKNOWN"),
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"),
18 QString("DCCSCT"),
19 QString("EIT + 0x100"),
20 QString("Event ETT + 0x200"),
21 QString("DCCT + 0x1400"),
22 QString("RTT + 0x300")
23 };
24 int tt = TableClass(i) + 1;
25 return kTts[tt];
26}
27
29{
30 const int tt = TableType(i);
31 if (tt < 6)
32 {
33 return tt;
34 }
35 if (tt < 0x300)
36 {
37 if (tt < 0x200) return TableClass::EIT;
38 return TableClass::ETTe;
39 }
40 if (tt >= 0x1400 && tt < 0x1500)
41 return TableClass::DCCT;
42 if (tt < 0x400)
43 return TableClass::RRT;
45}
46
48{
49 m_ptrs.clear();
50 m_ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 3);
51 for (uint i = 0; i < TableCount(); i++)
52 m_ptrs.push_back(m_ptrs[i] + 11 + TableDescriptorsLength(i));
53}
54
55
57{
58 m_ptrs.clear();
59 m_ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 2);
60 for (uint i = 0; i < ChannelCount(); i++)
61 m_ptrs.push_back(m_ptrs[i] + 32 + DescriptorsLength(i));
62}
63
65{
66 m_ptrs.clear();
67 m_ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 2);
68 for (uint i = 0; i < EventCount(); i++)
69 m_ptrs.push_back(m_ptrs[i] + 12 + TitleLength(i) + DescriptorsLength(i));
70}
71
72QString MasterGuideTable::toString(void) const
73{
74 QString str;
75 str.append(QString("Master Guide Section\n%1"
76 " table_count(%2)\n")
78 .arg(TableCount()));
79
80 if (m_ptrs.size() < TableCount())
81 LOG(VB_GENERAL, LOG_ERR, "MasterGuideTable::toString(): Table count mismatch");
82
83 for (uint i = 0; i < TableCount() && i < m_ptrs.size(); i++)
84 {
85 str.append(QString(" Table #%1 ").arg(i, 2, 10));
86 str.append(QString("pid(0x%1) ver(%2) ")
87 .arg(TablePID(i), 0, 16).arg(TableVersion(i), 2, 10));
88 str.append(QString("size(%1) desc_len(%2) type: %4 %3 \n")
89 .arg(TableDescriptorsBytes(i), 4, 10)
91 .arg(TableClassString(i)).arg(TableType(i)));
92 if (0 != TableDescriptorsLength(i))
93 {
94 std::vector<const unsigned char*> desc =
97 for (auto & d : desc)
98 str.append(QString(" %1\n")
99 .arg(MPEGDescriptor(d).toString()));
100 }
101 }
102 if (0 != GlobalDescriptorsLength())
103 {
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)
111 {
112 str.append(QString(" %1\n")
113 .arg(MPEGDescriptor(i).toString()));
114 }
115 }
116 return str;
117}
118
119QString MasterGuideTable::toStringXML(uint indent_level) const
120{
121 QString indent_0 = StringUtil::indentSpaces(indent_level);
122 QString indent_1 = StringUtil::indentSpaces(indent_level + 1);
123 QString indent_2 = StringUtil::indentSpaces(indent_level + 2);
124
125 QString str =
126 QString("%1<MasterGuideSection table_count=\"%2\" "
127 "global_descriptors_length=\"%3\"\n%4%5>\n")
128 .arg(indent_0)
129 .arg(TableCount())
131 .arg(indent_1,
132 PSIPTable::XMLValues(indent_level + 1));
133
134 std::vector<const unsigned char*> gdesc =
136 for (auto & i : gdesc)
137 {
138 str += MPEGDescriptor(i, 300)
139 .toStringXML(indent_level + 1) + "\n";
140 }
141
142 if (m_ptrs.size() < TableCount())
143 LOG(VB_GENERAL, LOG_ERR, "MasterGuideTable::toStringXML(): Table count mismatch");
144
145 for (uint i = 0; i < TableCount() && i < m_ptrs.size(); i++)
146 {
147 str += QString(
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\"")
151 .arg(indent_1)
152 .arg(TablePID(i),4,16,QChar('0'))
153 .arg(TableVersion(i))
154 .arg(indent_1)
155 .arg(TableType(i),4,16,QChar('0'))
156 .arg(TableClassString(i),
157 indent_2)
158 .arg(TableDescriptorsBytes(i))
159 .arg(TableDescriptorsLength(i));
160
161 std::vector<const unsigned char*> desc =
164 str += (desc.empty()) ? " />\n" : ">\n";
165 for (auto & j : desc)
166 {
167 str += MPEGDescriptor(j, 300)
168 .toStringXML(indent_level + 2) + "\n";
169 }
170
171 if (!desc.empty())
172 str += indent_1 + "</Table>\n";
173 }
174
175 return str + "</MasterGuideSection>";
176}
177
179{
180 static const std::array<const std::string,6>s_modnames
181 {
182 "[Reserved]", "Analog", "SCTE mode 1",
183 "SCTE mode 2", "ATSC 8-VSB", "ATSC 16-VSB",
184 };
185 uint mode = ModulationMode(i);
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]);
189}
190
192{
193 static const std::array<const std::string,5> s_servicenames
194 {
195 "[Reserved]", "Analog", "ATSC TV", "ATSC Audio", "ATSC Data",
196 };
197 uint type = ServiceType(i);
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]);
201}
202
204{
205 QString str;
206 str.append(QString("%1 Virtual Channel Section\n%2"
207 " channel_count(%3) tsid(0x%4)")
208 .arg((TableID::TVCT == TableID()) ? "Terrestrial":"Cable",
210 .arg(ChannelCount())
211 .arg(TransportStreamID(),4,16,QChar('0')));
212
213 if (TableID::CVCT == TableID())
214 {
215 uint sctemapid = (pesdata()[3]<<8) | pesdata()[4];
216 str.append(QString(" mapid(0x%1)").arg(sctemapid,0,16));
217 }
218
219 str.append("\n");
220
221 for (uint i = 0; i < ChannelCount(); i++)
222 str.append(ChannelString(i));
223
224 if (0 != GlobalDescriptorsLength())
225 {
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)
233 {
234 str.append(QString(" %1\n")
235 .arg(MPEGDescriptor(i).toString()));
236 }
237 }
238
239 return str;
240}
241
242QString VirtualChannelTable::toStringXML(uint indent_level) const
243{
244 QString indent_0 = StringUtil::indentSpaces(indent_level);
245 QString indent_1 = StringUtil::indentSpaces(indent_level + 1);
246
247 QString section_name = QString("%1VirtualChannelSection")
248 .arg((TableID::TVCT == TableID()) ? "Terrestrial" : "Cable");
249
250 QString mapid;
251 if (TableID::CVCT == TableID())
252 {
253 uint sctemapid = (pesdata()[3]<<8) | pesdata()[4];
254 mapid = QString(" mapid=\"0x%1\"").arg(sctemapid,4,16,QChar('0'));
255 }
256
257 QString str =
258 QString("%1<%2 tsid=\"0x%3\" channel_count=\"%4\""
259 "\n%5global_descriptors_length=\"%6\"%7"
260 "\n%8%9>\n")
261 .arg(indent_0,
262 section_name)
263 .arg(TransportStreamID(),4,16,QChar('0'))
264 .arg(ChannelCount())
265 .arg(indent_1)
267 .arg(mapid,
268 indent_1,
269 PSIPTable::XMLValues(indent_level + 1));
270
271 std::vector<const unsigned char*> gdesc =
273 for (auto & i : gdesc)
274 {
275 str += MPEGDescriptor(i, 300)
276 .toStringXML(indent_level + 1) + "\n";
277 }
278
279 for (uint i = 0; i < ChannelCount(); i++)
280 str += ChannelStringXML(indent_level + 1, i) + "\n";
281
282 return str + indent_0 + QString("</%1>").arg(section_name);
283}
284
286 uint indent_level, uint chan) const
287{
288 QString indent_0 = StringUtil::indentSpaces(indent_level);
289 QString indent_1 = StringUtil::indentSpaces(indent_level + 1);
290 QString str = QString("%1<Channel %2\n%3descriptors_length=\"%4\">\n")
291 .arg(indent_0,
292 XMLChannelValues(indent_level + 1, chan),
293 indent_1)
294 .arg(DescriptorsLength(chan));
295
296 std::vector<const unsigned char*> desc =
298 for (auto & i : desc)
299 {
300 str += MPEGDescriptor(i, 300)
301 .toStringXML(indent_level + 1) + "\n";
302 }
303
304 return str + indent_0 + "</Channel>";
305}
306
308 uint indent_level, uint chan) const
309{
310 QString indent_0 = StringUtil::indentSpaces(indent_level);
311 QString str;
312
313 str += QString("short_channel_name=\"%1\" ").arg(ShortChannelName(chan));
314 str += "\n" + indent_0;
315
316 str += QString(R"(modulation="0x%1" modulation_desc="%2" )")
317 .arg(ModulationMode(chan),2,16,QChar('0'))
318 .arg(ModulationModeString(chan));
319 str += QString("channel_tsid=\"0x%1\"")
320 .arg(ChannelTransportStreamID(chan),4,16,QChar('0'));
321 str += "\n" + indent_0;
322
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;
328
329 str += QString("hidden=\"%1\" ")
331 str += QString("hide_guide=\"%1\"")
333 str += "\n" + indent_0;
334
335 str += QString(R"(service_type="0x%1" service_type_desc="%2")")
336 .arg(ServiceType(chan),2,16,QChar('0'))
337 .arg(ServiceTypeString(chan));
338 str += "\n" + indent_0;
339
340 str += QString("source_id=\"0x%1\"")
341 .arg(SourceID(chan),4,16,QChar('0'));
342
343 return str;
344}
345
347 uint indent_level, uint chan) const
348{
349 return QString(R"(major_channel="%1" minor_channel="%2" )")
350 .arg(MajorChannel(chan)).arg(MinorChannel(chan)) +
351 VirtualChannelTable::XMLChannelValues(indent_level, chan);
352}
353
355{
356 QString str;
357 str.append(QString(" Channel #%1 ").arg(chan));
358 str.append(QString("name(%1) %2-%3 ").arg(ShortChannelName(chan))
359 .arg(MajorChannel(chan)).arg(MinorChannel(chan)));
360 str.append(QString("mod(%1) ").arg(ModulationModeString(chan)));
361 str.append(QString("cTSID(0x%1)\n")
362 .arg(ChannelTransportStreamID(chan),4,16,QChar('0')));
363
364 str.append(QString(" pnum(%1) ").arg(ProgramNumber(chan)));
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))));
369 str.append(QString("service_type(%1)\n").arg(ServiceTypeString(chan)));
370
371 str.append(QString(" source_id(%1)\n").arg(SourceID(chan)));
372 if (0 != DescriptorsLength(chan))
373 {
374 str.append(QString(" descriptors length(%1) ")
375 .arg(DescriptorsLength(chan)));
376 std::vector<const unsigned char*> desc =
378 str.append(QString("count:%1\n").arg(desc.size()));
379 for (auto & i : desc)
380 {
381 str.append(QString(" %1\n")
382 .arg(MPEGDescriptor(i).toString()));
383 }
384 }
385 return str;
386}
387
389 uint indent_level, uint chan) const
390{
391 QString channel_info = SCTEIsChannelNumberTwoPart(chan) ?
392 QString(R"(major_channel="%1" minor_channel="%2" )")
393 .arg(MajorChannel(chan)).arg(MinorChannel(chan)) :
394 QString("channel_number=\"%1\" ")
395 .arg(SCTEOnePartChannel(chan));
396
397 return channel_info +
398 VirtualChannelTable::XMLChannelValues(indent_level, chan) +
399 QString(R"( path_select="%1" out_of_band="%2")")
402}
403
405{
406 QString str;
407 str.append(QString(" Channel #%1 ").arg(chan));
408 str.append(QString("name(%1)").arg(ShortChannelName(chan)));
409
411 {
412 str.append(QString(" %1-%2 ")
413 .arg(MajorChannel(chan)).arg(MinorChannel(chan)));
414 }
415 else
416 {
417 str.append(QString(" %1 ").arg(SCTEOnePartChannel(chan)));
418 }
419
420 str.append(QString("mod(%1) ").arg(ModulationModeString(chan)));
421 str.append(QString("cTSID(0x%1)\n")
422 .arg(ChannelTransportStreamID(chan),4,16,QChar('0')));
423
424 str.append(QString(" pnum(%1) ").arg(ProgramNumber(chan)));
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))));
429 str.append(QString("service_type(%1)\n").arg(ServiceTypeString(chan)));
430
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))));
434
435 if (0 != DescriptorsLength(chan))
436 {
437 str.append(QString(" descriptors length(%1) ")
438 .arg(DescriptorsLength(chan)));
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")
444 .arg(MPEGDescriptor(i).toString()));
445 }
446 return str;
447}
448
450{
451 QString str;
452 str.append(QString("Event Information Table\n"));
453 str.append(static_cast<const PSIPTable*>(this)->toString());
454 str.append(QString(" pid(0x%1) sourceID(%2) eventCount(%3)\n")
455 .arg(tsheader()->PID()).arg(SourceID()).arg(EventCount()));
456 for (uint i = 0; i < EventCount(); i++)
457 {
458 str.append(QString(" Event #%1 ID(%2) start_time(%3) length(%4 sec)\n")
459 .arg(i,2,10).arg(EventID(i))
461 .arg(LengthInSeconds(i)));
462 str.append(QString(" ETM_loc(%1) Title(%2)\n").
463 arg(ETMLocation(i)).arg(title(i).toString()));
464 if (0 != DescriptorsLength(i))
465 {
466 std::vector<const unsigned char*> desc =
468 for (auto & j : desc)
469 str.append(QString("%1\n")
470 .arg(MPEGDescriptor(j).toString()));
471 }
472 }
473 return str;
474}
475
477{
478 QString str =
479 QString("Extended Text Table -- sourceID(%1) eventID(%2) "
480 "ettID(%3) isChannelETM(%4) isEventETM(%5)\n%6")
481 .arg(SourceID()).arg(EventID()).arg(ExtendedTextTableID())
482 .arg(static_cast<int>(IsChannelETM())).arg(static_cast<int>(IsEventETM()))
484 return str;
485}
486
487int VirtualChannelTable::Find(int major, int minor) const
488{
489 if (major>0)
490 {
491 for (uint i = 0; i < ChannelCount(); i++)
492 {
493 if ((MajorChannel(i) == (uint)major) &&
494 (MinorChannel(i) == (uint)minor))
495 return (int)i;
496 }
497 }
498 else if (minor>0)
499 {
500 for (uint i = 0; i < ChannelCount(); i++)
501 {
502 if (MinorChannel(i) == (uint)minor)
503 return (int)i;
504 }
505 }
506 return -1;
507}
508
510{
511 if ((i >= ChannelCount()) || DescriptorsLength(i) == 0)
512 return {};
513
514 std::vector<const unsigned char*> parsed =
516
517 const unsigned char* desc =
519
520 if (!desc)
521 return {};
522
524}
525
526QString SystemTimeTable::toString(void) const
527{
528 QString str =
529 QString("System Time Section GPSTime(%1) GPS2UTC_Offset(%2) ")
531 str.append(QString("DS(%3) Day(%4) Hour(%5)\n")
532 .arg(static_cast<int>(InDaylightSavingsTime()))
535 return str;
536}
537
538QString SystemTimeTable::toStringXML(uint indent_level) const
539{
540 QString indent_0 = StringUtil::indentSpaces(indent_level);
541 QString indent_1 = StringUtil::indentSpaces(indent_level + 1);
542
543 return QString(
544 "%1<SystemTimeSection system_time=\"%2\" system_time_iso=\"%3\""
545 "\n%4in_dst=\"%5\" dst_start_day=\"%6\" dst_start_hour=\"%7\""
546 "\n%8%9 />")
547 .arg(indent_0,
548 QString::number(GPSRaw()),
550 indent_1,
552 QString::number(DayDaylightSavingsStarts()), /* day-of-month */
553 QString::number(HourDaylightSavingsStarts()),
554 indent_1,
555 PSIPTable::XMLValues(indent_level + 1));
556}
Overall structure.
QString ChannelString(uint channel) const override
Definition: atsctables.cpp:404
bool IsPathSelect(uint i) const
Definition: atsctables.h:498
QString XMLChannelValues(uint indent_level, uint channel) const override
Definition: atsctables.cpp:388
bool SCTEIsChannelNumberTwoPart(uint i) const
Definition: atsctables.h:476
bool IsOutOfBand(uint i) const
Definition: atsctables.h:503
uint SCTEOnePartChannel(uint i) const
Definition: atsctables.h:483
std::vector< unsigned char * > m_ptrs
Definition: atsctables.h:621
const unsigned char * Descriptors(uint i) const
Definition: atsctables.h:611
void Parse() const
Definition: atsctables.cpp:64
uint SourceID() const
Definition: atsctables.h:557
uint EventID(uint i) const
Definition: atsctables.h:566
MultipleStringStructure title(int i) const
Definition: atsctables.h:597
uint TitleLength(uint i) const
Definition: atsctables.h:594
uint EventCount() const
Definition: atsctables.h:560
uint LengthInSeconds(uint i) const
Definition: atsctables.h:588
QString toString() const override
Definition: atsctables.cpp:449
uint ETMLocation(uint i) const
Definition: atsctables.h:583
uint DescriptorsLength(uint i) const
Definition: atsctables.h:603
QDateTime StartTimeGPS(uint i) const
Definition: atsctables.h:576
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
Definition: atsctables.h:665
bool IsEventETM(void) const
Definition: atsctables.h:664
uint EventID(void) const
Definition: atsctables.h:667
QString toString() const override
Definition: atsctables.cpp:476
MultipleStringStructure ExtendedTextMessage() const
Definition: atsctables.h:671
uint ExtendedTextTableID() const
Definition: atsctables.h:655
bool IsChannelETM(void) const
Definition: atsctables.h:663
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
Definition: atsctables.h:187
const unsigned char * TableDescriptors(uint i) const
Definition: atsctables.h:162
void Parse(void) const
Definition: atsctables.cpp:47
uint TableType(uint i) const
Definition: atsctables.h:127
uint TableDescriptorsLength(uint i) const
Definition: atsctables.h:153
uint GlobalDescriptorsLength() const
Definition: atsctables.h:168
const unsigned char * GlobalDescriptors() const
Definition: atsctables.h:174
uint TableDescriptorsBytes(uint i) const
Definition: atsctables.h:146
uint TableCount() const
Definition: atsctables.h:123
QString toString(void) const override
Definition: atsctables.cpp:72
QString TableClassString(uint i) const
Definition: atsctables.cpp:9
uint TablePID(uint i) const
Definition: atsctables.h:135
uint TableVersion(uint i) const
Definition: atsctables.h:141
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:119
int TableClass(uint i) const
Definition: atsctables.cpp:28
const TSHeader * tsheader() const
Definition: pespacket.h:90
const unsigned char * pesdata() const
Definition: pespacket.h:164
Contains Packet Identifier numeric values.
Definition: mpegtables.h:207
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
Definition: mpegtables.h:410
const unsigned char * psipdata(void) const
Definition: mpegtables.h:541
QString XMLValues(uint indent_level) const
Definition: mpegtables.cpp:813
uint TableID(void) const
Definition: mpegtables.h:496
virtual QString toString(void) const
Definition: mpegtables.cpp:789
QString toString(void) const override
Definition: atsctables.cpp:526
bool InDaylightSavingsTime() const
Definition: atsctables.h:735
uint HourDaylightSavingsStarts() const
Definition: atsctables.h:737
uint32_t GPSRaw(void) const
Definition: atsctables.h:714
QDateTime SystemTimeGPS(void) const
Definition: atsctables.h:719
uint GPSOffset() const
Definition: atsctables.h:729
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:538
uint DayDaylightSavingsStarts() const
Definition: atsctables.h:736
QString XMLChannelValues(uint indent_level, uint channel) const override
Definition: atsctables.cpp:346
QString ChannelString(uint channel) const override
Definition: atsctables.cpp:354
QString ShortChannelName(uint i) const
Definition: atsctables.h:233
QString ModulationModeString(uint i) const
Definition: atsctables.cpp:178
bool IsHiddenInGuide(uint i) const
Definition: atsctables.h:295
bool IsHidden(uint i) const
Definition: atsctables.h:289
virtual QString XMLChannelValues(uint indent_level, uint channel) const
Definition: atsctables.cpp:307
uint MajorChannel(uint i) const
Definition: atsctables.h:252
const unsigned char * Descriptors(uint i) const
Definition: atsctables.h:318
uint ChannelTransportStreamID(uint i) const
Definition: atsctables.h:269
uint TransportStreamID() const
Definition: atsctables.h:225
QString toString(void) const override
Definition: atsctables.cpp:203
uint MinorChannel(uint i) const
Definition: atsctables.h:257
virtual QString ChannelString(uint channel) const =0
uint GlobalDescriptorsLength() const
Definition: atsctables.h:325
int Find(int major, int minor) const
Definition: atsctables.cpp:487
bool IsAccessControlled(uint i) const
Definition: atsctables.h:284
QString ServiceTypeString(uint i) const
Definition: atsctables.cpp:191
uint ETMlocation(uint i) const
Definition: atsctables.h:279
void Parse() const
Definition: atsctables.cpp:56
uint ProgramNumber(uint i) const
Definition: atsctables.h:274
uint SourceID(uint i) const
Definition: atsctables.h:307
virtual QString ChannelStringXML(uint indent_level, uint channel) const
Definition: atsctables.cpp:285
uint DescriptorsLength(uint i) const
Definition: atsctables.h:313
QString GetExtendedChannelName(uint idx) const
Definition: atsctables.cpp:509
uint ServiceType(uint i) const
Definition: atsctables.h:301
uint ModulationMode(uint i) const
Definition: atsctables.h:262
std::vector< unsigned char * > m_ptrs
Definition: atsctables.h:345
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:242
uint ChannelCount() const
Definition: atsctables.h:228
const unsigned char * GlobalDescriptors() const
Definition: atsctables.h:331
#define minor(X)
Definition: compat.h:74
unsigned int uint
Definition: freesurround.h:24
static const iso6937table * d
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
@ ISODate
Default UTC.
Definition: mythdate.h:17
QString bool_to_string(bool val)
This is equivalent to QVariant(bool).toString()
Definition: stringutil.h:44
QString indentSpaces(unsigned int level, unsigned int size=4)
Definition: stringutil.h:36