vdr  2.7.6
si.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (c) 2003 by Marcel Wiesweg *
3  * *
4  * This program is free software; you can redistribute it and/or modify *
5  * it under the terms of the GNU General Public License as published by *
6  * the Free Software Foundation; either version 2 of the License, or *
7  * (at your option) any later version. *
8  * *
9  * $Id: si.h 5.2 2025/03/02 11:03:35 kls Exp $
10  * *
11  ***************************************************************************/
12 
13 #ifndef LIBSI_SI_H
14 #define LIBSI_SI_H
15 
16 #include <stdint.h>
17 
18 #include "util.h"
19 #include "headers.h"
20 
21 namespace SI {
22 
23 enum TableId { TableIdPAT = 0x00, //program association section
24  TableIdCAT = 0x01, //conditional access section
25  TableIdPMT = 0x02, //program map section
26  TableIdTSDT = 0x03,//transport stream description section
27  TableIdNIT = 0x40, //network information, actual network section
28  TableIdNIT_other = 0x41, //network information section, other network
29  TableIdSDT = 0x42, //service description section
31  TableIdBAT = 0x4A, //bouquet association section
32  TableIdEIT_presentFollowing = 0x4E, //event information section
34  //range from 0x50 to 0x5F
37  //range from 0x60 to 0x6F
40  TableIdTDT = 0x70, //time date section
41  TableIdRST = 0x71, //running status section
42  TableIdST = 0x72, //stuffing section
43  TableIdTOT = 0x73, //time offset section
44  TableIdDIT = 0x7E, //discontinuity information section
45  TableIdSIT = 0x7F, //service information section
46  TableIdAIT = 0x74, //application information section
47  TableIdPremiereCIT = 0xA0 //premiere content information section
48  };
49 
51  // defined by ISO/IEC 13818-1
69  // defined by ISO-13818-6 (DSM-CC)
71  // 0x14 - 0x3F Reserved
72  // defined by ISO/IEC 13818-1 Amendment
76  // defined by ETSI (EN 300 468)
128  // defined by ETSI (EN 300 468) v 1.7.1
140  // defined by EICTA/EACEM/DIGITALEUROPE
146  // Extension descriptors
159  // defined by ETSI (EN 300 468) v 1.12.1
162  // 0x0E - 0x0F Reserved
165 
166  // Defined by ETSI TS 102 812 (MHP)
167  // They once again start with 0x00 (see page 234, MHP specification)
173  // 0x05 - 0x0A is unimplemented this library
186  // Premiere private Descriptor Tags
188 
189  //a descriptor currently unimplemented in this library
190  //the actual value 0xFF is "forbidden" according to the spec.
192 };
193 
195 
201  };
202 
213  LinkageTypePremiere = 0xB0
214  };
215 
220  };
221 
222 /* Some principles:
223  - Objects that return references to other objects contained in their data must make sure
224  that the returned objects have been parsed.
225  (the Loop subclasses take care of that.)
226  Note that this does not apply to Loops and Strings (their are never returned by reference, BTW).
227 */
228 
229 class Object : public Parsable {
230 public:
231  Object();
232  Object(CharArray &d);
233  //can only be called once since data is immutable
234  void setData(const unsigned char*data, int size, bool doCopy=true);
235  CharArray getData() { return data; }
236  //returns the valid flag which indicates if data is all right or errors have been encountered
237  bool isValid() { return data.isValid(); }
238  virtual int getLength() = 0;
239 protected:
241  //is protected - not used for sections
242  template <class T> friend class StructureLoop;
243  void setData(CharArray &d);
244  //returns whether the given offset fits within the limits of the actual data
245  //The valid flag will be set accordingly
246  bool checkSize(int offset);
247 };
248 
249 class Section : public Object {
250 public:
251  //convenience: sets data and parses if doParse
252  Section(const unsigned char *data, bool doCopy=true);
253  Section() {}
254  TableId getTableId() const;
255  virtual int getLength() override;
256 
257  static int getLength(const unsigned char *d);
258  static TableId getTableId(const unsigned char *d);
259 };
260 
261 class CRCSection : public Section {
262 public:
263  //convenience: sets data and parses if doParse
264  CRCSection(const unsigned char *data, bool doCopy=true) : Section(data, doCopy) {}
266  bool isCRCValid();
267  //convenience: isValid+CheckParse
268  bool CheckCRCAndParse();
269 };
270 
271 /* A section which has the ExtendedSectionHeader
272  (section_syntax_indicator==1) */
273 class NumberedSection : public CRCSection {
274 public:
275  NumberedSection(const unsigned char *data, bool doCopy=true) : CRCSection(data, doCopy) {}
277  int getTableIdExtension() const;
278  bool getCurrentNextIndicator() const;
279  int getVersionNumber() const;
280  int getSectionNumber() const;
281  int getLastSectionNumber() const;
282  bool moreThanOneSection() const { return getLastSectionNumber()>0; }
283 
284  static int getTableIdExtension(const unsigned char *d);
285 };
286 
287 class VariableLengthPart : public Object {
288 public:
289  //never forget to call this
290  void setData(CharArray d, int l) { Object::setData(d); checkSize(l); length=l; }
291  //convenience method
292  void setDataAndOffset(CharArray d, int l, int &offset) { Object::setData(d); checkSize(l); length=l; offset+=l; }
293  virtual int getLength() override { return length; }
294 private:
295  int length;
296 };
297 
298 class LoopElement : public Object {
299 };
300 
301 class Descriptor : public LoopElement {
302 public:
303  virtual int getLength() override;
305 
306  static int getLength(const unsigned char *d);
307  static DescriptorTag getDescriptorTag(const unsigned char *d);
308 protected:
309  friend class DescriptorLoop;
310  //returns a subclass of descriptor according to the data given.
311  //The object is allocated with new and must be delete'd.
312  //setData() will have been called, CheckParse() not.
313  //if returnUnimplemetedDescriptor==true:
314  // Never returns null - maybe the UnimplementedDescriptor.
315  //if returnUnimplemetedDescriptor==false:
316  // Never returns the UnimplementedDescriptor - maybe null
317  static Descriptor *getDescriptor(CharArray d, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor);
318 };
319 
320 class Loop : public VariableLengthPart {
321 public:
322  class Iterator {
323  public:
324  Iterator() { i=0; }
325  void reset() { i=0; }
326  private:
327  template <class T> friend class StructureLoop;
328  friend class DescriptorLoop;
329  template <class T> friend class TypeLoop;
331  int i;
332  };
333 protected:
334  virtual void Parse() override {}
335 };
336 
337 //contains LoopElements of one type only
338 template <class T> class StructureLoop : public Loop {
339 public:
340  //currently you must use a while-loop testing for hasNext()
341  //i must be 0 to get the first descriptor (with the first call)
342  bool getNext(T &obj, Iterator &it)
343  {
344  if (!isValid() || it.i >= getLength())
345  return false;
346  CharArray d=data;
347  d.addOffset(it.i);
348  T ret;
349  ret.setData(d);
350  ret.CheckParse();
351  if (!checkSize(ret.getLength()))
352  return false;
353  it.i+=ret.getLength();
354  obj=ret;
355  return true;
356  }
358  {
359  if (!isValid() || it.i >= getLength())
360  return 0;
361  CharArray d=data;
362  d.addOffset(it.i);
363  T *ret=new T();
364  ret->setData(d);
365  ret->CheckParse();
366  if (!checkSize(ret->getLength())) {
367  delete ret;
368  return 0;
369  }
370  it.i+=ret->getLength();
371  return ret;
372  }
373  //bool hasNext(Iterator &it) { return getLength() > it.i; }
374 };
375 
376 //contains descriptors of different types
377 class DescriptorLoop : public Loop {
378 public:
380  //i must be 0 to get the first descriptor (with the first call)
381  //All returned descriptors must be delete'd.
382  //returns null if no more descriptors available
383  Descriptor *getNext(Iterator &it);
384  //return the next descriptor with given tag, or 0 if not available.
385  //if returnUnimplemetedDescriptor==true:
386  // an UnimplementedDescriptor may be returned if the next matching descriptor is unimplemented,
387  // 0 will be returned if and only if no matching descriptor is found.
388  //if returnUnimplemetedDescriptor==false:
389  // if 0 is returned, either no descriptor with the given tag was found,
390  // or descriptors were found, but the descriptor type is not implemented
391  //In either case, a return value of 0 indicates that no further calls to this method
392  //with the iterator shall be made.
393  Descriptor *getNext(Iterator &it, DescriptorTag tag, bool returnUnimplemetedDescriptor=false);
394  //return the next descriptor with one of the given tags, or 0 if not available.
395  //if returnUnimplemetedDescriptor==true:
396  // returns 0 if and only if no descriptor with one of the given tags was found.
397  // The UnimplementedDescriptor may be returned.
398  //if returnUnimplemetedDescriptor==false:
399  // if 0 is returned, either no descriptor with one of the given tags was found,
400  // or descriptors were found, but none of them are implemented.
401  // The UnimplementedDescriptor will never be returned.
402  //In either case, a return value of 0 indicates that no further calls to this method
403  //with the iterator shall be made.
404  Descriptor *getNext(Iterator &it, DescriptorTag *tags, int arrayLength, bool returnUnimplemetedDescriptor=false);
405  //returns the number of descriptors in this loop
407  //writes the tags of the descriptors in this loop in the array,
408  // which must at least have the size getNumberOfDescriptors().
409  //The number of descriptors, i.e. getNumberOfDescriptors(), is returned.
410  // You can specify the array type (Descriptor tags are 8 Bit,
411  // you might e.g. choose a char, short, int or DescriptorTag array)
412  template <typename T> int getDescriptorTags(T *tags)
413  {
414  const unsigned char *p=data.getData();
415  const unsigned char *end=p+getLength();
416  int count=0;
417  while (p < end) {
418  tags[count++]=(T)Descriptor::getDescriptorTag(p);
419  p+=Descriptor::getLength(p);
420  }
421  return count;
422  }
423 protected:
424  Descriptor *createDescriptor(int &i, bool returnUnimplemetedDescriptor);
426 };
427 
428 typedef uint8_t EightBit;
429 typedef uint16_t SixteenBit;
430 typedef uint32_t ThirtyTwoBit;
431 typedef uint64_t SixtyFourBit;
432 
433 template <typename T> class TypeLoop : public Loop {
434 public:
435  int getCount() { return getLength()/sizeof(T); }
436  T operator[](const int index) const
437  {
438  switch (sizeof(T)) {
439  case 1:
440  return data[index];
441  case 2:
442  return data.TwoBytes(index);
443  case 4:
444  return data.FourBytes(index);
445  case 8:
446  return (SixtyFourBit(data.FourBytes(index)) << 32) | data.FourBytes(index+4);
447  default:
448  return 0; // just to avoid a compiler warning
449  }
450  return 0; // just to avoid a compiler warning
451  }
452  T getNext(Iterator &it) const
453  {
454  T ret=operator[](it.i);
455  it.i+=sizeof(T);
456  return ret;
457  }
458  bool hasNext(Iterator &it) { return isValid() && (getLength() > it.i); }
459 };
460 
462 public:
464 };
465 
466 //Premiere Content Information Table
468 public:
470 };
471 
472 //The content of the ExtendedEventDescriptor may be split over several
473 //descriptors if the text is longer than 256 bytes.
474 //The following classes provide base functionality to handle this case.
475 class GroupDescriptor : public Descriptor {
476 public:
477  virtual int getDescriptorNumber() = 0;
478  virtual int getLastDescriptorNumber() = 0;
479 };
480 
482 public:
485  bool Add(GroupDescriptor *d);
486  void Delete();
487  int getLength() { return length; }
489  bool isComplete(); //if all descriptors have been added
490 protected:
491  int length;
494 };
495 
496 class String : public VariableLengthPart {
497 public:
498  //A note to the length: getLength() returns the length of the raw data.
499  //The text may be shorter. Its length can be obtained with one of the
500  //getText functions and strlen.
501 
502  //returns text. Data is allocated with new and must be delete'd by the user.
503  char *getText();
504  //copies text into given buffer.
505  //a buffer of size getLength()+1 is guaranteed to be sufficiently large.
506  //In most descriptors the string length is an 8-bit field,
507  //so the maximum there is 256.
508  //returns the given buffer for convenience.
509  //The emphasis marks 0x86 and 0x87 are still available.
510  //If fromCode is given, the string will be copied into buffer in its raw form,
511  //without conversion, and he code table of the string is returned in this variable
512  //if it is NULL.
513  char *getText(char *buffer, int size, const char **fromCode = NULL);
514  //The same semantics as for getText(char*) apply.
515  //The short version of the text according to ETSI TR 101 211 (chapter 4.6)
516  //will be written into the shortVersion buffer (which should, therefore, have the same
517  //length as buffer). If no shortVersion is available, shortVersion will contain
518  //an empty string.
519  //The emphasis marks 0x86 and 0x87 are still available in buffer, but not in shortVersion.
520  char *getText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion);
521 protected:
522  virtual void Parse() override {}
523  void decodeText(char *buffer, int size, const char **fromCode = NULL);
524  void decodeText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion);
525 };
526 
527 // Set the character table to use for strings that do not begin with a character
528 // table indicator. Call with NULL to turn this off.
529 // Must be called *after* SetSystemCharacterTable()!
530 // Returns true if the character table was recognized.
531 bool SetOverrideCharacterTable(const char *CharacterTable);
532 // Call this function to set the system character table. CharacterTable is a string
533 // like "iso8859-15" or "utf-8" (case insensitive).
534 // Returns true if the character table was recognized.
535 bool SetSystemCharacterTable(const char *CharacterTable);
536 // Determines the character table used in the given buffer and returns
537 // a string indicating that table. If no table can be determined, the
538 // default ISO6937 is returned. If a table can be determined, the buffer
539 // and length are adjusted accordingly.
540 // The isSingleByte parameter is deprecated and only present for backwards compatibility.
541 const char *getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte = NULL);
542 // Copies 'from' to 'to' and converts characters according to 'fromCode', if given.
543 // Returns the length of the resulting string.
544 size_t convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode);
546 
547 } //end of namespace
548 
549 #endif //LIBSI_SI_H
bool CheckCRCAndParse()
Definition: si.c:65
CRCSection()
Definition: si.h:265
CRCSection(const unsigned char *data, bool doCopy=true)
Definition: si.h:264
bool isCRCValid()
Definition: si.c:61
u_int32_t FourBytes(const int index) const
Definition: util.h:60
void addOffset(int offset)
Definition: util.h:65
u_int16_t TwoBytes(const int index) const
Definition: util.h:59
const unsigned char * getData() const
Definition: util.h:51
bool isValid() const
Definition: util.h:62
void Delete()
Definition: si.c:193
GroupDescriptor ** array
Definition: si.h:492
bool isComplete()
Definition: si.c:215
bool Add(GroupDescriptor *d)
Definition: si.c:201
bool deleteOnDesctruction
Definition: si.h:493
int getLength()
Definition: si.h:487
GroupDescriptor ** getDescriptors()
Definition: si.h:488
DescriptorGroup(bool deleteOnDesctruction=true)
Definition: si.c:181
~DescriptorGroup()
Definition: si.c:187
int getNumberOfDescriptors()
Definition: si.c:170
int getDescriptorTags(T *tags)
Definition: si.h:412
DescriptorLoop()
Definition: si.h:379
DescriptorTagDomain domain
Definition: si.h:425
Descriptor * getNext(Iterator &it)
Definition: si.c:112
Descriptor * createDescriptor(int &i, bool returnUnimplemetedDescriptor)
Definition: si.c:159
DescriptorTag getDescriptorTag() const
Definition: si.c:100
static Descriptor * getDescriptor(CharArray d, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor)
Definition: si.c:530
virtual int getLength() override
Definition: si.c:96
virtual int getLastDescriptorNumber()=0
virtual int getDescriptorNumber()=0
void reset()
Definition: si.h:325
Definition: si.h:320
virtual void Parse() override
Definition: si.h:334
NumberedSection(const unsigned char *data, bool doCopy=true)
Definition: si.h:275
int getTableIdExtension() const
Definition: si.c:72
bool getCurrentNextIndicator() const
Definition: si.c:80
int getSectionNumber() const
Definition: si.c:88
int getLastSectionNumber() const
Definition: si.c:92
bool moreThanOneSection() const
Definition: si.h:282
int getVersionNumber() const
Definition: si.c:84
Definition: si.h:229
void setData(const unsigned char *data, int size, bool doCopy=true)
Definition: si.c:29
virtual int getLength()=0
bool isValid()
Definition: si.h:237
CharArray getData()
Definition: si.h:235
Object()
Definition: si.c:23
bool checkSize(int offset)
Definition: si.c:37
CharArray data
Definition: si.h:240
TableId getTableId() const
Definition: si.c:45
Section()
Definition: si.h:253
virtual int getLength() override
Definition: si.c:49
Definition: si.h:496
void decodeText(char *buffer, int size, const char **fromCode=NULL)
Definition: si.c:475
char * getText()
Definition: si.c:222
virtual void Parse() override
Definition: si.h:522
T * getNextAsPointer(Iterator &it)
Definition: si.h:357
bool getNext(T &obj, Iterator &it)
Definition: si.h:342
int getCount()
Definition: si.h:435
T getNext(Iterator &it) const
Definition: si.h:452
bool hasNext(Iterator &it)
Definition: si.h:458
T operator[](const int index) const
Definition: si.h:436
void setDataAndOffset(CharArray d, int l, int &offset)
Definition: si.h:292
virtual int getLength() override
Definition: si.h:293
void setData(CharArray d, int l)
Definition: si.h:290
Definition: descriptor.c:16
const char * getCharacterTable(const unsigned char *&buffer, int &length, bool *isSingleByte)
Definition: si.c:364
bool SetSystemCharacterTable(const char *CharacterTable)
Definition: si.c:339
RunningStatus
Definition: si.h:196
@ RunningStatusRunning
Definition: si.h:200
@ RunningStatusUndefined
Definition: si.h:196
@ RunningStatusPausing
Definition: si.h:199
@ RunningStatusNotRunning
Definition: si.h:197
@ RunningStatusStartsInAFewSeconds
Definition: si.h:198
AudioType
Definition: si.h:216
@ AudioTypeVisualImpairedCommentary
Definition: si.h:219
@ AudioTypeHearingImpaired
Definition: si.h:218
@ AudioTypeCleanEffects
Definition: si.h:217
@ AudioTypeUndefined
Definition: si.h:216
size_t convertCharacterTable(const char *from, size_t fromLength, char *to, size_t toLength, const char *fromCode)
Definition: si.c:414
uint32_t ThirtyTwoBit
Definition: si.h:430
uint64_t SixtyFourBit
Definition: si.h:431
uint16_t SixteenBit
Definition: si.h:429
TableId
Definition: si.h:23
@ TableIdBAT
Definition: si.h:31
@ TableIdEIT_schedule_Other_last
Definition: si.h:39
@ TableIdAIT
Definition: si.h:46
@ TableIdDIT
Definition: si.h:44
@ TableIdNIT_other
Definition: si.h:28
@ TableIdTDT
Definition: si.h:40
@ TableIdEIT_schedule_last
Definition: si.h:36
@ TableIdST
Definition: si.h:42
@ TableIdTSDT
Definition: si.h:26
@ TableIdEIT_schedule_first
Definition: si.h:35
@ TableIdEIT_presentFollowing
Definition: si.h:32
@ TableIdNIT
Definition: si.h:27
@ TableIdEIT_presentFollowing_other
Definition: si.h:33
@ TableIdPremiereCIT
Definition: si.h:47
@ TableIdCAT
Definition: si.h:24
@ TableIdEIT_schedule_Other_first
Definition: si.h:38
@ TableIdRST
Definition: si.h:41
@ TableIdTOT
Definition: si.h:43
@ TableIdPAT
Definition: si.h:23
@ TableIdPMT
Definition: si.h:25
@ TableIdSDT
Definition: si.h:29
@ TableIdSIT
Definition: si.h:45
@ TableIdSDT_other
Definition: si.h:30
DescriptorTagDomain
Definition: si.h:194
@ PCIT
Definition: si.h:194
@ SI
Definition: si.h:194
@ MHP
Definition: si.h:194
bool systemCharacterTableIsSingleByte(void)
Definition: si.c:317
DescriptorTag
Definition: si.h:50
@ AudioStreamDescriptorTag
Definition: si.h:53
@ PreferredNameListDescriptorTag
Definition: si.h:142
@ ECMRepetitionRateDescriptorTag
Definition: si.h:134
@ TVAIdDescriptorTag
Definition: si.h:131
@ MHP_PrefetchDescriptorTag
Definition: si.h:181
@ MocaicDescriptorTag
Definition: si.h:94
@ T2MIDescriptorTag
Definition: si.h:164
@ DTSDescriptorTag
Definition: si.h:137
@ CopyrightDescriptorTag
Definition: si.h:63
@ MHP_SimpleApplicationLocationDescriptorTag
Definition: si.h:184
@ StreamIdentifierDescriptorTag
Definition: si.h:95
@ VideoWindowDescriptorTag
Definition: si.h:58
@ MultiplexBufferUtilizationDescriptorTag
Definition: si.h:62
@ RelatedContentDescriptorTag
Definition: si.h:130
@ MultilingualComponentDescriptorTag
Definition: si.h:107
@ NVODReferenceDescriptorTag
Definition: si.h:88
@ EnhancedAC3DescriptorTag
Definition: si.h:136
@ TeletextDescriptorTag
Definition: si.h:99
@ ServiceMoveDescriptorTag
Definition: si.h:109
@ SupplementaryAudioDescriptorTag
Definition: si.h:153
@ ServiceDescriptorTag
Definition: si.h:85
@ PrivateDataSpecifierDescriptorTag
Definition: si.h:108
@ ScramblingDescriptorTag
Definition: si.h:114
@ NetworkChangeNotifyDescriptorTag
Definition: si.h:154
@ SVCExtensionDescriptorTag
Definition: si.h:74
@ ServiceRelocatedDescriptorTag
Definition: si.h:158
@ PartialTransportStreamDescriptorTag
Definition: si.h:112
@ CountryAvailabilityDescriptorTag
Definition: si.h:86
@ CaDescriptorTag
Definition: si.h:59
@ TargetRegionDescriptorTag
Definition: si.h:156
@ ImageIconDescriptorTag
Definition: si.h:147
@ PreferredNameIdentifierDescriptorTag
Definition: si.h:143
@ CarouselIdentifierDescriptorTag
Definition: si.h:70
@ DataBroadcastDescriptorTag
Definition: si.h:113
@ ExtendedEventDescriptorTag
Definition: si.h:91
@ VBITeletextDescriptorTag
Definition: si.h:83
@ S2SatelliteDeliverySystemDescriptorTag
Definition: si.h:135
@ MHP_DVBHTMLApplicationDescriptorTag
Definition: si.h:177
@ CableDeliverySystemDescriptorTag
Definition: si.h:81
@ ShortEventDescriptorTag
Definition: si.h:90
@ PrivateDataIndicatorDescriptorTag
Definition: si.h:65
@ UnimplementedDescriptorTag
Definition: si.h:191
@ ServiceAvailabilityDescriptorTag
Definition: si.h:127
@ MaximumBitrateDescriptorTag
Definition: si.h:64
@ C2DeliverySystemDescriptorTag
Definition: si.h:161
@ CaIdentifierDescriptorTag
Definition: si.h:96
@ ComponentDescriptorTag
Definition: si.h:93
@ AVCDescriptorTag
Definition: si.h:73
@ ExtensionDescriptorTag
Definition: si.h:139
@ TransportStreamDescriptorTag
Definition: si.h:116
@ HdSimulcastLogicalChannelDescriptorTag
Definition: si.h:145
@ VideoDepthRangeDescriptorTag
Definition: si.h:163
@ MHP_DelegatedApplicationDescriptorTag
Definition: si.h:182
@ TimeShiftedServiceDescriptorTag
Definition: si.h:89
@ ServiceIdentifierDescriptorTag
Definition: si.h:126
@ MultilingualNetworkNameDescriptorTag
Definition: si.h:104
@ MHP_ApplicationIconsDescriptorTag
Definition: si.h:180
@ CPIdentifierDescriptorTag
Definition: si.h:150
@ CPDescriptorTag
Definition: si.h:149
@ ShortSmoothingBufferDescriptorTag
Definition: si.h:110
@ PremiereContentTransmissionDescriptorTag
Definition: si.h:187
@ MessageDescriptorTag
Definition: si.h:155
@ DataStreamAlignmentDescriptorTag
Definition: si.h:56
@ LocalTimeOffsetDescriptorTag
Definition: si.h:101
@ TargetBackgroundGridDescriptorTag
Definition: si.h:57
@ EacemStreamIdentifierDescriptorTag
Definition: si.h:144
@ MultilingualServiceNameDescriptorTag
Definition: si.h:106
@ TelephoneDescriptorTag
Definition: si.h:100
@ MHP_ExternalApplicationAuthorisationDescriptorTag
Definition: si.h:174
@ MHP_TransportProtocolDescriptorTag
Definition: si.h:170
@ MHP_DVBHTMLApplicationBoundaryDescriptorTag
Definition: si.h:179
@ VideoStreamDescriptorTag
Definition: si.h:52
@ MVCExtensionDescriptorTag
Definition: si.h:75
@ MHP_SimpleApplicationBoundaryDescriptorTag
Definition: si.h:185
@ TargetRegionNameDescriptorTag
Definition: si.h:157
@ SubtitlingDescriptorTag
Definition: si.h:102
@ ISO639LanguageDescriptorTag
Definition: si.h:60
@ XAITPidDescriptorTag
Definition: si.h:160
@ T2DeliverySystemDescriptorTag
Definition: si.h:151
@ DefaultAuthorityDescriptorTag
Definition: si.h:129
@ CpcmDeliverySignallingDescriptor
Definition: si.h:148
@ MHP_ApplicationStorageDescriptorTag
Definition: si.h:183
@ AncillaryDataDescriptorTag
Definition: si.h:120
@ MHP_DVBJApplicationLocationDescriptorTag
Definition: si.h:172
@ TimeSliceFecIdentifierDescriptorTag
Definition: si.h:133
@ MultilingualBouquetNameDescriptorTag
Definition: si.h:105
@ SystemClockDescriptorTag
Definition: si.h:61
@ ServiceListDescriptorTag
Definition: si.h:78
@ MHP_IPv4RoutingDescriptorTag
Definition: si.h:175
@ MHP_IPv6RoutingDescriptorTag
Definition: si.h:176
@ ParentalRatingDescriptorTag
Definition: si.h:98
@ DataBroadcastIdDescriptorTag
Definition: si.h:115
@ SHDeliverySystemDescriptorTag
Definition: si.h:152
@ StuffingDescriptorTag
Definition: si.h:79
@ PDCDescriptorTag
Definition: si.h:118
@ NetworkNameDescriptorTag
Definition: si.h:77
@ AC3DescriptorTag
Definition: si.h:119
@ RegistrationDescriptorTag
Definition: si.h:55
@ CellListDescriptorTag
Definition: si.h:121
@ SatelliteDeliverySystemDescriptorTag
Definition: si.h:80
@ CellFrequencyLinkDescriptorTag
Definition: si.h:122
@ SmoothingBufferDescriptorTag
Definition: si.h:66
@ IBPDescriptorTag
Definition: si.h:68
@ HierarchyDescriptorTag
Definition: si.h:54
@ MHP_DVBJApplicationDescriptorTag
Definition: si.h:171
@ AdaptationFieldDataDescriptorTag
Definition: si.h:125
@ MHP_DVBHTMLApplicationLocationDescriptorTag
Definition: si.h:178
@ MHP_ApplicationDescriptorTag
Definition: si.h:168
@ BouquetNameDescriptorTag
Definition: si.h:84
@ VBIDataDescriptorTag
Definition: si.h:82
@ ContentDescriptorTag
Definition: si.h:97
@ FrequencyListDescriptorTag
Definition: si.h:111
@ ApplicationSignallingDescriptorTag
Definition: si.h:124
@ TerrestrialDeliverySystemDescriptorTag
Definition: si.h:103
@ TimeShiftedEventDescriptorTag
Definition: si.h:92
@ LogicalChannelDescriptorTag
Definition: si.h:141
@ STDDescriptorTag
Definition: si.h:67
@ LinkageDescriptorTag
Definition: si.h:87
@ AACDescriptorTag
Definition: si.h:138
@ AnnouncementSupportDescriptorTag
Definition: si.h:123
@ DSNGDescriptorTag
Definition: si.h:117
@ MHP_ApplicationNameDescriptorTag
Definition: si.h:169
@ ContentIdentifierDescriptorTag
Definition: si.h:132
LinkageType
Definition: si.h:203
@ LinkageTypePremiere
Definition: si.h:213
@ LinkageTypeTSContainingCompleteNetworkBouquetSi
Definition: si.h:206
@ LinkageTypeServiceReplacementService
Definition: si.h:207
@ LinkageTypeCaReplacementService
Definition: si.h:205
@ LinkageTypeMobileHandover
Definition: si.h:210
@ LinkageTypeEPGService
Definition: si.h:204
@ LinkageTypeDataBroadcastService
Definition: si.h:208
@ LinkageTypeTSContainingSsuBatOrNit
Definition: si.h:212
@ LinkageTypeInformationService
Definition: si.h:203
@ LinkageTypeRCSMap
Definition: si.h:209
@ LinkageTypeSystemSoftwareUpdateService
Definition: si.h:211
uint8_t EightBit
Definition: si.h:428
bool SetOverrideCharacterTable(const char *CharacterTable)
Definition: si.c:324