MythTV  master
sctetables.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
22 #include "sctetables.h"
23 #include "mythdate.h" // for xml_indent
24 
26 {
27  return QString("CarrierDefinitionSubtable number_of_carriers(%1)")
28  .arg(NumberOfCarriers()) +
29  QString(" descriptors(%1)").arg(DescriptorsCount());
30 }
31 
32 QString CarrierDefinitionSubtable::toStringXML(uint indent_level) const
33 {
34  QString indent_0 = xml_indent(indent_level);
35  QString indent_1 = xml_indent(indent_level + 1);
36  QString str = indent_0 +
37  QString("<CarrierDefinition descriptors_count=\"%2\" ")
38  .arg(DescriptorsCount());
39  str += QString("number_of_carriers=\"%1\"").arg(NumberOfCarriers());
40  str += "\n" + indent_1;
41  str += QString(R"(spacing_unit="%1" spacing_unit_hz="%2")")
42  .arg(SpacingUnit()).arg(SpacingUnitHz());
43  str += "\n" + indent_1;
44  str += QString(R"(frequency_spacing="%1" frequency_spacing_hz="%2")")
45  .arg(FrequencySpacing()).arg(FrequencySpacingHz());
46  str += "\n" + indent_1;
47  str += QString(R"(frequency_unit="%1" frequency_unit_hz="%2")")
48  .arg(FrequencyUnit()).arg(FrequencyUnitHz());
49  str += "\n" + indent_1;
50  str += QString("first_carrier_frequency=\"%1\" "
51  "first_carrier_frequency_hz=\"%2\">\n")
52  .arg(FirstCarrierFrequency())
54 
55  vector<const unsigned char*> desc =
57  for (auto & d : desc)
58  {
59  str += MPEGDescriptor(d, 300)
60  .toStringXML(indent_level + 1) + "\n";
61  }
62  return str + indent_0 + "</CarrierDefinition>";
63 }
64 
66 {
67  switch (TransmissionSystem())
68  {
69  case kTSUnknown: return "Unknown";
70  case kTSITUAnnexA: return "Annex A (8 Mhz Global QAM)";
71  case kTSITUAnnexB: return "Annex B (6 Mhz US QAM)";
72  case kTSITUQPSK: return "ITU 1211 (QPSK Satelite)";
73  case kTSATSC: return "ATSC";
74  case kTSDigiCipher: return "DigiCipher II";
75  default: return QString("Reserved(%1)").arg(TransmissionSystem());
76  }
77 }
78 
80 {
81  switch (InnerCodingMode())
82  {
83  case kRate5_11Coding: return "5/11";
84  case kRate1_2Coding: return "1/2";
85  case kRate3_5Coding: return "3/5";
86  case kRate2_3Coding: return "2/3";
87  case kRate3_4Coding: return "3/4";
88  case kRate4_5Coding: return "4/5";
89  case kRate5_6Coding: return "5/6";
90  case kRate7_8Coding: return "7/8";
91  case kNone: return "None";
92  default: return QString("Reserved(%1)").arg(InnerCodingMode());
93  }
94 }
95 
97 {
98  switch (ModulationFormat())
99  {
100  case kUnknown: return "Unknown";
101  case kQPSK: return "QPSK";
102  case kBPSK: return "BPSK";
103  case kOQPSK: return "OQPSK";
104  case kVSB8: return "8-VSB";
105  case kVSB16: return "16-VSB";
106  case kQAM16: return "QAM-16";
107  case kQAM32: return "QAM-32";
108  case kQAM64: return "QAM-64";
109  case kQAM80: return "QAM-80";
110  case kQAM96: return "QAM-96";
111  case kQAM112: return "QAM-112";
112  case kQAM128: return "QAM-128";
113  case kQAM160: return "QAM-160";
114  case kQAM192: return "QAM-192";
115  case kQAM224: return "QAM-224";
116  case kQAM256: return "QAM-256";
117  case kQAM320: return "QAM-320";
118  case kQAM384: return "QAM-384";
119  case kQAM448: return "QAM-448";
120  case kQAM512: return "QAM-512";
121  case kQAM640: return "QAM-640";
122  case kQAM768: return "QAM-768";
123  case kQAM896: return "QAM-896";
124  case kQAM1024: return "QAM-1024";
125  default: return QString("Reserved(%1)").arg(ModulationFormat());
126  }
127 }
128 
130 {
131  return "ModulationMode";
132 }
133 
134 QString ModulationModeSubtable::toStringXML(uint indent_level) const
135 {
136  QString indent_0 = xml_indent(indent_level);
137  QString indent_1 = xml_indent(indent_level + 1);
138  QString str = indent_0 +
139  QString("<ModulationMode descriptors_count=\"%2\"")
140  .arg(DescriptorsCount());
141  str += "\n" + indent_1;
142  str += QString(R"(transmission_system="%1" transmission_system_desc="%2")")
144  str += "\n" + indent_1;
145  str += QString(R"(inner_coding_mode="%1" inner_coding_mode_desc="%2")")
146  .arg(InnerCodingMode()).arg(InnerCodingModeString());
147  str += "\n" + indent_1;
148  str += QString("split_bitstream_mode=\"%1\" ")
150  str += QString("symbol_rate=\"%1\"").arg(SymbolRate());
151 
152  vector<const unsigned char*> desc =
154 
155  if (desc.empty())
156  return str + " />";
157 
158  str += ">\n";
159  for (auto & d : desc)
160  {
161  str += MPEGDescriptor(d, 300)
162  .toStringXML(indent_level + 1) + "\n";
163  }
164 
165  return str + indent_0 + "</ModulationMode>";
166 }
167 
169 {
170  m_ptrs.clear();
171 
174  {
175  uint offset = (kCarrierDefinitionSubtable == TableSubtype()) ? 6 : 7;
176  const unsigned char *next = pesdata() + 7;
177  for (uint i = 0; i < NumberOfRecords(); i++)
178  {
179  m_ptrs.push_back(next);
180  uint desc_count = next[offset-1];
181  next += offset;
182  for (uint j = 0; j < desc_count; j++)
183  {
184  MPEGDescriptor desc(next);
185  if (!desc.IsValid())
186  {
187  m_ptrs.clear();
188  return false;
189  }
190  next += desc.size();
191  }
192  }
193  m_ptrs.push_back(next);
194  return true;
195  }
196 
197  return false;
198 }
199 
201 {
202  QString str = QString("Network Information Section (SCTE) crc(0x%1)\n")
203  .arg(CRC(),8,16,QChar('0'));
204  str += QString("first_index(%1) number_of_records(%2) table_subtype(%3)\n")
205  .arg(FirstIndex()).arg(NumberOfRecords()).arg(TableSubtype());
207  {
208  for (uint i = 0; i < NumberOfRecords(); i++)
209  str += CarrierDefinition(i).toString() + "\n";
210  }
212  {
213  for (uint i = 0; i < NumberOfRecords(); i++)
214  str += ModulationMode(i).toString() + "\n";
215  }
216 
217  return str;
218 }
219 
221 {
222  QString indent_0 = xml_indent(indent_level);
223  QString indent_1 = xml_indent(indent_level + 1);
224 
225  QString str = indent_0 + "<SCTENetworkInformationSection psip=\"scte\" ";
226  str += QString("transmission_medium=\"%1\" ").arg(TransmissionMedium());
227  str += QString("first_index=\"%1\" ").arg(FirstIndex());
228  str += "\n" + indent_1;
229  str += QString("number_of_records=\"%1\" ").arg(NumberOfRecords());
230  str += QString("table_subtype=\"%1\"").arg(TableSubtype());
231  str += PSIPTable::XMLValues(indent_level + 1) + ">\n";
232 
234  {
235  for (uint i = 0; i < NumberOfRecords(); i++)
236  str += CarrierDefinition(i).toStringXML(indent_level + 1) + "\n";
237  }
239  {
240  for (uint i = 0; i < NumberOfRecords(); i++)
241  str += ModulationMode(i).toStringXML(indent_level + 1) + "\n";
242  }
243 
244  vector<const unsigned char*> desc =
246  for (auto & d : desc)
247  {
248  str += MPEGDescriptor(d, 300)
249  .toStringXML(indent_level + 1) + "\n";
250  }
251 
252  return str + indent_0 + "</SCTENetworkInformationSection>";
253 }
254 
256 
257 void NetworkTextTable::Parse(void) const
258 {
259  // TODO
260 }
261 
262 QString NetworkTextTable::toString(void) const
263 {
264  // TODO
265  return QString("Network Text Section crc(0x%1)\n")
266  .arg(CRC(),8,16,QChar('0'));
267 }
268 
269 QString NetworkTextTable::toStringXML(uint indent_level) const
270 {
271  QString indent_0 = xml_indent(indent_level);
272 
273  QString str = indent_0 + "<NetworkTextSection ";
274  str += QString("iso_639_language_code=\"%1\" ").arg(LanguageString());
275  str += QString("transmission_medium=\"%1\" ").arg(TransmissionMedium());
276  str += QString("table_subtype=\"%1\"").arg(TableSubtype());
277  return str + " />";
278 
279 /*
280  str += ">\n";
281  vector<const unsigned char*> desc =
282  MPEGDescriptor::Parse(Descriptors(), DescriptorsLength());
283  for (uint i = 0; i < desc.size(); i++)
284  {
285  str += MPEGDescriptor(desc[i], 300)
286  .toStringXML(indent_level + 1) + "\n";
287  }
288 
289  return str + indent_0 + "</NetworkTextSection>";
290 */
291 }
292 
294 
296 {
297  m_ptrs.clear();
298 
300  {
301  m_ptrs.push_back(pesdata() + DefinedChannelsMap().Size() + 7);
302  }
303  else if (kVirtualChannelMap == TableSubtype())
304  {
305  bool descriptors_included = (pesdata()[7] & 0x20) != 0;
306  uint number_of_vc_records = pesdata()[13];
307  const unsigned char *next = pesdata() + 14;
308  const unsigned char *end = pesdata()+Length();
309  bool ok = true;
310 
311  if (!descriptors_included)
312  {
313  for (uint i = 0; i < number_of_vc_records && ok; i++)
314  {
315  if (next + 10 >= end)
316  {
317  ok = false;
318  break;
319  }
320  m_ptrs.push_back(next);
321  next += 9;
322  }
323  m_ptrs.push_back(next);
324  }
325  else
326  {
327  for (uint i = 0; i < number_of_vc_records; i++)
328  {
329  m_ptrs.push_back(next);
330  uint desc_count = next[10];
331  next += 10;
332  for (uint j = 0; j < desc_count; j++)
333  {
334  if (next >= end)
335  {
336  ok = false;
337  break;
338  }
339  MPEGDescriptor desc(next, end-next);
340  if (!desc.IsValid())
341  {
342  m_ptrs.clear();
343  return false;
344  }
345  next += desc.size();
346  }
347  }
348  }
349  m_ptrs.push_back(next);
350  if (!ok || next >= end)
351  {
352  m_ptrs.clear();
353  return false;
354  }
355  }
356  else if (kInverseChannelMap == TableSubtype())
357  {
358  m_ptrs.push_back(pesdata() + InverseChannelMap().Size() + 7);
359  }
360  else
361  {
362  return false;
363  }
364 
365  return true;
366 }
367 
369 {
370  QString indent_0 = xml_indent(indent_level);
371  QString indent_1 = xml_indent(indent_level + 1);
372  QString str = indent_0 + "<DefinedChannelsMap ";
373  str += QString("first_virtual_channel=\"%1\" ")
374  .arg(FirstVirtualChannel());
375  str += QString("dcm_data_length=\"%1\">\n")
376  .arg(DCMDataLength());
377 
378  for (uint i = 0; i < DCMDataLength(); i++)
379  {
380  str += indent_1 + QString("<Range range_defined=\"%1\"%2 "
381  "channels_count=\"%3\" />\n")
383  .arg(RangeDefined(i) ? " " : "")
384  .arg(ChannelsCount(i));
385  }
386 
387  return str + indent_0 + "</DefinedChannelsMap>";
388 }
389 
391 {
392  switch (VideoStandard(i))
393  {
394  case kNTSC: return "NTSC";
395  case kPAL625: return "PAL-625";
396  case kPAL525: return "PAL-525";
397  case kSECAM: return "SECAM";
398  case kMAC: return "MAC";
399  default: return QString("Reserved(%1)").arg(VideoStandard(i));
400  }
401 }
402 
403 QString VirtualChannelMapSubtable::toStringXML(uint indent_level) const
404 {
405  QString indent_0 = xml_indent(indent_level);
406  QString indent_1 = xml_indent(indent_level + 1);
407  QString indent_2 = xml_indent(indent_level + 2);
408  QString str = indent_0 + "<DefinedChannelsMap ";
409  str += QString("number_of_vc_records=\"%1\"")
410  .arg(NumberOfVCRecords());
411  str += "\n" + indent_1;
412  str += QString("descriptors_included=\"%1\" ")
414  str += QString("splice=\"%1\" ")
415  .arg(xml_bool_to_string(Splice()));
416  str += "\n" + indent_1;
417  str += QString(R"(activation_time="%1" actication_time_desc="%2")")
418  .arg(ActivationTimeRaw())
420  str += ">\n";
421 
422  for (uint i = 0; i < NumberOfVCRecords(); i++)
423  {
424  str += indent_1 + "<Channel ";
425  str += QString("virtual_channel_number=\"%1\" ")
426  .arg(VirtualChannelNumber(i));
427  str += "\n" + indent_2;
428  str += QString("application_virtual_channel=\"%1\" ")
430  str += QString("path_select=\"%1\" ").arg(PathSelect(i));
431  str += "\n" + indent_2;
432  str += QString(R"(transport_type="%1" transport_type_desc="%2" )")
433  .arg(TransportType(i)).arg(TransportTypeString(i));
434  str += "\n" + indent_2;
435  str += QString(R"(channel_type="%1" channel_type_desc="%2" )")
436  .arg(ChannelType(i)).arg(ChannelTypeString(i));
438  str += QString("application_id=\"%1\" ").arg(ApplicationID(i));
439  else
440  str += QString("source_id=\"%1\" ").arg(SourceID(i));
441  str += "\n" + indent_2;
442  if (kMPEG2Transport == TransportType(i))
443  {
444  str += QString("cds_reference=\"%1\" ").arg(CDSReference(i));
445  str += QString("program_number=\"%1\" ").arg(ProgramNumber(i));
446  str += QString("mms_reference=\"%1\" ").arg(MMSReference(i));
447  }
448  else
449  {
450  str += QString("cds_reference=\"%1\" ").arg(CDSReference(i));
451  str += QString("scrampled=\"%1\" ").arg(static_cast<int>(Scrambled(i)));
452  str += "\n" + indent_2;
453  str += QString(R"(video_standard="%1" video_standard_desc="%2" )")
454  .arg(VideoStandard(i)).arg(VideoStandardString(i));
455  }
456  if (!DescriptorsIncluded())
457  {
458  str += "/>\n";
459  continue;
460  }
461 
462  str += "\n" + indent_2;
463  str += QString("descriptors_count=\"%1\"").arg(DescriptorsCount(i));
464  str += ">\n";
465 
466  vector<const unsigned char*> desc =
468  for (auto & d : desc)
469  {
470  str += MPEGDescriptor(d, 300)
471  .toStringXML(indent_level + 2) + "\n";
472  }
473  str += indent_1 + "</Channel>";
474  }
475 
476  return str + indent_0 + "</DefinedChannelsMap>";
477 }
478 
479 QString InverseChannelMapSubtable::toStringXML(uint indent_level) const
480 {
481  QString indent_0 = xml_indent(indent_level);
482  QString indent_1 = xml_indent(indent_level + 1);
483  QString str = indent_0 + "<InverseChannelMap ";
484  str += QString("first_map_index=\"%1\" ")
485  .arg(FirstMapIndex());
486  str += QString("record_count=\"%1\">\n")
487  .arg(RecordCount());
488 
489  for (uint i = 0; i < RecordCount(); i++)
490  {
491  str += indent_1 + QString("<Map source_id=\"%1\" "
492  "virtual_channel_number=\"%2\" />\n")
493  .arg(SourceID(i)).arg(VirtualChannelNumber(i));
494  }
495 
496  return str + indent_0 + "</InverseChannelMap>";
497 }
498 
500 {
501  switch (TableSubtype())
502  {
503  case kVirtualChannelMap: return "Virtual Channel Map";
504  case kDefinedChannelsMap: return "Defined Channels Map";
505  case kInverseChannelMap: return "Inverse Channel Map";
506  default: return QString("Reserved(%1)").arg(TableSubtype());
507  }
508 }
509 
511 {
512  // TODO
513  return QString("Short Virtual Channel Section ID(%1) crc(0x%2)\n")
514  .arg(ID()).arg(CRC(),8,16,QChar('0'));
515 }
516 
517 QString ShortVirtualChannelTable::toStringXML(uint indent_level) const
518 {
519  QString indent_0 = xml_indent(indent_level);
520  QString indent_1 = xml_indent(indent_level + 1);
521  QString str = indent_0 +
522  QString("<ShortVirtualChannelSection vct_id=\"%1\" ").arg(ID());
523  str += QString("transmission_medium=\"%1\" ").arg(TransmissionMedium());
524  str += "\n" + indent_1;
525  str += QString(R"(table_subtype="%1" table_subtype_desc="%2")")
526  .arg(TableSubtype()).arg(TableSubtypeString());
527  str += "\n" + indent_1 + PSIPTable::XMLValues(indent_level + 1) + ">\n";
528 
530  str += DefinedChannelsMap().toStringXML(indent_level + 1) + "\n";
531  else if (kVirtualChannelMap == TableSubtype())
532  str += VirtualChannelMap().toStringXML(indent_level + 1) + "\n";
533  else if (kInverseChannelMap == TableSubtype())
534  str += InverseChannelMap().toStringXML(indent_level + 1) + "\n";
535 
536  vector<const unsigned char*> desc =
538  for (auto & d : desc)
539  {
540  str += MPEGDescriptor(d, 300)
541  .toStringXML(indent_level + 1) + "\n";
542  }
543 
544  return str + indent_0 + "</ShortVirtualChannelSection>";
545 }
546 
548 
549 QString SCTESystemTimeTable::toString(void) const
550 {
551  QString str =
552  QString("SystemTimeSection (SCTE) raw(%1) GPS_UTC_Offset(%2) utc(%3_")
553  .arg(SystemTimeRaw()).arg(GPSUTCOffset())
555  return str;
556 }
557 
558 QString SCTESystemTimeTable::toStringXML(uint indent_level) const
559 {
560  QString indent_0 = xml_indent(indent_level);
561  QString indent_1 = xml_indent(indent_level + 1);
562  QString str = indent_0 +
563  QString("<SCTESystemTimeSection system_time=\"%1\" "
564  "gps_utc_offset=\"%2\"\n%3utc_time_desc=\"%4\" psip=\"scte\"")
565  .arg(SystemTimeRaw()).arg(GPSUTCOffset())
566  .arg(indent_1)
568 
569  if (!DescriptorsLength())
570  return str + " />";
571 
572  str += ">\n";
573 
574  vector<const unsigned char*> desc =
576  for (auto & d : desc)
577  {
578  str += MPEGDescriptor(d, 300)
579  .toStringXML(indent_level + 1) + "\n";
580  }
581 
582  return str + indent_0 + "</SCTESystemTimeSection>";
583 }
584 
586 
588 {
589  // TODO
590  return "Aggregate Data Event Section\n";
591 }
592 
593 QString AggregateDataEventTable::toStringXML(uint /*indent_level*/) const
594 {
595  // TODO
596  return "<AggregateDataEventSection />";
597 }
uint GPSUTCOffset(void) const
Definition: sctetables.h:620
const unsigned char * pesdata() const
Definition: pespacket.h:157
uint SourceID(uint i) const
Definition: sctetables.h:484
uint FirstMapIndex(void) const
Definition: sctetables.h:478
uint DescriptorsCount(void) const
Definition: sctetables.h:73
uint SpacingUnitHz(void) const
Definition: sctetables.h:56
uint Length() const
Definition: pespacket.h:92
uint TransmissionSystem(void) const
Definition: sctetables.h:107
QString toStringXML(uint indent_level) const
Definition: sctetables.cpp:32
uint TransmissionMedium(void) const
Definition: sctetables.h:290
uint TransmissionMedium(void) const
Definition: sctetables.h:523
uint DescriptorsLength(void) const
Definition: sctetables.h:241
uint InnerCodingMode(void) const
Definition: sctetables.h:130
QString VideoStandardString(uint i) const
Definition: sctetables.cpp:390
QDateTime ActivationTimeUTC(uint offset=0) const
Definition: sctetables.h:373
uint DescriptorsLength(void) const
Definition: sctetables.h:622
uint DescriptorsLength(void) const
Definition: sctetables.h:77
uint FrequencyUnit(void) const
Definition: sctetables.h:64
uint VirtualChannelNumber(uint i) const
Definition: sctetables.h:389
const unsigned char * Descriptors(void) const
Definition: sctetables.h:553
QString toString(MarkTypes type)
uint SymbolRate(void) const
Definition: sctetables.h:169
QString TableSubtypeString(void) const
Definition: sctetables.cpp:499
QString toString(void) const
SCTE System information tables.
Definition: sctetables.cpp:25
QString toStringXML(uint indent_level) const override
Definition: sctetables.cpp:593
uint FrequencyUnitHz(void) const
Definition: sctetables.h:65
uint DCMDataLength(void) const
Definition: sctetables.h:335
bool DescriptorsIncluded(void) const
Definition: sctetables.h:359
QString toStringXML(uint indent_level) const
Definition: sctetables.cpp:368
QString toStringXML(uint indent_level) const override
Definition: sctetables.cpp:558
bool Scrambled(uint i) const
Definition: sctetables.h:439
uint DescriptorsLength(void) const
Definition: sctetables.h:551
vector< const unsigned char * > m_ptrs
Definition: sctetables.h:251
uint DescriptorsCount(void) const
Definition: sctetables.h:175
QString toString(void) const override
Definition: sctetables.cpp:200
uint RecordCount(void) const
Definition: sctetables.h:481
uint NumberOfVCRecords(void) const
Definition: sctetables.h:384
uint PathSelect(uint i) const
Definition: sctetables.h:400
CarrierDefinitionSubtable CarrierDefinition(uint i) const
Definition: sctetables.h:231
uint SpacingUnit(void) const
Definition: sctetables.h:55
VirtualChannelMapSubtable VirtualChannelMap(void) const
Definition: sctetables.h:541
uint size(void) const
ModulationModeSubtable ModulationMode(uint i) const
Definition: sctetables.h:234
QString toString(void) const override
Definition: sctetables.cpp:510
QString toStringXML(uint indent_level) const override
Definition: sctetables.cpp:269
uint32_t SystemTimeRaw(void) const
Definition: sctetables.h:590
DefinedChannelsMapSubtable DefinedChannelsMap(void) const
Definition: sctetables.h:537
uint64_t FirstCarrierFrequencyHz(void) const
Definition: sctetables.h:69
uint FirstCarrierFrequency(void) const
Definition: sctetables.h:67
uint ChannelType(uint i) const
Definition: sctetables.h:419
uint TableSubtype(void) const
Definition: sctetables.h:532
uint ModulationFormat(void) const
Definition: sctetables.h:165
static const uint16_t * d
const unsigned char * Descriptors(void) const
Definition: sctetables.h:180
InverseChannelMapSubtable InverseChannelMap(void) const
Definition: sctetables.h:545
uint CDSReference(uint i) const
Definition: sctetables.h:431
Specified in Annex A of ITU Rec. J.83.
Definition: sctetables.h:97
Specified in Annex B of ITU Rec. J.83.
Definition: sctetables.h:98
uint DescriptorsLength(uint i) const
Definition: sctetables.h:460
const unsigned char * Descriptors(void) const
Definition: sctetables.h:624
uint VirtualChannelNumber(uint i) const
Definition: sctetables.h:487
uint ActivationTimeRaw(void) const
Definition: sctetables.h:365
uint TransmissionMedium(void) const
Definition: sctetables.h:219
uint FirstVirtualChannel(void) const
Definition: sctetables.h:331
void Parse(void) const
Definition: sctetables.cpp:257
uint DescriptorsCount(uint i) const
Definition: sctetables.h:457
unsigned int uint
Definition: compat.h:140
uint ProgramNumber(uint i) const
Definition: sctetables.h:433
uint ChannelsCount(uint i) const
Definition: sctetables.h:340
uint TransportType(uint i) const
Definition: sctetables.h:409
QString toStringXML(uint indent_level) const
Definition: sctetables.cpp:479
QString toString(void) const override
Definition: sctetables.cpp:262
bool RangeDefined(uint i) const
Definition: sctetables.h:338
uint CRC(void) const
Definition: pespacket.h:182
uint ID(void) const
Definition: sctetables.h:535
uint DescriptorsLength(void) const
Definition: sctetables.h:179
ITU-R Rec. BO.1211:1995 (QPSK)
Definition: sctetables.h:99
QString ChannelTypeString(uint i) const
Definition: sctetables.h:420
const unsigned char * Descriptors(void) const
Definition: sctetables.h:78
QString TransmissionSystemString(void) const
Definition: sctetables.cpp:65
QString toString(void) const override
Definition: sctetables.cpp:549
PictureAttribute next(PictureAttributeSupported Supported, PictureAttribute Attribute)
QString XMLValues(uint indent_level) const
Definition: mpegtables.cpp:786
QString InnerCodingModeString(void) const
Definition: sctetables.cpp:79
bool SplitBitstreamMode(void) const
Definition: sctetables.h:133
QString toStringXML(uint indent_level) const
Definition: sctetables.cpp:134
uint VideoStandard(uint i) const
Definition: sctetables.h:451
QString toString(void) const override
Definition: sctetables.cpp:587
uint SourceID(uint i) const
Definition: sctetables.h:427
QString toStringXML(uint indent_level) const
Definition: sctetables.cpp:403
uint ApplicationID(uint i) const
Definition: sctetables.h:424
QString LanguageString(void) const
Definition: sctetables.h:283
bool ApplicationVirtualChannel(uint i) const
Definition: sctetables.h:392
bool Splice(void) const
Definition: sctetables.h:362
uint TableSubtype(void) const
Definition: sctetables.h:228
Default UTC.
Definition: mythdate.h:14
static QString xml_bool_to_string(bool val)
Definition: mythmiscutil.h:60
QString ModulationFormatString(void) const
Definition: sctetables.cpp:96
static QString toString(void)
Definition: sctetables.cpp:129
bool IsValid(void) const
QDateTime SystemTimeUTC(void) const
Definition: sctetables.h:605
uint TableSubtype(void) const
Definition: sctetables.h:298
uint NumberOfCarriers(void) const
Definition: sctetables.h:48
virtual QString toStringXML(uint indent_level) const
Returns XML representation of string the TS Reader XML format.
QString toStringXML(uint indent_level) const override
Definition: sctetables.cpp:220
const unsigned char * Descriptors(void) const
Definition: sctetables.h:243
uint FirstIndex(void) const
Definition: sctetables.h:215
const unsigned char * Descriptors(uint i) const
Definition: sctetables.h:461
QString toStringXML(uint indent_level) const override
Definition: sctetables.cpp:517
uint NumberOfRecords(void) const
Definition: sctetables.h:217
static desc_list_t Parse(const unsigned char *data, uint len)
from SCTE 57 – DigiCipher II
Definition: sctetables.h:101
QString TransportTypeString(uint i) const
Definition: sctetables.h:410
uint FrequencySpacingHz(void) const
Definition: sctetables.h:61
vector< const unsigned char * > m_ptrs
Definition: sctetables.h:562
QString xml_indent(uint level)
uint FrequencySpacing(void) const
Definition: sctetables.h:59
uint MMSReference(uint i) const
Definition: sctetables.h:435