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  if (tt < 0x300)
33  {
34  if (tt < 0x200) return TableClass::EIT;
35  return TableClass::ETTe;
36  }
37  if (tt >= 0x1400 && tt < 0x1500)
38  return TableClass::DCCT;
39  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 (size_t 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 (size_t 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 (size_t 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 (size_t 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  return QString(modnames[mode]);
186 }
187 
189 {
190  static const char *servicenames[5] =
191  {
192  "[Reserved]", "Analog", "ATSC TV", "ATSC Audio", "ATSC Data",
193  };
194  uint type = ServiceType(i);
195  if (type >= (sizeof(servicenames) / sizeof(char*)))
196  return QString("Unknown 0x%1").arg(type,2,16,QChar('0'));
197  return QString(servicenames[type]);
198 }
199 
200 QString VirtualChannelTable::toString(void) const
201 {
202  QString str;
203  str.append(QString("%1 Virtual Channel Section\n%2"
204  " channel_count(%3) tsid(0x%4)")
205  .arg((TableID::TVCT == TableID()) ? "Terrestrial":"Cable")
206  .arg(PSIPTable::toString())
207  .arg(ChannelCount())
208  .arg(TransportStreamID(),4,16,QChar('0')));
209 
210  if (TableID::CVCT == TableID())
211  {
212  uint sctemapid = (pesdata()[3]<<8) | pesdata()[4];
213  str.append(QString(" mapid(0x%1)").arg(sctemapid,0,16));
214  }
215 
216  str.append("\n");
217 
218  for (uint i = 0; i < ChannelCount(); i++)
219  str.append(ChannelString(i));
220 
221  if (0 != GlobalDescriptorsLength())
222  {
223  str.append(QString("global descriptors length(%1) ")
224  .arg(GlobalDescriptorsLength()));
225  vector<const unsigned char*> desc =
228  str.append(QString("count: %1\n").arg(desc.size()));
229  for (size_t i = 0; i < desc.size(); i++)
230  {
231  str.append(QString(" %1\n")
232  .arg(MPEGDescriptor(desc[i]).toString()));
233  }
234  }
235 
236  return str;
237 }
238 
239 QString VirtualChannelTable::toStringXML(uint indent_level) const
240 {
241  QString indent_0 = xml_indent(indent_level);
242  QString indent_1 = xml_indent(indent_level + 1);
243  QString indent_2 = xml_indent(indent_level + 2);
244 
245  QString section_name = QString("%1VirtualChannelSection")
246  .arg((TableID::TVCT == TableID()) ? "Terrestrial" : "Cable");
247 
248  QString mapid;
249  if (TableID::CVCT == TableID())
250  {
251  uint sctemapid = (pesdata()[3]<<8) | pesdata()[4];
252  mapid = QString(" mapid=\"0x%1\"").arg(sctemapid,4,16,QChar('0'));
253  }
254 
255  QString str =
256  QString("%1<%2 tsid=\"0x%3\" channel_count=\"%4\""
257  "\n%5global_descriptors_length=\"%6\"%7"
258  "\n%8%9>\n")
259  .arg(indent_0)
260  .arg(section_name)
261  .arg(TransportStreamID(),4,16,QChar('0'))
262  .arg(ChannelCount())
263  .arg(indent_1)
265  .arg(mapid)
266  .arg(indent_1)
267  .arg(PSIPTable::XMLValues(indent_level + 1));
268 
269  vector<const unsigned char*> gdesc =
271  for (size_t i = 0; i < gdesc.size(); i++)
272  {
273  str += MPEGDescriptor(gdesc[i], 300)
274  .toStringXML(indent_level + 1) + "\n";
275  }
276 
277  for (uint i = 0; i < ChannelCount(); i++)
278  str += ChannelStringXML(indent_level + 1, i) + "\n";
279 
280  return str + indent_0 + QString("</%1>").arg(section_name);
281 }
282 
284  uint indent_level, uint chan) const
285 {
286  QString indent_0 = xml_indent(indent_level);
287  QString indent_1 = xml_indent(indent_level + 1);
288  QString str = QString("%1<Channel %2\n%3descriptors_length=\"%4\">\n")
289  .arg(indent_0)
290  .arg(XMLChannelValues(indent_level + 1, chan))
291  .arg(indent_1)
292  .arg(DescriptorsLength(chan));
293 
294  vector<const unsigned char*> desc =
296  for (size_t i = 0; i < desc.size(); i++)
297  {
298  str += MPEGDescriptor(desc[i], 300)
299  .toStringXML(indent_level + 1) + "\n";
300  }
301 
302  return str + indent_0 + "</Channel>";
303 }
304 
306  uint indent_level, uint chan) const
307 {
308  QString indent_0 = xml_indent(indent_level);
309  QString str;
310 
311  str += QString("short_channel_name=\"%1\" ").arg(ShortChannelName(chan));
312  str += "\n" + indent_0;
313 
314  str += QString("modulation=\"0x%1\" modulation_desc=\"%2\" ")
315  .arg(ModulationMode(chan),2,16,QChar('0'))
316  .arg(ModulationModeString(chan));
317  str += QString("channel_tsid=\"0x%1\"")
318  .arg(ChannelTransportStreamID(chan),4,16,QChar('0'));
319  str += "\n" + indent_0;
320 
321  str += QString("program_number=\"%1\" ").arg(ProgramNumber(chan));
322  str += QString("etm_location=\"%1\" ").arg(ETMlocation(chan));
323  str += QString("access_controlled=\"%1\"")
325  str += "\n" + indent_0;
326 
327  str += QString("hidden=\"%1\" ")
328  .arg(xml_bool_to_string(IsHidden(chan)));
329  str += QString("hide_guide=\"%1\"")
330  .arg(xml_bool_to_string(IsHiddenInGuide(chan)));
331  str += "\n" + indent_0;
332 
333  str += QString("service_type=\"0x%1\" service_type_desc=\"%2\"")
334  .arg(ServiceType(chan),2,16,QChar('0'))
335  .arg(ServiceTypeString(chan));
336  str += "\n" + indent_0;
337 
338  str += QString("source_id=\"0x%1\"")
339  .arg(SourceID(chan),4,16,QChar('0'));
340 
341  return str;
342 }
343 
345  uint indent_level, uint chan) const
346 {
347  return QString("major_channel=\"%1\" minor_channel=\"%2\" ")
348  .arg(MajorChannel(chan)).arg(MinorChannel(chan)) +
349  VirtualChannelTable::XMLChannelValues(indent_level, chan);
350 }
351 
353 {
354  QString str;
355  str.append(QString(" Channel #%1 ").arg(chan));
356  str.append(QString("name(%1) %2-%3 ").arg(ShortChannelName(chan))
357  .arg(MajorChannel(chan)).arg(MinorChannel(chan)));
358  str.append(QString("mod(%1) ").arg(ModulationModeString(chan)));
359  str.append(QString("cTSID(0x%1)\n")
360  .arg(ChannelTransportStreamID(chan),4,16,QChar('0')));
361 
362  str.append(QString(" pnum(%1) ").arg(ProgramNumber(chan)));
363  str.append(QString("ETM_loc(%1) ").arg(ETMlocation(chan)));
364  str.append(QString("access_ctrl(%1) ").arg(IsAccessControlled(chan)));
365  str.append(QString("hidden(%1) ").arg(IsHidden(chan)));
366  str.append(QString("hide_guide(%1) ").arg(IsHiddenInGuide(chan)));
367  str.append(QString("service_type(%1)\n").arg(ServiceTypeString(chan)));
368 
369  str.append(QString(" source_id(%1)\n").arg(SourceID(chan)));
370  if (0 != DescriptorsLength(chan))
371  {
372  str.append(QString(" descriptors length(%1) ")
373  .arg(DescriptorsLength(chan)));
374  vector<const unsigned char*> desc =
376  str.append(QString("count:%1\n").arg(desc.size()));
377  for (size_t i = 0; i < desc.size(); i++)
378  {
379  str.append(QString(" %1\n")
380  .arg(MPEGDescriptor(desc[i]).toString()));
381  }
382  }
383  return str;
384 }
385 
387  uint indent_level, uint chan) const
388 {
389  QString channel_info = SCTEIsChannelNumberTwoPart(chan) ?
390  QString("major_channel=\"%1\" minor_channel=\"%2\" ")
391  .arg(MajorChannel(chan)).arg(MinorChannel(chan)) :
392  QString("channel_number=\"%1\" ")
393  .arg(SCTEOnePartChannel(chan));
394 
395  return channel_info +
396  VirtualChannelTable::XMLChannelValues(indent_level, chan) +
397  QString(" path_select=\"%1\" out_of_band=\"%2\"")
398  .arg(xml_bool_to_string(IsPathSelect(chan)))
399  .arg(xml_bool_to_string(IsOutOfBand(chan)));
400 }
401 
403 {
404  QString str;
405  str.append(QString(" Channel #%1 ").arg(chan));
406  str.append(QString("name(%1)").arg(ShortChannelName(chan)));
407 
408  if (SCTEIsChannelNumberTwoPart(chan))
409  {
410  str.append(QString(" %1-%2 ")
411  .arg(MajorChannel(chan)).arg(MinorChannel(chan)));
412  }
413  else
414  {
415  str.append(QString(" %1 ").arg(SCTEOnePartChannel(chan)));
416  }
417 
418  str.append(QString("mod(%1) ").arg(ModulationModeString(chan)));
419  str.append(QString("cTSID(0x%1)\n")
420  .arg(ChannelTransportStreamID(chan),4,16,QChar('0')));
421 
422  str.append(QString(" pnum(%1) ").arg(ProgramNumber(chan)));
423  str.append(QString("ETM_loc(%1) ").arg(ETMlocation(chan)));
424  str.append(QString("access_ctrl(%1) ").arg(IsAccessControlled(chan)));
425  str.append(QString("hidden(%1) ").arg(IsHidden(chan)));
426  str.append(QString("hide_guide(%1) ").arg(IsHiddenInGuide(chan)));
427  str.append(QString("service_type(%1)\n").arg(ServiceTypeString(chan)));
428 
429  str.append(QString(" source_id(%1) ").arg(SourceID(chan)));
430  str.append(QString("path_select(%1) ").arg(IsPathSelect(chan)));
431  str.append(QString("out_of_band(%1)\n").arg(IsOutOfBand(chan)));
432 
433  if (0 != DescriptorsLength(chan))
434  {
435  str.append(QString(" descriptors length(%1) ")
436  .arg(DescriptorsLength(chan)));
437  vector<const unsigned char*> desc =
439  str.append(QString("count:%1\n").arg(desc.size()));
440  for (size_t i = 0; i < desc.size(); i++)
441  str.append(QString(" %1\n")
442  .arg(MPEGDescriptor(desc[i]).toString()));
443  }
444  return str;
445 }
446 
448 {
449  QString str;
450  str.append(QString("Event Information Table\n"));
451  str.append(((PSIPTable*)(this))->toString());
452  str.append(QString(" pid(0x%1) sourceID(%2) eventCount(%3)\n")
453  .arg(tsheader()->PID()).arg(SourceID()).arg(EventCount()));
454  for (uint i = 0; i < EventCount(); i++)
455  {
456  str.append(QString(" Event #%1 ID(%2) start_time(%3) length(%4 sec)\n")
457  .arg(i,2,10).arg(EventID(i))
459  .arg(LengthInSeconds(i)));
460  str.append(QString(" ETM_loc(%1) Title(%2)\n").
461  arg(ETMLocation(i)).arg(title(i).toString()));
462  if (0 != DescriptorsLength(i))
463  {
464  vector<const unsigned char*> desc =
466  for (size_t j=0; j<desc.size(); j++)
467  str.append(QString("%1\n")
468  .arg(MPEGDescriptor(desc[j]).toString()));
469  }
470  }
471  return str;
472 }
473 
474 QString ExtendedTextTable::toString(void) const
475 {
476  QString str =
477  QString("Extended Text Table -- sourceID(%1) eventID(%2) "
478  "ettID(%3) isChannelETM(%4) isEventETM(%5)\n%6")
479  .arg(SourceID()).arg(EventID()).arg(ExtendedTextTableID())
480  .arg(IsChannelETM()).arg(IsEventETM())
481  .arg(ExtendedTextMessage().toString());
482  return str;
483 }
484 
485 int VirtualChannelTable::Find(int major, int minor) const
486 {
487  if (major>0)
488  {
489  for (uint i = 0; i < ChannelCount(); i++)
490  {
491  if ((MajorChannel(i) == (uint)major) &&
492  (MinorChannel(i) == (uint)minor))
493  return (int)i;
494  }
495  }
496  else if (minor>0)
497  {
498  for (uint i = 0; i < ChannelCount(); i++)
499  {
500  if (MinorChannel(i) == (uint)minor)
501  return (int)i;
502  }
503  }
504  return -1;
505 }
506 
508 {
509  if ((i >= ChannelCount()) || DescriptorsLength(i) == 0)
510  return QString();
511 
512  vector<const unsigned char*> parsed =
514 
515  const unsigned char* desc =
517 
518  if (!desc)
519  return QString();
520 
522 }
523 
524 QString SystemTimeTable::toString(void) const
525 {
526  QString str =
527  QString("System Time Section GPSTime(%1) GPS2UTC_Offset(%2) ")
529  str.append(QString("DS(%3) Day(%4) Hour(%5)\n")
530  .arg(InDaylightSavingsTime())
532  .arg(HourDaylightSavingsStarts()));
533  return str;
534 }
535 
536 QString SystemTimeTable::toStringXML(uint indent_level) const
537 {
538  QString indent_0 = xml_indent(indent_level);
539  QString indent_1 = xml_indent(indent_level + 1);
540 
541  return QString(
542  "%1<SystemTimeSection system_time=\"%2\" system_time_iso=\"%3\""
543  "\n%4in_dst=\"%5\" dst_start_day=\"%6\" dst_start_hour=\"%7\""
544  "\n%8%9 />")
545  .arg(indent_0)
546  .arg(GPSRaw())
548  .arg(indent_1)
550  .arg(DayDaylightSavingsStarts()) /* day-of-month */
552  .arg(indent_1)
553  .arg(PSIPTable::XMLValues(indent_level + 1));
554 }
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:485
virtual QString XMLChannelValues(uint indent_level, uint channel) const
Definition: atsctables.cpp:305
bool InDaylightSavingsTime() const
Definition: atsctables.h:735
QString XMLChannelValues(uint indent_level, uint channel) const override
Definition: atsctables.cpp:344
uint TableCount() const
Definition: atsctables.h:114
uint ProgramNumber(uint i) const
Definition: atsctables.h:267
QString ServiceTypeString(uint i) const
Definition: atsctables.cpp:188
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:507
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:536
const unsigned char * GlobalDescriptors() const
Definition: atsctables.h:324
QString toString() const override
Definition: atsctables.cpp:474
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:200
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:524
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:447
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:781
vector< unsigned char * > _ptrs
Definition: atsctables.h:338
QString ChannelString(uint channel) const override
Definition: atsctables.cpp:402
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:757
QString toStringXML(uint indent_level) const override
Definition: atsctables.cpp:239
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:352
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:283
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:386
uint SourceID(void) const
Definition: atsctables.h:661