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 #include "atscdescriptors.h"
5 
7 {
8  static const QString tts[] = {
9  QString("UNKNOWN"),
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"),
15  QString("DCCSCT"),
16  QString("EIT + 0x100"),
17  QString("Event ETT + 0x200"),
18  QString("DCCT + 0x1400"),
19  QString("RTT + 0x300")
20  };
21  int tt = TableClass(i) + 1;
22  return tts[tt];
23 }
24 
26 {
27  const int tt = TableType(i);
28  if (tt < 6)
29  {
30  return tt;
31  }
32  else if (tt < 0x300)
33  {
34  if (tt < 0x200) return TableClass::EIT;
35  return TableClass::ETTe;
36  }
37  else if (tt >= 0x1400 && tt < 0x1500)
38  return TableClass::DCCT;
39  else if (tt < 0x400)
40  return TableClass::RRT;
41  return TableClass::UNKNOWN;
42 }
43 
44 void MasterGuideTable::Parse(void) const
45 {
46  _ptrs.clear();
47  _ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 3);
48  for (uint i = 0; i < TableCount(); i++)
49  _ptrs.push_back(_ptrs[i] + 11 + TableDescriptorsLength(i));
50 }
51 
52 
54 {
55  _ptrs.clear();
56  _ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 2);
57  for (uint i = 0; i < ChannelCount(); i++)
58  _ptrs.push_back(_ptrs[i] + 32 + DescriptorsLength(i));
59 }
60 
62 {
63  _ptrs.clear();
64  _ptrs.push_back(const_cast<unsigned char*>(psipdata()) + 2);
65  for (uint i = 0; i < EventCount(); i++)
66  _ptrs.push_back(_ptrs[i] + 12 + TitleLength(i) + DescriptorsLength(i));
67 }
68 
69 QString MasterGuideTable::toString(void) const
70 {
71  QString str;
72  str.append(QString("Master Guide Section\n%1"
73  " table_count(%2)\n")
74  .arg(PSIPTable::toString())
75  .arg(TableCount()));
76 
77  if (_ptrs.size() < TableCount())
78  LOG(VB_GENERAL, LOG_ERR, "MasterGuideTable::toString(): Table count mismatch");
79 
80  for (uint i = 0; i < TableCount() && i < _ptrs.size(); i++)
81  {
82  str.append(QString(" Table #%1 ").arg(i, 2, 10));
83  str.append(QString("pid(0x%1) ver(%2) ")
84  .arg(TablePID(i), 0, 16).arg(TableVersion(i), 2, 10));
85  str.append(QString("size(%1) desc_len(%2) type: %4 %3 \n")
86  .arg(TableDescriptorsBytes(i), 4, 10)
87  .arg(TableDescriptorsLength(i))
88  .arg(TableClassString(i)).arg(TableType(i)));
89  if (0 != TableDescriptorsLength(i))
90  {
91  vector<const unsigned char*> desc =
94  for (uint j = 0; j < desc.size(); j++)
95  str.append(QString(" %1\n")
96  .arg(MPEGDescriptor(desc[j]).toString()));
97  }
98  }
99  if (0 != GlobalDescriptorsLength())
100  {
101  str.append(QString(" global descriptors length(%1) ")
102  .arg(GlobalDescriptorsLength()));
103  vector<const unsigned char*> desc =
106  str.append(QString("count: %1\n").arg(desc.size()));
107  for (uint i = 0; i < desc.size(); i++)
108  {
109  str.append(QString(" %1\n")
110  .arg(MPEGDescriptor(desc[i]).toString()));
111  }
112  }
113  return str;
114 }
115 
116 QString MasterGuideTable::toStringXML(uint indent_level) const
117 {
118  QString indent_0 = xml_indent(indent_level);
119  QString indent_1 = xml_indent(indent_level + 1);
120  QString indent_2 = xml_indent(indent_level + 2);
121 
122  QString str =
123  QString("%1<MasterGuideSection table_count=\"%2\" "
124  "global_descriptors_length=\"%3\"\n%4%5>\n")
125  .arg(indent_0)
126  .arg(TableCount())
128  .arg(indent_1)
129  .arg(PSIPTable::XMLValues(indent_level + 1));
130 
131  vector<const unsigned char*> gdesc =
133  for (uint i = 0; i < gdesc.size(); i++)
134  {
135  str += MPEGDescriptor(gdesc[i], 300)
136  .toStringXML(indent_level + 1) + "\n";
137  }
138 
139  if (_ptrs.size() < TableCount())
140  LOG(VB_GENERAL, LOG_ERR, "MasterGuideTable::toStringXML(): Table count mismatch");
141 
142  for (uint i = 0; i < TableCount() && i < _ptrs.size(); i++)
143  {
144  str += QString(
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\"")
148  .arg(indent_1)
149  .arg(TablePID(i),4,16,QChar('0'))
150  .arg(TableVersion(i))
151  .arg(indent_1)
152  .arg(TableType(i),4,16,QChar('0'))
153  .arg(TableClassString(i))
154  .arg(indent_2)
155  .arg(TableDescriptorsBytes(i))
156  .arg(TableDescriptorsLength(i));
157 
158  vector<const unsigned char*> desc =
161  str += (desc.empty()) ? " />\n" : ">\n";
162  for (uint j = 0; j < desc.size(); j++)
163  {
164  str += MPEGDescriptor(desc[j], 300)
165  .toStringXML(indent_level + 2) + "\n";
166  }
167 
168  if (!desc.empty())
169  str += indent_1 + "</Table>\n";
170  }
171 
172  return str + "</MasterGuideSection>";
173 }
174 
176 {
177  static const char *modnames[6] =
178  {
179  "[Reserved]", "Analog", "SCTE mode 1",
180  "SCTE mode 2", "ATSC 8-VSB", "ATSC 16-VSB",
181  };
182  uint mode = ModulationMode(i);
183  if (mode >= (sizeof(modnames) / sizeof(char*)))
184  return QString("Unknown 0x%1").arg(mode,2,16,QChar('0'));
185  else
186  return QString(modnames[mode]);
187 }
188 
190 {
191  static const char *servicenames[5] =
192  {
193  "[Reserved]", "Analog", "ATSC TV", "ATSC Audio", "ATSC Data",
194  };
195  uint type = ServiceType(i);
196  if (type >= (sizeof(servicenames) / sizeof(char*)))
197  return QString("Unknown 0x%1").arg(type,2,16,QChar('0'));
198  else
199  return QString(servicenames[type]);
200 }
201 
202 QString VirtualChannelTable::toString(void) const
203 {
204  QString str;
205  str.append(QString("%1 Virtual Channel Section\n%2"
206  " channel_count(%3) tsid(0x%4)")
207  .arg((TableID::TVCT == TableID()) ? "Terrestrial":"Cable")
208  .arg(PSIPTable::toString())
209  .arg(ChannelCount())
210  .arg(TransportStreamID(),4,16,QChar('0')));
211 
212  if (TableID::CVCT == TableID())
213  {
214  uint sctemapid = (pesdata()[3]<<8) | pesdata()[4];
215  str.append(QString(" mapid(0x%1)").arg(sctemapid,0,16));
216  }
217 
218  str.append("\n");
219 
220  for (uint i = 0; i < ChannelCount(); i++)
221  str.append(ChannelString(i));
222 
223  if (0 != GlobalDescriptorsLength())
224  {
225  str.append(QString("global descriptors length(%1) ")
226  .arg(GlobalDescriptorsLength()));
227  vector<const unsigned char*> desc =
230  str.append(QString("count: %1\n").arg(desc.size()));
231  for (uint i = 0; i < desc.size(); i++)
232  {
233  str.append(QString(" %1\n")
234  .arg(MPEGDescriptor(desc[i]).toString()));
235  }
236  }
237 
238  return str;
239 }
240 
241 QString VirtualChannelTable::toStringXML(uint indent_level) const
242 {
243  QString indent_0 = xml_indent(indent_level);
244  QString indent_1 = xml_indent(indent_level + 1);
245  QString indent_2 = xml_indent(indent_level + 2);
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  .arg(section_name)
263  .arg(TransportStreamID(),4,16,QChar('0'))
264  .arg(ChannelCount())
265  .arg(indent_1)
267  .arg(mapid)
268  .arg(indent_1)
269  .arg(PSIPTable::XMLValues(indent_level + 1));
270 
271  vector<const unsigned char*> gdesc =
273  for (uint i = 0; i < gdesc.size(); i++)
274  {
275  str += MPEGDescriptor(gdesc[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 = xml_indent(indent_level);
289  QString indent_1 = xml_indent(indent_level + 1);
290  QString str = QString("%1<Channel %2\n%3descriptors_length=\"%4\">\n")
291  .arg(indent_0)
292  .arg(XMLChannelValues(indent_level + 1, chan))
293  .arg(indent_1)
294  .arg(DescriptorsLength(chan));
295 
296  vector<const unsigned char*> desc =
298  for (uint i = 0; i < desc.size(); i++)
299  {
300  str += MPEGDescriptor(desc[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 = xml_indent(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("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\" ")
330  .arg(xml_bool_to_string(IsHidden(chan)));
331  str += QString("hide_guide=\"%1\"")
332  .arg(xml_bool_to_string(IsHiddenInGuide(chan)));
333  str += "\n" + indent_0;
334 
335  str += QString("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("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(IsAccessControlled(chan)));
367  str.append(QString("hidden(%1) ").arg(IsHidden(chan)));
368  str.append(QString("hide_guide(%1) ").arg(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  vector<const unsigned char*> desc =
378  str.append(QString("count:%1\n").arg(desc.size()));
379  for (uint i = 0; i < desc.size(); i++)
380  {
381  str.append(QString(" %1\n")
382  .arg(MPEGDescriptor(desc[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("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(" path_select=\"%1\" out_of_band=\"%2\"")
400  .arg(xml_bool_to_string(IsPathSelect(chan)))
401  .arg(xml_bool_to_string(IsOutOfBand(chan)));
402 }
403 
405 {
406  QString str;
407  str.append(QString(" Channel #%1 ").arg(chan));
408  str.append(QString("name(%1)").arg(ShortChannelName(chan)));
409 
410  if (SCTEIsChannelNumberTwoPart(chan))
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(IsAccessControlled(chan)));
427  str.append(QString("hidden(%1) ").arg(IsHidden(chan)));
428  str.append(QString("hide_guide(%1) ").arg(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(IsPathSelect(chan)));
433  str.append(QString("out_of_band(%1)\n").arg(IsOutOfBand(chan)));
434 
435  if (0 != DescriptorsLength(chan))
436  {
437  str.append(QString(" descriptors length(%1) ")
438  .arg(DescriptorsLength(chan)));
439  vector<const unsigned char*> desc =
441  str.append(QString("count:%1\n").arg(desc.size()));
442  for (uint i = 0; i < desc.size(); i++)
443  str.append(QString(" %1\n")
444  .arg(MPEGDescriptor(desc[i]).toString()));
445  }
446  return str;
447 }
448 
450 {
451  QString str;
452  str.append(QString("Event Information Table\n"));
453  str.append(((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  vector<const unsigned char*> desc =
468  for (uint j=0; j<desc.size(); j++)
469  str.append(QString("%1\n")
470  .arg(MPEGDescriptor(desc[j]).toString()));
471  }
472  }
473  return str;
474 }
475 
476 QString ExtendedTextTable::toString(void) const
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(IsChannelETM()).arg(IsEventETM())
483  .arg(ExtendedTextMessage().toString());
484  return str;
485 }
486 
487 int 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 QString();
513 
514  vector<const unsigned char*> parsed =
516 
517  const unsigned char* desc =
519 
520  if (!desc)
521  return QString();
522 
524 }
525 
526 QString 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(InDaylightSavingsTime())
534  .arg(HourDaylightSavingsStarts()));
535  return str;
536 }
537 
538 QString SystemTimeTable::toStringXML(uint indent_level) const
539 {
540  QString indent_0 = xml_indent(indent_level);
541  QString indent_1 = xml_indent(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  .arg(GPSRaw())
550  .arg(indent_1)
552  .arg(DayDaylightSavingsStarts()) /* day-of-month */
554  .arg(indent_1)
555  .arg(PSIPTable::XMLValues(indent_level + 1));
556 }
const unsigned char * pesdata() const
Definition: pespacket.h:163
const unsigned char * psipdata(void) const
Definition: mpegtables.h:522
const TSHeader * tsheader() const
Definition: pespacket.h:89
uint HourDaylightSavingsStarts() const
Definition: atsctables.h:737
uint MajorChannel(uint i) const
Definition: atsctables.h:245
vector< unsigned char * > _ptrs
Definition: atsctables.h:180
uint MinorChannel(uint i) const
Definition: atsctables.h:250
int Find(int major, int minor) const
Definition: atsctables.cpp:487
virtual QString XMLChannelValues(uint indent_level, uint channel) const
Definition: atsctables.cpp:307
bool InDaylightSavingsTime() const
Definition: atsctables.h:735
QString XMLChannelValues(uint indent_level, uint channel) const override
Definition: atsctables.cpp:346
uint TableCount() const
Definition: atsctables.h:114
uint ProgramNumber(uint i) const
Definition: atsctables.h:267
QString ServiceTypeString(uint i) const
Definition: atsctables.cpp:189
uint ServiceType(uint i) const
Definition: atsctables.h:294
const unsigned char * GlobalDescriptors() const
Definition: atsctables.h:167
uint ExtendedTextTableID() const
Definition: atsctables.h:651
vector< unsigned char * > _ptrs
Definition: atsctables.h:617
QString LongChannelNameString(void) const
Convenience function that returns a QString comprising a concatenation of all the segments in the Lon...
uint SCTEOnePartChannel(uint i) const
Definition: atsctables.h:476
unsigned int uint
Definition: compat.h:140
QString GetExtendedChannelName(uint idx) const
Definition: atsctables.cpp:509
bool IsOutOfBand(uint i) const
Definition: atsctables.h:496
uint ChannelTransportStreamID(uint i) const
Definition: atsctables.h:262
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:116
uint SourceID() const
Definition: atsctables.h:550
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:538
const unsigned char * GlobalDescriptors() const
Definition: atsctables.h:324
QString toString() const override
Definition: atsctables.cpp:476
uint ModulationMode(uint i) const
Definition: atsctables.h:255
QString TableClassString(uint i) const
Definition: atsctables.cpp:6
uint EventCount() const
Definition: atsctables.h:553
QString toString(void) const override
Definition: atsctables.cpp:69
QString toString(void) const override
Definition: atsctables.cpp:202
Overall structure.
int TableClass(uint i) const
Definition: atsctables.cpp:25
void Parse() const
Definition: atsctables.cpp:61
bool IsHidden(uint i) const
Definition: atsctables.h:282
A PSIP table is a variant of a PES packet containing an MPEG, ATSC or DVB table.
Definition: mpegtables.h:371
uint ETMlocation(uint i) const
Definition: atsctables.h:272
bool IsHiddenInGuide(uint i) const
Definition: atsctables.h:288
uint DayDaylightSavingsStarts() const
Definition: atsctables.h:736
uint ETMLocation(uint i) const
Definition: atsctables.h:579
uint ChannelCount() const
Definition: atsctables.h:221
uint TableDescriptorsBytes(uint i) const
Definition: atsctables.h:139
uint TablePID(uint i) const
Definition: atsctables.h:128
QString toString(void) const override
Definition: atsctables.cpp:526
virtual QString ChannelString(uint channel) const =0
#define minor(X)
Definition: compat.h:138
uint GlobalDescriptorsLength() const
Definition: atsctables.h:161
uint EventID(uint i) const
Definition: atsctables.h:558
uint32_t GPSRaw(void) const
Definition: atsctables.h:710
uint TableVersion(uint i) const
Definition: atsctables.h:134
const unsigned char * Descriptors(uint i) const
Definition: atsctables.h:311
uint TitleLength(uint i) const
Definition: atsctables.h:590
static const unsigned char * Find(const desc_list_t &parsed, uint desc_tag)
QString toString() const override
Definition: atsctables.cpp:449
void Parse() const
Definition: atsctables.cpp:53
bool IsAccessControlled(uint i) const
Definition: atsctables.h:277
uint TableID(void) const
Definition: mpegtables.h:479
bool IsEventETM(void) const
Definition: atsctables.h:660
uint SourceID(uint i) const
Definition: atsctables.h:300
QDateTime SystemTimeGPS(void) const
Definition: atsctables.h:715
uint TableDescriptorsLength(uint i) const
Definition: atsctables.h:146
#define LOG(_MASK_, _LEVEL_, _STRING_)
Definition: mythlogging.h:41
const unsigned char * Descriptors(uint i) const
Definition: atsctables.h:607
QString ModulationModeString(uint i) const
Definition: atsctables.cpp:175
uint LengthInSeconds(uint i) const
Definition: atsctables.h:584
bool IsChannelETM(void) const
Definition: atsctables.h:659
QString XMLValues(uint indent_level) const
Definition: mpegtables.cpp:778
vector< unsigned char * > _ptrs
Definition: atsctables.h:338
QString ChannelString(uint channel) const override
Definition: atsctables.cpp:404
const unsigned char * TableDescriptors(uint i) const
Definition: atsctables.h:155
uint EventID(void) const
Definition: atsctables.h:663
virtual QString toString(void) const
Definition: mpegtables.cpp:754
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:241
Provides the long channel name for the virtual channel containing this descriptor.
const MultipleStringStructure ExtendedTextMessage() const
Definition: atsctables.h:667
uint TableType(uint i) const
Definition: atsctables.h:120
uint DescriptorsLength(uint i) const
Definition: atsctables.h:599
QString ChannelString(uint channel) const override
Definition: atsctables.cpp:354
uint DescriptorsLength(uint i) const
Definition: atsctables.h:306
static QString xml_bool_to_string(bool val)
Definition: mythmiscutil.h:60
virtual QString ChannelStringXML(uint indent_level, uint channel) const
Definition: atsctables.cpp:285
bool SCTEIsChannelNumberTwoPart(uint i) const
Definition: atsctables.h:469
uint GPSOffset() const
Definition: atsctables.h:729
QDateTime StartTimeGPS(uint i) const
Definition: atsctables.h:568
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
void Parse(void) const
Definition: atsctables.cpp:44
bool IsPathSelect(uint i) const
Definition: atsctables.h:491
MultipleStringStructure title(int i) const
Definition: atsctables.h:593
static desc_list_t Parse(const unsigned char *data, uint len)
uint TransportStreamID() const
Definition: atsctables.h:218
Default UTC.
Definition: mythdate.h:14
uint GlobalDescriptorsLength() const
Definition: atsctables.h:318
const QString ShortChannelName(uint i) const
Definition: atsctables.h:225
QString xml_indent(uint level)
QString XMLChannelValues(uint indent_level, uint channel) const override
Definition: atsctables.cpp:388
uint SourceID(void) const
Definition: atsctables.h:661