MythTV  master
dvbdescriptors.cpp
Go to the documentation of this file.
1 // For windows, force the second argument of `iconv' to non-const.
2 #define WINICONV_CONST
3 
4 // C headers
5 #include <iconv.h>
6 #include <unistd.h>
7 #include <algorithm>
8 #include <cerrno>
9 
10 // Qt headers
11 #include <QCoreApplication>
12 
13 // MythTV headers
14 #include "dvbdescriptors.h"
15 #include "iso6937tables.h"
16 #include "freesat_huffman.h"
19 
20 // Decode a text string according to
21 // Draft ETSI EN 300 468 V1.16.1 (2019-05)
22 // Digital Video Broadcasting (DVB);
23 // Specification for Service Information (SI) in DVB systems
24 // Annex A (normative): Coding of text characters
25 
26 static QString decode_iso6937(const unsigned char *buf, uint length)
27 {
28  // ISO/IEC 6937 to unicode (UCS2) convertor...
29  // This is a composed encoding - accent first then plain character
30  QString result = "";
31  ushort ch = 0x20;
32  for (uint i = 0; (i < length) && buf[i]; i++)
33  {
34  if (ch == 0xFFFF)
35  {
36  // Process second byte of two byte character
37  const iso6937table * foo = iso6937table_secondary[buf[i-1]];
38  ch = (*foo)[buf[i]];
39  if (ch == 0xFFFF)
40  {
41  // If no valid code found in secondary table,
42  // reprocess this second byte as first byte.
43  ch = iso6937table_base[buf[i]];
44  if (ch == 0xFFFF)
45  continue; // process second byte
46  }
47  }
48  else
49  {
50  // Process first character of two possible characters.
51  // double byte characters have a sentinel (0xffff) in this table.
52  ch = iso6937table_base[buf[i]];
53  if (ch == 0xFFFF)
54  continue; // process second byte
55 
56  }
57  result += QChar(ch);
58  }
59  return result;
60 }
61 
62 // Set up a context for iconv, and call it repeatedly until finished.
63 // The iconv function stops whenever an unknown character is seen in
64 // the input stream. Handle inserting a � character and continuing, so
65 // that the resulting output is the same as QTextCodec::toUnicode.
66 static QString iconv_helper(int which, char *buf, size_t length)
67 {
68  QString codec = QString("iso-8859-%1").arg(which);
69  iconv_t conv = iconv_open("utf-16", qPrintable(codec));
70  if (conv == (iconv_t) -1)
71  return "";
72 
73  // Allocate room for the output, including space for the Byte
74  // Order Mark.
75  size_t outmaxlen = length * 2 + 2;
76  QByteArray outbytes;
77  outbytes.resize(outmaxlen);
78  char *outp = outbytes.data();
79  size_t outremain = outmaxlen;
80 
81  // Conversion loop
82  while (length > 0)
83  {
84  size_t ret = iconv(conv, &buf, &length, &outp, &outremain);
85  if (ret == size_t(-1))
86  {
87  if (errno == EILSEQ)
88  {
89  buf++; length -= 1;
90  // Invalid Unicode character. Stuff a U+FFFD �
91  // replacement character into the output like Qt.
92  // Need to check the Byte Order Mark U+FEFF set by
93  // iconv and match the ordering being used. (This
94  // doesn't necessarily follow HAVE_BIGENDIAN.)
95  if (outbytes[0] == static_cast<char>(0xFE))
96  { // Big endian
97  *outp++ = 0xFF; *outp++ = 0xFD;
98  }
99  else
100  {
101  *outp++ = 0xFD; *outp++ = 0xFF;
102  }
103  outremain -= 2;
104  }
105  else
106  {
107  // Invalid or incomplete multibyte character in
108  // input. Should never happen when converting from
109  // iso-8859.
110  length = 0;
111  }
112  }
113  }
114 
115  // Remove the Byte Order Mark for compatability with
116  // QTextCodec::toUnicode. Do not replace the ::fromUtf16 call with
117  // the faster QString constructor, as the latter doesn't read the
118  // BOM and convert the string to host byte order.
119  QString result =
120  QString::fromUtf16(reinterpret_cast<char16_t*>(outbytes.data()),
121  (outmaxlen-outremain)/2);
122 
123  iconv_close(conv);
124  return result;
125 }
126 
127 static QString decode_text(const unsigned char *buf, uint length);
128 
129 // Decode a text string according to ETSI EN 300 468 Annex A
130 QString dvb_decode_text(const unsigned char *src, uint raw_length,
131  const enc_override &encoding_override)
132 {
133  if (!raw_length)
134  return "";
135 
136  if (src[0] == 0x1f)
137  return freesat_huffman_to_string(src, raw_length);
138 
139  /* UCS-2 aka ISO/IEC 10646-1 Basic Multilingual Plane */
140  if (src[0] == 0x11)
141  {
142  size_t length = (raw_length - 1) / 2;
143  auto *to = new QChar[length];
144  for (size_t i=0; i<length; i++)
145  to[i] = QChar((src[1 + i*2] << 8) + src[1 + i*2 + 1]);
146  QString to2(to, length);
147  delete [] to;
148  return to2;
149  }
150 
151  if (((0x11 < src[0]) && (src[0] < 0x15)) ||
152  ((0x15 < src[0]) && (src[0] < 0x1f)))
153  {
154  // TODO: Handle multi-byte encodings
155  LOG(VB_SIPARSER, LOG_ERR,
156  "dvb_decode_text: Multi-byte coded text is not yet supported.");
157  return "";
158  }
159 
160  // UTF-8 encoding of ISO/IEC 10646
161  if (src[0] == 0x15)
162  {
163  return decode_text(src, raw_length);
164  }
165 
166  // if a override encoding is specified and the default ISO 6937 encoding
167  // would be used copy the override encoding in front of the text
168  auto *dst = new unsigned char[raw_length + encoding_override.size()];
169 
170  uint length = 0;
171  if (!encoding_override.empty() && (src[0] >= 0x20)) {
172  std::copy(encoding_override.cbegin(), encoding_override.cend(), dst);
173  length = encoding_override.size();
174  }
175 
176  // Strip formatting characters
177  for (uint i = 0; i < raw_length; i++)
178  {
179  if ((src[i] < 0x80) || (src[i] > 0x9F))
180  {
181  dst[length++] = src[i];
182  // replace CR/LF with a space
183  }
184  else if (src[i] == 0x8A)
185  {
186  dst[length++] = 0x20;
187  }
188  }
189 
190  // Exit on empty string, sans formatting.
191 
192  QString sStr = (!length) ? "" : decode_text(dst, length);
193 
194  delete [] dst;
195 
196  return sStr;
197 }
198 
199 static QString decode_text(const unsigned char *buf, uint length)
200 {
201  // Decode using the correct text codec
202  if (buf[0] >= 0x20)
203  {
204  return decode_iso6937(buf, length);
205  }
206  if ((buf[0] >= 0x01) && (buf[0] <= 0x0B))
207  {
208  return iconv_helper(4 + buf[0], (char*)(buf + 1), length - 1);
209  }
210  if ((buf[0] == 0x10) && (length >= 3))
211  {
212  // If the first byte of the text field has a value "0x10"
213  // then the following two bytes carry a 16-bit value (uimsbf) N
214  // to indicate that the remaining data of the text field is
215  // coded using the character code table specified by
216  // ISO Standard 8859, parts 1 to 9
217 
218  uint code = buf[1] << 8 | buf[2];
219  if (code <= 15)
220  return iconv_helper(code, (char*)(buf + 3), length - 3);
221  return QString::fromLocal8Bit((char*)(buf + 3), length - 3);
222  }
223  if (buf[0] == 0x15) // Already Unicode
224  {
225  return QString::fromUtf8((char*)(buf + 1), length - 1);
226  }
227 
228  // Unknown/invalid encoding - assume local8Bit
229  return QString::fromLocal8Bit((char*)(buf + 1), length - 1);
230 }
231 
232 
233 QString dvb_decode_short_name(const unsigned char *src, uint raw_length)
234 {
235  if (raw_length > 50)
236  {
237  LOG(VB_SIPARSER, LOG_WARNING,
238  QString("dvb_decode_short_name: name is %1 chars "
239  "long. Unlikely to be a short name.")
240  .arg(raw_length));
241  return "";
242  }
243 
244  if (((0x10 < src[0]) && (src[0] < 0x15)) ||
245  ((0x15 < src[0]) && (src[0] < 0x20)))
246  {
247  // TODO: Handle multi-byte encodings
248  LOG(VB_SIPARSER, LOG_ERR, "dvb_decode_short_name: "
249  "Multi-byte coded text is not yet supported.");
250  return "";
251  }
252 
253  auto *dst = new unsigned char[raw_length];
254  uint length = 0;
255 
256  // check for emphasis control codes
257  for (uint i = 0; i < raw_length; i++)
258  {
259  if (src[i] == 0x86)
260  {
261  while ((++i < raw_length) && (src[i] != 0x87))
262  {
263  if ((src[i] < 0x80) || (src[i] > 0x9F))
264  {
265  dst[length++] = src[i];
266  }
267  // replace CR/LF with a space
268  else if (src[i] == 0x8A)
269  {
270  dst[length++] = 0x20;
271  }
272  }
273  }
274  }
275 
276  QString sStr = (!length) ? dvb_decode_text(src, raw_length)
277  : decode_text(dst, length);
278 
279  delete [] dst;
280 
281  return sStr;
282 }
283 
285 QMap<uint,QString> ContentDescriptor::s_categoryDesc;
286 volatile bool ContentDescriptor::s_categoryDescExists = false;
287 
289 {
290  if (0x1 == Nibble1(i))
292  if (0x4 == Nibble1(i))
295 }
296 
297 const std::array<const std::string,14> linkage_types
298 {
299  "Reserved(0x00)",
300  "Information Service",
301  "EPG Service",
302  "CA Replacement Service",
303  "TS Containing Complete Network/Bouquet SI",
304  "Service Replacement Service",
305  "Data Broadcast Service",
306  "RCS Map",
307  "Mobile Hand-Over",
308  "System Software Update Service",
309  "TS Containing SSU, BAT or NIT",
310  "IP/MAC Notification Service",
311  "TS Containing INT, BAT or NIT",
312  "Event Linkage",
313 };
314 
315 
317 {
318  if (LinkageType() < linkage_types.size())
319  return QString::fromStdString(linkage_types[LinkageType()]);
320  if ((LinkageType() <= 0x7f) || (LinkageType() == 0xff))
321  return QString("Reserved(0x%1)").arg(LinkageType(),2,16,QChar('0'));
322  return QString("User Defined(0x%1)").arg(LinkageType(),2,16,QChar('0'));
323 }
324 
326 {
328  return "Hand-Over to an Identical Service";
330  return "Hand-Over to a Local Variation";
332  return "Hand-over to an Associated Service";
333  return "Reserved";
334 }
335 
337 {
339  Init();
340 
341  QMutexLocker locker(&s_categoryLock);
342 
343  // Try to get detailed description
344  QMap<uint,QString>::const_iterator it = s_categoryDesc.constFind(Nibble(i));
345  if (it != s_categoryDesc.constEnd())
346  return *it;
347 
348  // Fall back to category description
349  it = s_categoryDesc.constFind(Nibble1(i)<<4);
350  if (it != s_categoryDesc.constEnd())
351  return *it;
352 
353  // Found nothing? Just return empty string.
354  return "";
355 }
356 
358 {
359  QString tmp("ContentDescriptor: ");
360  for (uint i = 0; i < Count(); i++)
362  return tmp;
363 }
364 
366 {
367  QMutexLocker locker(&s_categoryLock);
368 
370  return;
371 
372  //: %1 is the main category, %2 is the subcategory
373  QString subCatStr = QCoreApplication::translate("(Categories)",
374  "%1 - %2", "Category with subcategory display");
375 
376  s_categoryDesc[0x10] = QCoreApplication::translate("(Categories)", "Movie");
377  s_categoryDesc[0x11] = subCatStr
378  .arg(QCoreApplication::translate("(Categories)", "Movie"),
379  QCoreApplication::translate("(Categories)", "Detective/Thriller"));
380  s_categoryDesc[0x12] = subCatStr
381  .arg(QCoreApplication::translate("(Categories)", "Movie"),
382  QCoreApplication::translate("(Categories)",
383  "Adventure/Western/War"));
384  s_categoryDesc[0x13] = subCatStr
385  .arg(QCoreApplication::translate("(Categories)", "Movie"),
386  QCoreApplication::translate("(Categories)",
387  "Science Fiction/Fantasy/Horror"));
388  s_categoryDesc[0x14] = subCatStr
389  .arg(QCoreApplication::translate("(Categories)", "Movie"),
390  QCoreApplication::translate("(Categories)", "Comedy"));
391  s_categoryDesc[0x15] = subCatStr
392  .arg(QCoreApplication::translate("(Categories)", "Movie"),
393  QCoreApplication::translate("(Categories)",
394  "Soap/Melodrama/Folkloric"));
395  s_categoryDesc[0x16] = subCatStr
396  .arg(QCoreApplication::translate("(Categories)", "Movie"),
397  QCoreApplication::translate("(Categories)", "Romance"));
398  s_categoryDesc[0x17] = subCatStr
399  .arg(QCoreApplication::translate("(Categories)","Movie"),
400  QCoreApplication::translate("(Categories)",
401  "Serious/Classical/Religious/Historical Movie/Drama"));
402  s_categoryDesc[0x18] = subCatStr
403  .arg(QCoreApplication::translate("(Categories)","Movie"),
404  QCoreApplication::translate("(Categories)", "Adult",
405  "Adult Movie"));
406 
407  s_categoryDesc[0x20] = QCoreApplication::translate("(Categories)", "News");
408  s_categoryDesc[0x21] = QCoreApplication::translate("(Categories)",
409  "News/Weather Report");
410  s_categoryDesc[0x22] = QCoreApplication::translate("(Categories)",
411  "News Magazine");
412  s_categoryDesc[0x23] = QCoreApplication::translate("(Categories)",
413  "Documentary");
414  s_categoryDesc[0x24] = QCoreApplication::translate("(Categories)",
415  "Intelligent Programs");
416 
417  s_categoryDesc[0x30] = QCoreApplication::translate("(Categories)",
418  "Entertainment");
419  s_categoryDesc[0x31] = QCoreApplication::translate("(Categories)",
420  "Game Show");
421  s_categoryDesc[0x32] = QCoreApplication::translate("(Categories)",
422  "Variety Show");
423  s_categoryDesc[0x33] = QCoreApplication::translate("(Categories)",
424  "Talk Show");
425 
426  s_categoryDesc[0x40] = QCoreApplication::translate("(Categories)",
427  "Sports");
428  s_categoryDesc[0x41] = QCoreApplication::translate("(Categories)",
429  "Special Events (World Cup, World Series, etc)");
430  s_categoryDesc[0x42] = QCoreApplication::translate("(Categories)",
431  "Sports Magazines");
432  s_categoryDesc[0x43] = QCoreApplication::translate("(Categories)",
433  "Football (Soccer)");
434  s_categoryDesc[0x44] = QCoreApplication::translate("(Categories)",
435  "Tennis/Squash");
436  s_categoryDesc[0x45] = QCoreApplication::translate("(Categories)",
437  "Misc. Team Sports");
438  // not football/soccer
439  s_categoryDesc[0x46] = QCoreApplication::translate("(Categories)",
440  "Athletics");
441  s_categoryDesc[0x47] = QCoreApplication::translate("(Categories)",
442  "Motor Sport");
443  s_categoryDesc[0x48] = QCoreApplication::translate("(Categories)",
444  "Water Sport");
445  s_categoryDesc[0x49] = QCoreApplication::translate("(Categories)",
446  "Winter Sports");
447  s_categoryDesc[0x4A] = QCoreApplication::translate("(Categories)",
448  "Equestrian");
449  s_categoryDesc[0x4B] = QCoreApplication::translate("(Categories)",
450  "Martial Sports");
451 
452  s_categoryDesc[0x50] = QCoreApplication::translate("(Categories)", "Kids");
453  s_categoryDesc[0x51] = QCoreApplication::translate("(Categories)",
454  "Pre-School Children's Programs");
455  s_categoryDesc[0x52] = QCoreApplication::translate("(Categories)",
456  "Entertainment Programs for 6 to 14");
457  s_categoryDesc[0x53] = QCoreApplication::translate("(Categories)",
458  "Entertainment Programs for 10 to 16");
459  s_categoryDesc[0x54] = QCoreApplication::translate("(Categories)",
460  "Informational/Educational");
461  s_categoryDesc[0x55] = QCoreApplication::translate("(Categories)",
462  "Cartoons/Puppets");
463 
464  s_categoryDesc[0x60] = QCoreApplication::translate("(Categories)",
465  "Music/Ballet/Dance");
466  s_categoryDesc[0x61] = QCoreApplication::translate("(Categories)",
467  "Rock/Pop");
468  s_categoryDesc[0x62] = QCoreApplication::translate("(Categories)",
469  "Classical Music");
470  s_categoryDesc[0x63] = QCoreApplication::translate("(Categories)",
471  "Folk Music");
472  s_categoryDesc[0x64] = QCoreApplication::translate("(Categories)",
473  "Jazz");
474  s_categoryDesc[0x65] = QCoreApplication::translate("(Categories)",
475  "Musical/Opera");
476  s_categoryDesc[0x66] = QCoreApplication::translate("(Categories)",
477  "Ballet");
478 
479  s_categoryDesc[0x70] = QCoreApplication::translate("(Categories)",
480  "Arts/Culture");
481  s_categoryDesc[0x71] = QCoreApplication::translate("(Categories)",
482  "Performing Arts");
483  s_categoryDesc[0x72] = QCoreApplication::translate("(Categories)",
484  "Fine Arts");
485  s_categoryDesc[0x73] = QCoreApplication::translate("(Categories)",
486  "Religion");
487  s_categoryDesc[0x74] = QCoreApplication::translate("(Categories)",
488  "Popular Culture/Traditional Arts");
489  s_categoryDesc[0x75] = QCoreApplication::translate("(Categories)",
490  "Literature");
491  s_categoryDesc[0x76] = QCoreApplication::translate("(Categories)",
492  "Film/Cinema");
493  s_categoryDesc[0x77] = QCoreApplication::translate("(Categories)",
494  "Experimental Film/Video");
495  s_categoryDesc[0x78] = QCoreApplication::translate("(Categories)",
496  "Broadcasting/Press");
497  s_categoryDesc[0x79] = QCoreApplication::translate("(Categories)",
498  "New Media");
499  s_categoryDesc[0x7A] = QCoreApplication::translate("(Categories)",
500  "Arts/Culture Magazines");
501  s_categoryDesc[0x7B] = QCoreApplication::translate("(Categories)", "Fashion");
502 
503  s_categoryDesc[0x80] = QCoreApplication::translate("(Categories)",
504  "Social/Political/Economics");
505  s_categoryDesc[0x81] = QCoreApplication::translate("(Categories)",
506  "Magazines/Reports/Documentary");
507  s_categoryDesc[0x82] = QCoreApplication::translate("(Categories)",
508  "Economics/Social Advisory");
509  s_categoryDesc[0x83] = QCoreApplication::translate("(Categories)",
510  "Remarkable People");
511 
512  s_categoryDesc[0x90] = QCoreApplication::translate("(Categories)",
513  "Education/Science/Factual");
514  s_categoryDesc[0x91] = QCoreApplication::translate("(Categories)",
515  "Nature/Animals/Environment");
516  s_categoryDesc[0x92] = QCoreApplication::translate("(Categories)",
517  "Technology/Natural Sciences");
518  s_categoryDesc[0x93] = QCoreApplication::translate("(Categories)",
519  "Medicine/Physiology/Psychology");
520  s_categoryDesc[0x94] = QCoreApplication::translate("(Categories)",
521  "Foreign Countries/Expeditions");
522  s_categoryDesc[0x95] = QCoreApplication::translate("(Categories)",
523  "Social/Spiritual Sciences");
524  s_categoryDesc[0x96] = QCoreApplication::translate("(Categories)",
525  "Further Education");
526  s_categoryDesc[0x97] = QCoreApplication::translate("(Categories)",
527  "Languages");
528 
529  s_categoryDesc[0xA0] = QCoreApplication::translate("(Categories)",
530  "Leisure/Hobbies");
531  s_categoryDesc[0xA1] = QCoreApplication::translate("(Categories)",
532  "Tourism/Travel");
533  s_categoryDesc[0xA2] = QCoreApplication::translate("(Categories)",
534  "Handicraft");
535  s_categoryDesc[0xA3] = QCoreApplication::translate("(Categories)",
536  "Motoring");
537  s_categoryDesc[0xA4] = QCoreApplication::translate("(Categories)",
538  "Fitness & Health");
539  s_categoryDesc[0xA5] = QCoreApplication::translate("(Categories)", "Cooking");
540  s_categoryDesc[0xA6] = QCoreApplication::translate("(Categories)",
541  "Advertizement/Shopping");
542  s_categoryDesc[0xA7] = QCoreApplication::translate("(Categories)",
543  "Gardening");
544  // Special
545  s_categoryDesc[0xB0] = QCoreApplication::translate("(Categories)",
546  "Original Language");
547  s_categoryDesc[0xB1] = QCoreApplication::translate("(Categories)",
548  "Black & White");
549  s_categoryDesc[0xB2] = QCoreApplication::translate("(Categories)",
550  "\"Unpublished\" Programs");
551  s_categoryDesc[0xB3] = QCoreApplication::translate("(Categories)",
552  "Live Broadcast");
553  // UK Freeview custom id
554  s_categoryDesc[0xF0] = QCoreApplication::translate("(Categories)",
555  "Drama");
556 
557  s_categoryDescExists = true;
558 }
559 
561 {
562  QString str = "FrequencyListDescriptor: frequencies: ";
563 
564  for (uint i = 0; i < FrequencyCount(); i++)
565  {
566  str += QString("%1").arg(FrequencyHz(i));
567  str += (i+1 < FrequencyCount()) ? ((i+4)%10) ? ", " : ",\n " : "";
568  }
569 
570  return str;
571 }
572 
574 {
575  QString str = "";
576 
577  if (IsDTV())
578  str.append(" (TV)");
579  else if (IsDigitalAudio())
580  str.append(" (Radio)");
581  else if (IsHDTV())
582  str.append(" (HDTV)");
583  else if (IsUHDTV())
584  str.append(" (UHDTV)");
585  else if (IsTeletext())
586  str.append(" (Teletext)");
587  else
588  str.append(QString(" (Unknown 0x%1)").arg(ServiceType(),2,16,QChar('0')));
589 
590  return str;
591 }
592 
594 {
595  QString ret = QString("Subtitling Descriptor ");
596  ret += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
597  ret += QString("length(%1)").arg(DescriptorLength());
598 
599  for (uint i = 0; i < StreamCount(); i++)
600  {
601  ret.append("\n ");
602  ret.append(QString("type(0x%1) composition_page_id(%2) ancillary_page_id(%3) lang(%4)")
603  .arg(SubtitleType(i),2,16,QChar('0'))
604  .arg(CompositionPageID(i))
605  .arg(AncillaryPageID(i))
606  .arg(LanguageString(i)));
607  }
608 
609  return ret;
610 }
611 
612 QString TeletextDescriptor::toString(void) const
613 {
614  QString ret = QString("Teletext Descriptor ");
615  ret += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
616  ret += QString("length(%1)").arg(DescriptorLength());
617 
618  for (uint i = 0; i < StreamCount(); i++)
619  {
620  ret.append("\n ");
621  ret.append(QString("type(%1) mag(%2) page(%3) lang(%4)")
622  .arg(TeletextType(i))
623  .arg(TeletextMagazineNum(i), 0, 16)
624  .arg(TeletextPageNum(i), 2, 16, QChar('0'))
625  .arg(LanguageString(i)));
626  }
627 
628  return ret;
629 }
630 
632 {
633  QString str = QString("CableDeliverySystemDescriptor ");
634  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
635  str += QString("length(%1)").arg(DescriptorLength());
636 
637  str.append(QString("Frequency: %1\n").arg(FrequencyHz()));
638  str.append(QString(" Mod=%1, SymbR=%2, FECInner=%3, FECOuter=%4")
639  .arg(ModulationString(),
640  QString::number(SymbolRateHz()),
641  FECInnerString(),
642  FECOuterString()));
643 
644  return str;
645 }
646 
648 {
649  QString str = QString("SatelliteDeliverySystemDescriptor ");
650  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
651  str += QString("length(%1) ").arg(DescriptorLength());
652 
653  str.append(QString("Frequency: %1, Type: %2\n").arg(FrequencykHz())
654  .arg(ModulationSystemString()));
655  str.append(QString(" Mod=%1, SymbR=%2, FECInner=%3, Orbit=%4, Pol=%5")
656  .arg(ModulationString(),
657  QString::number(SymbolRateHz()),
658  FECInnerString(),
660  PolarizationString()));
661 
662  return str;
663 }
664 
666 {
667  QString str = QString("TerrestrialDeliverySystemDescriptor ");
668  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
669  str += QString("length(%1) ").arg(DescriptorLength());
670 
671  str.append(QString("Frequency: %1\n").arg(FrequencyHz()));
672  str.append(QString(" BW=%1MHz C=%2 HP=%3 LP=%4 GI=%5 TransMode=%6k")
673  .arg(BandwidthString(),
679 
680  return str;
681 }
682 
683 // 0x79
685 {
686  QString str = QString("S2SatelliteDeliverySystemDescriptor ");
687  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
688  str += QString("length(%1) ").arg(DescriptorLength());
689 
690  str.append(QString("\n ScramblingSequenceSelector(%1)").arg(ScramblingSequenceSelector()));
691  str.append(QString(" MultipleInputStreamFlag(%1)").arg(MultipleInputStreamFlag()));
692  str.append(QString("\n NotTimesliceFlag(%1)").arg(NotTimesliceFlag()));
693  str.append(QString(" TSGSMode(%1)").arg(TSGSMode()));
694  //
695  // TBD
696  //
697  str.append(" Dumping\n");
698  str.append(hexdump());
699  return str;
700 }
701 
702 // 0x7F 0x00
704 {
705  QString str = QString("ImageIconDescriptor ");
706  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
707  str += QString("length(%1) ").arg(DescriptorLength());
708  str += QString("extension(0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
709  str += QString("number %1/%2").arg(DescriptorNumber()).arg(LastDescriptorNumber());
710  //
711  // TBD
712  //
713  str.append(" Dumping\n");
714  str.append(hexdump());
715  return str;
716 }
717 
718 // 0x7F 0x04
720 {
721  m_cellPtrs.clear();
722  m_subCellPtrs.clear();
723 
724  const unsigned char *cp = m_data + 8;
725  for (uint i=0; (cp - m_data + 4) < DescriptorLength(); i++)
726  {
727  m_cellPtrs.push_back(cp);
728  cp += TFSFlag() ? (2 + 1 + FrequencyLoopLength(i)) : (2 + 4);
729  m_subCellPtrs.push_back(cp);
730  cp += 1 + SubcellInfoLoopLength(i);
731  }
732 }
733 
735 {
736  QString str = QString("T2DeliverySystemDescriptor ");
737  str += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
738  str += QString("length(%1) ").arg(DescriptorLength());
739  str += QString("extension(0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
740  str += QString("plp_id(%1) ").arg(PlpID());
741  str += QString("T2_system_id(%1)").arg(T2SystemID());
742  if (DescriptorLength() > 4)
743  {
744  str += QString("\n %1 ").arg(SisoMisoString());
745  str += QString("BW=%1MHz ").arg(BandwidthString());
746  str += QString("GI=%1 ").arg(GuardIntervalString());
747  str += QString("TransMode=%1 ").arg(TransmissionModeString());
748  str += QString("OF=%1 ").arg(OtherFrequencyFlag());
749  str += QString("TFS=%1 ").arg(TFSFlag());
750  }
751  if (DescriptorLength() > 6)
752  {
753  for (uint i=0; i < NumCells(); i++)
754  {
755  str += QString("\n ");
756  str += QString("cell_id:%1 ").arg(CellID(i));
757  str += QString("centre_frequency:");
758  if (TFSFlag())
759  {
760  for (uint j=0; j<FrequencyLoopLength(i)/4; j++)
761  {
762  str += QString(" %1").arg(CentreFrequency(i,j));
763  }
764  }
765  else
766  {
767  str += QString(" %1").arg(CentreFrequency(i));
768  }
769  for (uint j=0; j<SubcellInfoLoopLength(i)/5; j++)
770  {
771  str += QString("\n ");
772  str += QString("cell_id_extension:%1 ").arg(CellIDExtension(i,j));
773  str += QString("transposer_frequency:%1").arg(TransposerFrequency(i,j));
774  }
775  }
776  }
777  str.append(" Dumping\n");
778  str.append(hexdump());
779  return str;
780 }
781 
782 // 0x7F 0x05
784 {
785  QString str = QString("SHDeliverySystemDescriptor ");
786  str += QString("tag(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
787  str += QString("length(%1) ").arg(DescriptorLength());
788  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
789  //
790  // TBD
791  //
792  str.append(" Dumping\n");
793  str.append(hexdump());
794  return str;
795 }
796 
797 // 0x7F 0x06
799 {
800  QString str = QString("SupplementaryAudioDescriptor ");
801  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
802  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
803  str += QString("length(%1)").arg(DescriptorLength());
804  str += QString("\n ");
805  str += QString("mix_type(%1) ").arg(MixType());
806  str += QString("editorial_classification(%1)").arg(EditorialClassification());
807  str += QString("\n ");
808  str += QString("language_code_present(%1)").arg(LanguageCodePresent());
809  if (LanguageCodePresent() && DescriptorLength() >= 4)
810  {
811  str += QString(" language_code(%1)").arg(LanguageString());
812  }
813  //
814  str.append(" Dumping\n");
815  str.append(hexdump());
816  return str;
817 }
818 
819 // 0x7F 0x07
821 {
822  QString str = QString("NetworkChangeNotiyDescriptor ");
823  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
824  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
825  //
826  str.append(" Dumping\n");
827  str.append(hexdump());
828  return str;
829 }
830 
831 // 0x7F 0x08
833 {
834  QString str = QString("MessageDescriptor ");
835  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
836  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
837  str += QString("length(%1)").arg(DescriptorLength());
838  str += QString("\n ");
839  str += QString("message_id(%1) ").arg(MessageID());
840  str += QString("language_code(%1)").arg(LanguageString());
841  str += QString("\n ");
842  str += QString("text_char(\"%1\")").arg(Message());
843  //
844  str.append(" Dumping\n");
845  str.append(hexdump());
846  return str;
847 }
848 
849 // 0x7F 0x09
851 {
852  QString str = QString("TargetRegionDescriptor ");
853  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
854  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
855  str += QString("length(%1)").arg(DescriptorLength());
856  str += QString("\n ");
857  str += QString("country_code(%1) ").arg(CountryCodeString());
858  //
859  // TBD
860  //
861  str.append(" Dumping\n");
862  str.append(hexdump());
863  return str;
864 }
865 
866 // 0x7F 0x0A
868 {
869  QString str = QString("TargetRegionNameDescriptor ");
870  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
871  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
872  str += QString("length(%1)").arg(DescriptorLength());
873  str += QString("\n ");
874  str += QString("country_code(%1) ").arg(CountryCodeString());
875  str += QString("language_code(%1)").arg(LanguageString());
876  //
877  // TBD
878  //
879  str.append(" Dumping\n");
880  str.append(hexdump());
881  return str;
882 }
883 
884 // 0x7F 0x0B
886 {
887  QString str = QString("ServiceRelocatedDescriptor ");
888  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
889  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
890  str += QString("length(%1)").arg(DescriptorLength());
891  str += QString("\n ");
892  str += QString("old_original_network_id(%1) ").arg(OldOriginalNetworkID());
893  str += QString("old_transport_id(%1) ").arg(OldTransportID());
894  str += QString("old_service_id(%1) ").arg(OldServiceID());
895  //
896  str.append(" Dumping\n");
897  str.append(hexdump());
898  return str;
899 }
900 
901 // 0x7F 0x0D
903 {
904  QString str = QString("C2DeliverySystemDescriptor ");
905  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
906  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
907  str += QString("length(%1)").arg(DescriptorLength());
908  //
909  // TBD
910  //
911  str.append(" Dumping\n");
912  str.append(hexdump());
913  return str;
914 }
915 
916 // 0x7F 0x17
918 {
919  QString str = QString("S2XSatelliteDeliverySystemDescriptor ");
920  str += QString("(0x%1 ").arg(DescriptorTag(),2,16,QChar('0'));
921  str += QString("0x%1) ").arg(DescriptorTagExtension(),2,16,QChar('0'));
922  str += QString("length(%1)").arg(DescriptorLength());
923  //
924  // TBD
925  //
926  str.append(" Dumping\n");
927  str.append(hexdump());
928  return str;
929 }
930 
932 {
933  QString ret = "UKChannelListDescriptor sid->chan_num: ";
934  for (uint i = 0; i < ChannelCount(); i++)
935  {
936  ret += QString("%1->%2").arg(ServiceID(i)).arg(ChannelNumber(i));
937  ret += (i+1 < ChannelCount()) ? ((i+4)%10) ? ", " : ",\n " : "";
938  }
939  return ret;
940 }
941 
943 {
944  QString ret = "DVBSimulcastChannelDescriptor sid->chan_num: ";
945  for (uint i = 0; i < ChannelCount(); i++)
946  {
947  ret += QString("%1->%2").arg(ServiceID(i)).arg(ChannelNumber(i));
948  ret += (i+1 < ChannelCount()) ? ((i+3)%10) ? ", " : ",\n " : "";
949  }
950  return ret;
951 }
952 
954 {
955  QString ret = "Sky Logical Channel Number Descriptor ";
956  ret += QString("(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
957  ret += QString("length(%1)").arg(DescriptorLength());
958 
959  ret += QString("\n RegionID (%1) (0x%2) Raw (0x%3)")
960  .arg(RegionID()).arg(RegionID(),4,16,QChar('0')).arg(RegionRaw(),4,16,QChar('0'));
961 
962  for (size_t i=0; i<ServiceCount(); i++)
963  {
964  ret += QString("\n ServiceID (%1) (0x%2) ").arg(ServiceID(i)).arg(ServiceID(i),4,16,QChar('0'));
965  ret += QString("ServiceType (0x%1) ").arg(ServiceType(i),2,16,QChar('0'));
966  ret += QString("LCN (%1) ").arg(LogicalChannelNumber(i));
967  ret += QString("ChannelID(0x%1) ").arg(ChannelID(i),4,16,QChar('0'));
968  ret += QString("Flags(0x%1) ").arg(Flags(i),4,16,QChar('0'));
969  }
970 
971  return ret;
972 }
973 
975 {
976  QString ret = "Freesat Logical Channel Number Descriptor ";
977  ret += QString("(0x%1)").arg(DescriptorTag(),2,16,QChar('0'));
978  ret += QString(" length(%1)").arg(DescriptorLength());
979 
980  for (size_t i=0; i<ServiceCount(); i++)
981  {
982  ret += QString("\n ServiceID (%1) (0x%2) ").arg(ServiceID(i)).arg(ServiceID(i),4,16,QChar('0'));
983  ret += QString("ChanID (0x%1)").arg(ChanID(i), 4, 16, QChar('0'));
984  for (uint j=0; j<LCNCount(i); j++)
985  {
986  ret += QString("\n LCN: %1 Region: %2").arg(LogicalChannelNumber(i,j),3).arg(RegionID(i,j));
987  }
988  }
989  return ret;
990 }
991 
993 {
994  QString ret = "Freesat Region Descriptor ";
995  ret += QString("(0x%1)").arg(DescriptorTag(),2,16,QChar('0'));
996  ret += QString(" length(%1)").arg(DescriptorLength());
997 
998  for (uint i=0; i<RegionCount(); ++i)
999  {
1000  uint region_id = RegionID(i);
1001  QString language = Language(i);
1002  QString region_name = RegionName(i);
1003  ret += QString("\n Region (%1) (%2) '%3'")
1004  .arg(region_id,2).arg(language, region_name);
1005  }
1006  return ret;
1007 }
1008 
1010 {
1011  QString ret = QString("Freesat Callsign Descriptor ");
1012  ret += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
1013  ret += QString("length(%1)").arg(DescriptorLength());
1014  ret += QString(" (%1) '%2'").arg(Language(), Callsign());
1015  return ret;
1016 }
1017 
1019 {
1020  QString ret = QString("OpenTV ChannelList Descriptor region: %1 sid->chan_num(id): ").arg(RegionID());
1021  for (uint i = 0; i < ChannelCount(); i++)
1022  {
1023  ret += QString("%1->%2(%3)").arg(ServiceID(i)).arg(ChannelNumber(i)).arg(ChannelID(i));
1024  ret += (i+1<ChannelCount()) ? ", " : "";
1025  }
1026  return ret;
1027 }
1028 
1030 {
1031  QString ret = QString("ApplicationSignallingDescriptor ");
1032  ret += QString("tag(0x%1) ").arg(DescriptorTag(),2,16,QChar('0'));
1033  ret += QString("length(%1)").arg(DescriptorLength());
1034  for (uint i = 0; i < Count(); ++i)
1035  {
1036  ret += "\n ";
1037  ret += QString("application_type(%1) ").arg(ApplicationType(i));
1038  ret += QString("AIT_version_number(%1)").arg(AITVersionNumber(i));
1039  }
1040  return ret;
1041 }
1042 
1044 {
1045  QString ret = QString("CAIdentifierDescriptor ");
1046  for (uint i = 0; i < CASystemCount(); ++i)
1047  {
1048  ret += QString("ca_system_id(0x%1) ")
1049  .arg(CASystemId(i), 0, 16);
1050  }
1051  return ret;
1052 }
1053 
1055 {
1056  QString ret = QString("DataBroadcastDescriptor: "
1057  "data_broadcast_id(%1) "
1058  "component_tag(%1) ")
1059  .arg(DataBroadcastId(), 0, 10)
1060  .arg(DataComponentTag(), 0, 10);
1061 
1062  ret += QString("selector(0x ");
1063  for (uint i = 0; i < SelectorLength(); i++)
1064  ret += QString("%1 ").arg(Selector()[i], 0, 16);
1065  ret += ") ";
1066 
1067  ret += QString("ISO_639_language_code(%1) ")
1068  .arg(LanguageString());
1069 
1070  ret += QString("text(%1) ") + Text();
1071 
1072  return ret;
1073 }
1074 
1076 {
1077  QString ret = QString("LocalTimeOffsetDescriptor ");
1078  uint count = Count();
1079  for (uint i = 0; i < count; ++i)
1080  {
1081  ret += QString("country_code(%1) country_region_id(0x%2) "
1082  "local_time_offset_with_polarity(%3) "
1083  "time_of_change(TODO)")
1084  .arg(CountryCodeString(i))
1085  .arg(CountryRegionId(i), 0, 16)
1086  .arg(LocalTimeOffsetWithPolarity(i));
1087  // TODO add time of change
1088  }
1089  return ret;
1090 }
1091 
1093 {
1094  QString ret = QString("NVODReferenceDescriptor ");
1095  for (uint i = 0; i < Count(); ++i)
1096  {
1097  ret += QString("transport_stream_id(0x%1) original_network_id(0x%2) "
1098  "service_id(0x%3) ")
1099  .arg(TransportStreamId(i), 0, 16)
1100  .arg(OriginalNetworkId(i), 0, 16)
1101  .arg(ServiceId(i), 0, 16);
1102  }
1103  return ret;
1104 }
1105 
1107 {
1108  return QString("PartialTransportStreamDescriptor peak_rate(%1) "
1109  "min_overall_smooth_rate(%2) max_overall_smooth_buf(3)")
1110  .arg(PeakRate()).arg(SmoothRate()).arg(SmoothBuf());
1111 }
1112 
1113 QString AC3Descriptor::toString(void) const
1114 {
1115  QString ret = QString("AC-3 Descriptor ");
1116  ret += QString("tag(%1) length(%2) ").arg(DescriptorTag(), DescriptorLength());
1117  if (HasComponentType())
1118  ret += QString("type(0x%1) ").arg(ComponentType(), 2, 16, QChar('0'));
1119  if (HasBSID())
1120  ret += QString("bsid(0x%1) ").arg(BSID(), 2, 16, QChar('0'));
1121  if (HasMainID())
1122  ret += QString("mainid(0x%1) ").arg(MainID(), 2, 16, QChar('0'));
1123  if (HasASVC())
1124  ret += QString("asvc(0x%1) ").arg(ASVC(), 2, 16, QChar('0'));
1125  return ret;
1126 }
1127 
1128 QMultiMap<QString,QString> ExtendedEventDescriptor::Items(void) const
1129 {
1130  QMultiMap<QString, QString> ret;
1131 
1132  uint index = 0;
1133 
1134  /* handle all items
1135  * minimum item size is for 8bit length + 8bit length
1136  */
1137  while (LengthOfItems() - index >= 2)
1138  {
1139  QString item_description = dvb_decode_text (&m_data[8 + index], m_data[7 + index]);
1140  index += 1 + m_data[7 + index];
1141  QString item = dvb_decode_text (&m_data[8 + index], m_data[7 + index]);
1142  index += 1 + m_data[7 + index];
1143  ret.insert (item_description, item);
1144  }
1145 
1146  return ret;
1147 }
TeletextDescriptor::TeletextMagazineNum
uint TeletextMagazineNum(uint i) const
Definition: dvbdescriptors.h:2384
freesat_huffman_to_string
QString freesat_huffman_to_string(const unsigned char *compressed, uint size)
Definition: freesat_huffman.cpp:7
SatelliteDeliverySystemDescriptor::OrbitalPositionString
QString OrbitalPositionString(void) const
Definition: dvbdescriptors.h:853
OpenTVChannelListDescriptor::ChannelID
uint ChannelID(uint i) const
Definition: dvbdescriptors.h:2871
T2DeliverySystemDescriptor::TransmissionModeString
QString TransmissionModeString(void) const
Definition: dvbdescriptors.h:1219
S2SatelliteDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:684
TargetRegionNameDescriptor::CountryCodeString
QString CountryCodeString(void) const
Definition: dvbdescriptors.h:1434
CableDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:631
ContentDescriptor::GetMythCategory
ProgramInfo::CategoryType GetMythCategory(uint i) const
Definition: dvbdescriptors.cpp:288
T2DeliverySystemDescriptor::GuardIntervalString
QString GuardIntervalString(void) const
Definition: dvbdescriptors.h:1201
T2DeliverySystemDescriptor::CellIDExtension
uint CellIDExtension(uint i, uint j) const
Definition: dvbdescriptors.h:1243
MPEGDescriptor::DescriptorTag
uint DescriptorTag(void) const
Definition: mpegdescriptors.h:345
TerrestrialDeliverySystemDescriptor::GuardIntervalString
QString GuardIntervalString(void) const
Definition: dvbdescriptors.h:1055
MPEGDescriptor::DescriptorLength
uint DescriptorLength(void) const
Definition: mpegdescriptors.h:346
T2DeliverySystemDescriptor::OtherFrequencyFlag
uint OtherFrequencyFlag(void) const
Definition: dvbdescriptors.h:1225
ContentDescriptor::Nibble1
uint Nibble1(uint i) const
Definition: dvbdescriptors.h:630
ContentDescriptor::GetDescription
QString GetDescription(uint i) const
Definition: dvbdescriptors.cpp:336
FreesatLCNDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:974
ImageIconDescriptor::DescriptorNumber
uint DescriptorNumber(void) const
Definition: dvbdescriptors.h:1099
AC3Descriptor::ASVC
uint ASVC(void) const
Definition: dvbdescriptors.h:2549
LocalTimeOffsetDescriptor::LocalTimeOffsetWithPolarity
int LocalTimeOffsetWithPolarity(uint i) const
Definition: dvbdescriptors.h:1693
MPEGDescriptor::hexdump
QString hexdump(void) const
Definition: mpegdescriptors.cpp:736
ApplicationSignallingDescriptor::ApplicationType
uint ApplicationType(uint i) const
Definition: dvbdescriptors.h:233
MessageDescriptor::LanguageString
QString LanguageString(void) const
Definition: dvbdescriptors.h:1366
NVODReferenceDescriptor::Count
uint Count(void) const
Definition: dvbdescriptors.h:1830
MessageDescriptor::MessageID
uint MessageID(void) const
Definition: dvbdescriptors.h:1361
MessageDescriptor::Message
QString Message(void) const
Definition: dvbdescriptors.h:1370
SubtitlingDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:593
SkyLCNDescriptor::Flags
uint Flags(size_t i) const
Definition: dvbdescriptors.h:2844
FreesatCallsignDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1009
FreesatLCNDescriptor::LogicalChannelNumber
uint LogicalChannelNumber(size_t i, size_t j) const
Definition: dvbdescriptors.h:2689
S2SatelliteDeliverySystemDescriptor::NotTimesliceFlag
uint NotTimesliceFlag() const
Definition: dvbdescriptors.h:2987
DVBSimulcastChannelDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:942
T2DeliverySystemDescriptor::NumCells
uint NumCells(void) const
Definition: dvbdescriptors.h:1229
CableDeliverySystemDescriptor::FECOuterString
QString FECOuterString(void) const
Definition: dvbdescriptors.h:780
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
LinkageDescriptor::kHandOverIdentical
@ kHandOverIdentical
Definition: dvbdescriptors.h:165
SHDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:783
PartialTransportStreamDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1106
OpenTVChannelListDescriptor::RegionID
uint RegionID() const
Definition: dvbdescriptors.h:2862
ServiceDescriptorMapping::IsUHDTV
bool IsUHDTV(void) const
Definition: dvbdescriptors.h:2047
CableDeliverySystemDescriptor::FrequencyHz
unsigned long long FrequencyHz(void) const
Definition: dvbdescriptors.h:766
NVODReferenceDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1092
T2DeliverySystemDescriptor::SubcellInfoLoopLength
uint SubcellInfoLoopLength(uint i) const
Definition: dvbdescriptors.h:1242
enc_override
std::vector< uint8_t > enc_override
Definition: dvbdescriptors.h:43
LocalTimeOffsetDescriptor::CountryRegionId
uint CountryRegionId(uint i) const
Definition: dvbdescriptors.h:1683
dvb_decode_text
QString dvb_decode_text(const unsigned char *src, uint raw_length, const enc_override &encoding_override)
Definition: dvbdescriptors.cpp:130
CableDeliverySystemDescriptor::FECInnerString
QString FECInnerString(void) const
Definition: dvbdescriptors.h:825
DataBroadcastDescriptor::LanguageString
QString LanguageString(void) const
Definition: dvbdescriptors.h:717
decode_iso6937
static QString decode_iso6937(const unsigned char *buf, uint length)
Definition: dvbdescriptors.cpp:26
CAIdentifierDescriptor::CASystemCount
uint CASystemCount(void) const
Definition: dvbdescriptors.h:335
T2DeliverySystemDescriptor::TFSFlag
uint TFSFlag(void) const
Definition: dvbdescriptors.h:1226
DataBroadcastDescriptor::DataBroadcastId
uint DataBroadcastId(void) const
Definition: dvbdescriptors.h:704
DVBSimulcastChannelDescriptor::ChannelNumber
uint ChannelNumber(uint i) const
Definition: dvbdescriptors.h:2629
FrequencyListDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:560
ContentDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:357
tmp
static guint32 * tmp
Definition: goom_core.cpp:26
T2DeliverySystemDescriptor::BandwidthString
QString BandwidthString(void) const
Definition: dvbdescriptors.h:1182
FreesatLCNDescriptor::RegionID
uint RegionID(size_t i, size_t j) const
Definition: dvbdescriptors.h:2692
ProgramInfo::kCategoryMovie
@ kCategoryMovie
Definition: programinfo.h:76
T2DeliverySystemDescriptor::CentreFrequency
uint CentreFrequency(uint i) const
Definition: dvbdescriptors.h:1233
x4
static int x4
Definition: mythsocket.cpp:53
OpenTVChannelListDescriptor::ChannelCount
uint ChannelCount(void) const
Definition: dvbdescriptors.h:2860
decode_text
static QString decode_text(const unsigned char *buf, uint length)
Definition: dvbdescriptors.cpp:199
SubtitlingDescriptor::AncillaryPageID
uint AncillaryPageID(uint i) const
Definition: dvbdescriptors.h:2318
FreesatRegionDescriptor::RegionCount
uint RegionCount(void) const
Definition: dvbdescriptors.h:2740
ServiceDescriptorMapping::ServiceType
uint ServiceType(void) const
Definition: dvbdescriptors.h:2013
NVODReferenceDescriptor::ServiceId
uint ServiceId(uint i) const
Definition: dvbdescriptors.h:1841
ContentDescriptor::Count
uint Count(void) const
Definition: dvbdescriptors.h:626
iso6937tables.h
programinfo.h
ProgramInfo::kCategoryTVShow
@ kCategoryTVShow
Definition: programinfo.h:77
TerrestrialDeliverySystemDescriptor::BandwidthString
QString BandwidthString(void) const
Definition: dvbdescriptors.h:967
mythlogging.h
ContentDescriptor::s_categoryDesc
static QMap< uint, QString > s_categoryDesc
Definition: dvbdescriptors.h:652
PartialTransportStreamDescriptor::SmoothRate
uint SmoothRate(void) const
Definition: dvbdescriptors.h:2502
AC3Descriptor::HasASVC
bool HasASVC(void) const
Definition: dvbdescriptors.h:2529
C2DeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:902
DVBLogicalChannelDescriptor::ChannelCount
uint ChannelCount(void) const
Definition: dvbdescriptors.h:2596
S2SatelliteDeliverySystemDescriptor::TSGSMode
uint TSGSMode() const
Definition: dvbdescriptors.h:2992
MythFile::copy
MBASE_PUBLIC long long copy(QFile &dst, QFile &src, uint block_size=0)
Copies src file to dst file.
Definition: mythmiscutil.cpp:263
ServiceDescriptorMapping::IsTeletext
bool IsTeletext(void) const
Definition: dvbdescriptors.h:2053
linkage_types
const std::array< const std::string, 14 > linkage_types
Definition: dvbdescriptors.cpp:298
T2DeliverySystemDescriptor::FrequencyLoopLength
uint FrequencyLoopLength(uint i) const
Definition: dvbdescriptors.h:1231
S2SatelliteDeliverySystemDescriptor::MultipleInputStreamFlag
uint MultipleInputStreamFlag() const
Definition: dvbdescriptors.h:2982
ImageIconDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:703
ProgramInfo::kCategorySports
@ kCategorySports
Definition: programinfo.h:77
ExtendedEventDescriptor::Items
QMultiMap< QString, QString > Items(void) const
Definition: dvbdescriptors.cpp:1128
AC3Descriptor::HasMainID
bool HasMainID(void) const
Definition: dvbdescriptors.h:2527
SubtitlingDescriptor::StreamCount
uint StreamCount(void) const
Definition: dvbdescriptors.h:2298
TeletextDescriptor::StreamCount
uint StreamCount(void) const
Definition: dvbdescriptors.h:2367
CAIdentifierDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1043
ServiceRelocatedDescriptor::OldServiceID
uint OldServiceID(void) const
Definition: dvbdescriptors.h:1476
x1
static int x1
Definition: mythsocket.cpp:50
MPEGDescriptor::m_data
const unsigned char * m_data
Definition: mpegdescriptors.h:370
DVBLogicalChannelDescriptor::ChannelNumber
uint ChannelNumber(uint i) const
Definition: dvbdescriptors.h:2601
FreesatLCNDescriptor::ChanID
uint ChanID(size_t i) const
Definition: dvbdescriptors.h:2683
TerrestrialDeliverySystemDescriptor::ConstellationString
QString ConstellationString(void) const
Definition: dvbdescriptors.h:988
LinkageDescriptor::kHandOverAssociatedService
@ kHandOverAssociatedService
Definition: dvbdescriptors.h:167
SatelliteDeliverySystemDescriptor::FECInnerString
QString FECInnerString(void) const
Definition: dvbdescriptors.h:933
NVODReferenceDescriptor::OriginalNetworkId
uint OriginalNetworkId(uint i) const
Definition: dvbdescriptors.h:1838
SubtitlingDescriptor::LanguageString
QString LanguageString(uint i) const
Definition: dvbdescriptors.h:2304
T2DeliverySystemDescriptor::m_subCellPtrs
std::vector< const unsigned char * > m_subCellPtrs
Definition: dvbdescriptors.h:1254
LinkageDescriptor::kHandOverLocalVariation
@ kHandOverLocalVariation
Definition: dvbdescriptors.h:166
MPEGDescriptor::DescriptorTagExtension
uint DescriptorTagExtension(void) const
Definition: mpegdescriptors.h:347
ApplicationSignallingDescriptor::AITVersionNumber
uint AITVersionNumber(uint i) const
Definition: dvbdescriptors.h:235
uint
unsigned int uint
Definition: compat.h:81
SupplementaryAudioDescriptor::LanguageCodePresent
uint LanguageCodePresent(void) const
Definition: dvbdescriptors.h:1310
PartialTransportStreamDescriptor::PeakRate
uint PeakRate(void) const
Definition: dvbdescriptors.h:2498
ProgramInfo::CategoryType
CategoryType
Definition: programinfo.h:76
ContentDescriptor::s_categoryDescExists
static volatile bool s_categoryDescExists
Definition: dvbdescriptors.h:653
iso6937table_base
const iso6937table iso6937table_base
Definition: iso6937tables.cpp:7
S2XSatelliteDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:917
ServiceRelocatedDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:885
T2DeliverySystemDescriptor::SisoMisoString
QString SisoMisoString(void) const
Definition: dvbdescriptors.h:1158
TargetRegionNameDescriptor::LanguageString
QString LanguageString(void) const
Definition: dvbdescriptors.h:1444
ContentDescriptor::s_categoryLock
static QMutex s_categoryLock
Definition: dvbdescriptors.h:651
myth_category_type_to_string
QString myth_category_type_to_string(ProgramInfo::CategoryType category_type)
Definition: programinfo.cpp:128
NVODReferenceDescriptor::TransportStreamId
uint TransportStreamId(uint i) const
Definition: dvbdescriptors.h:1835
DataBroadcastDescriptor::Selector
const unsigned char * Selector(void) const
Definition: dvbdescriptors.h:712
AC3Descriptor::HasBSID
bool HasBSID(void) const
Definition: dvbdescriptors.h:2525
AC3Descriptor::ComponentType
uint ComponentType(void) const
Definition: dvbdescriptors.h:2533
FreesatRegionDescriptor::Language
QString Language(uint i) const
Definition: dvbdescriptors.h:2746
ExtendedEventDescriptor::LengthOfItems
uint LengthOfItems(void) const
Definition: dvbdescriptors.h:1586
ApplicationSignallingDescriptor::Count
uint Count() const
Definition: dvbdescriptors.h:232
SupplementaryAudioDescriptor::LanguageString
QString LanguageString(void) const
Definition: dvbdescriptors.h:1315
T2DeliverySystemDescriptor::CellID
uint CellID(uint i) const
Definition: dvbdescriptors.h:1230
TerrestrialDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:665
TerrestrialDeliverySystemDescriptor::CodeRateLPString
QString CodeRateLPString(void) const
Definition: dvbdescriptors.h:1039
iso6937table_secondary
const std::array< const iso6937table *, 256 > iso6937table_secondary
Definition: iso6937tables.cpp:1027
T2DeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:734
T2DeliverySystemDescriptor::m_cellPtrs
std::vector< const unsigned char * > m_cellPtrs
Definition: dvbdescriptors.h:1253
TargetRegionDescriptor::CountryCodeString
QString CountryCodeString(void) const
Definition: dvbdescriptors.h:1399
FreesatCallsignDescriptor::Callsign
QString Callsign(void) const
Definition: dvbdescriptors.h:2786
LocalTimeOffsetDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1075
OpenTVChannelListDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1018
CAIdentifierDescriptor::CASystemId
int CASystemId(uint i) const
Definition: dvbdescriptors.h:338
DataBroadcastDescriptor::SelectorLength
uint SelectorLength(void) const
Definition: dvbdescriptors.h:708
FreesatRegionDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:992
ImageIconDescriptor::LastDescriptorNumber
uint LastDescriptorNumber(void) const
Definition: dvbdescriptors.h:1105
ServiceDescriptorMapping::IsHDTV
bool IsHDTV(void) const
Definition: dvbdescriptors.h:2040
AC3Descriptor::MainID
uint MainID(void) const
Definition: dvbdescriptors.h:2540
LocalTimeOffsetDescriptor::CountryCodeString
QString CountryCodeString(uint i) const
Definition: dvbdescriptors.h:1675
DVBLogicalChannelDescriptor::ServiceID
uint ServiceID(uint i) const
Definition: dvbdescriptors.h:2598
ServiceRelocatedDescriptor::OldTransportID
uint OldTransportID(void) const
Definition: dvbdescriptors.h:1475
SupplementaryAudioDescriptor::MixType
uint MixType(void) const
Definition: dvbdescriptors.h:1301
SkyLCNDescriptor::LogicalChannelNumber
uint LogicalChannelNumber(size_t i) const
Definition: dvbdescriptors.h:2841
SatelliteDeliverySystemDescriptor::ModulationSystemString
QString ModulationSystemString(void) const
Definition: dvbdescriptors.h:891
LinkageDescriptor::LinkageTypeString
QString LinkageTypeString(void) const
Definition: dvbdescriptors.cpp:316
CableDeliverySystemDescriptor::ModulationString
QString ModulationString(void) const
Definition: dvbdescriptors.h:795
SatelliteDeliverySystemDescriptor::SymbolRateHz
uint SymbolRateHz(void) const
Definition: dvbdescriptors.h:916
ServiceDescriptorMapping::IsDigitalAudio
bool IsDigitalAudio(void) const
Definition: dvbdescriptors.h:2034
TeletextDescriptor::TeletextPageNum
uint TeletextPageNum(uint i) const
Definition: dvbdescriptors.h:2387
OpenTVChannelListDescriptor::ServiceID
uint ServiceID(uint i) const
Definition: dvbdescriptors.h:2865
DataBroadcastDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1054
TerrestrialDeliverySystemDescriptor::FrequencyHz
uint64_t FrequencyHz(void) const
Definition: dvbdescriptors.h:955
DVBSimulcastChannelDescriptor::ChannelCount
uint ChannelCount(void) const
Definition: dvbdescriptors.h:2624
iconv_helper
static QString iconv_helper(int which, char *buf, size_t length)
Definition: dvbdescriptors.cpp:66
FreesatCallsignDescriptor::Language
QString Language(void) const
Definition: dvbdescriptors.h:2783
LinkageDescriptor::MobileHandOverTypeString
QString MobileHandOverTypeString(void) const
Definition: dvbdescriptors.cpp:325
TerrestrialDeliverySystemDescriptor::TransmissionModeString
QString TransmissionModeString(void) const
Definition: dvbdescriptors.h:1068
iso6937table
std::array< const uint16_t, 256 > iso6937table
Definition: iso6937tables.h:4
FreesatRegionDescriptor::RegionID
int RegionID(uint i) const
Definition: dvbdescriptors.h:2743
SatelliteDeliverySystemDescriptor::PolarizationString
QString PolarizationString() const
Definition: dvbdescriptors.h:866
freesat_huffman.h
SkyLCNDescriptor::ServiceCount
uint ServiceCount(void) const
Definition: dvbdescriptors.h:2829
SubtitlingDescriptor::SubtitleType
uint SubtitleType(uint i) const
Definition: dvbdescriptors.h:2312
FreesatLCNDescriptor::LCNCount
uint LCNCount(size_t i) const
Definition: dvbdescriptors.h:2686
SkyLCNDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:953
LocalTimeOffsetDescriptor::Count
uint Count(void) const
Definition: dvbdescriptors.h:1666
TerrestrialDeliverySystemDescriptor::CodeRateHPString
QString CodeRateHPString(void) const
Definition: dvbdescriptors.h:1030
CableDeliverySystemDescriptor::SymbolRateHz
uint SymbolRateHz(void) const
Definition: dvbdescriptors.h:808
DataBroadcastDescriptor::DataComponentTag
uint DataComponentTag(void) const
Definition: dvbdescriptors.h:706
ApplicationSignallingDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1029
TargetRegionNameDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:867
OpenTVChannelListDescriptor::ChannelNumber
uint ChannelNumber(uint i) const
Definition: dvbdescriptors.h:2874
FrequencyListDescriptor::FrequencyHz
unsigned long long FrequencyHz(uint i) const
Definition: dvbdescriptors.h:1647
LinkageDescriptor::LinkageType
uint LinkageType(void) const
Definition: dvbdescriptors.h:157
SkyLCNDescriptor::ChannelID
uint ChannelID(size_t i) const
Definition: dvbdescriptors.h:2838
ServiceDescriptorMapping::IsDTV
bool IsDTV(void) const
Definition: dvbdescriptors.h:2014
SkyLCNDescriptor::ServiceID
uint ServiceID(size_t i) const
Definition: dvbdescriptors.h:2832
DataBroadcastDescriptor::Text
QString Text(void) const
Definition: dvbdescriptors.h:726
ServiceDescriptorMapping::toString
QString toString(void) const
Definition: dvbdescriptors.cpp:573
LinkageDescriptor::MobileHandOverType
uint MobileHandOverType(void) const
Definition: dvbdescriptors.h:169
NetworkChangeNotifyDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:820
TeletextDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:612
SkyLCNDescriptor::RegionID
uint RegionID(void) const
Definition: dvbdescriptors.h:2823
FreesatLCNDescriptor::ServiceID
uint ServiceID(size_t i) const
Definition: dvbdescriptors.h:2680
T2DeliverySystemDescriptor::TransposerFrequency
uint TransposerFrequency(uint i, uint j) const
Definition: dvbdescriptors.h:1244
FrequencyListDescriptor::FrequencyCount
uint FrequencyCount() const
Definition: dvbdescriptors.h:1634
dvb_decode_short_name
QString dvb_decode_short_name(const unsigned char *src, uint raw_length)
Definition: dvbdescriptors.cpp:233
T2DeliverySystemDescriptor::PlpID
uint PlpID(void) const
Definition: dvbdescriptors.h:1145
TeletextDescriptor::LanguageString
QString LanguageString(uint i) const
Definition: dvbdescriptors.h:2374
MessageDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:832
AC3Descriptor::BSID
uint BSID(void) const
Definition: dvbdescriptors.h:2536
SkyLCNDescriptor::RegionRaw
uint RegionRaw(void) const
Definition: dvbdescriptors.h:2826
SatelliteDeliverySystemDescriptor::FrequencykHz
uint64_t FrequencykHz(void) const
Definition: dvbdescriptors.h:846
TeletextDescriptor::TeletextType
uint TeletextType(uint i) const
Definition: dvbdescriptors.h:2381
PartialTransportStreamDescriptor::SmoothBuf
uint SmoothBuf(void) const
Definition: dvbdescriptors.h:2506
T2DeliverySystemDescriptor::Parse
void Parse(void) const
Definition: dvbdescriptors.cpp:719
ContentDescriptor::Nibble
uint Nibble(uint i) const
Definition: dvbdescriptors.h:634
DVBLogicalChannelDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:931
T2DeliverySystemDescriptor::T2SystemID
uint T2SystemID(void) const
Definition: dvbdescriptors.h:1151
AC3Descriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:1113
SupplementaryAudioDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:798
SubtitlingDescriptor::CompositionPageID
uint CompositionPageID(uint i) const
Definition: dvbdescriptors.h:2315
ContentDescriptor::Init
static void Init(void)
Definition: dvbdescriptors.cpp:365
SatelliteDeliverySystemDescriptor::ModulationString
QString ModulationString(void) const
Definition: dvbdescriptors.h:905
SupplementaryAudioDescriptor::EditorialClassification
uint EditorialClassification(void) const
Definition: dvbdescriptors.h:1304
SkyLCNDescriptor::ServiceType
uint ServiceType(size_t i) const
Definition: dvbdescriptors.h:2835
FreesatRegionDescriptor::RegionName
QString RegionName(uint i) const
Definition: dvbdescriptors.h:2749
AC3Descriptor::HasComponentType
bool HasComponentType(void) const
Definition: dvbdescriptors.h:2523
DVBSimulcastChannelDescriptor::ServiceID
uint ServiceID(uint i) const
Definition: dvbdescriptors.h:2626
FreesatLCNDescriptor::ServiceCount
uint ServiceCount(void) const
Definition: dvbdescriptors.h:2677
SatelliteDeliverySystemDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:647
TargetRegionDescriptor::toString
QString toString(void) const override
Definition: dvbdescriptors.cpp:850
dvbdescriptors.h
S2SatelliteDeliverySystemDescriptor::ScramblingSequenceSelector
uint ScramblingSequenceSelector() const
Definition: dvbdescriptors.h:2978
ServiceRelocatedDescriptor::OldOriginalNetworkID
uint OldOriginalNetworkID(void) const
Definition: dvbdescriptors.h:1474