4 #ifndef __MPEG2_TS_TABLE_H__
\r
5 #define __MPEG2_TS_TABLE_H__
\r
17 static const int MAX_SECT_LEN = 4096;
\r
18 static const int MAX_DESC_LEN = 255;
\r
20 // 6.2.1 Bouquet name descriptor
\r
21 typedef struct _BouquetNameDescriptor
\r
23 uint8_t descriptor_tag; // 8
\r
24 uint8_t descriptor_length; // 8
\r
25 uint8_t descriptor[MAX_DESC_LEN]; // 8 x N
\r
26 } BouquetNameDescriptor;
\r
28 // 6.2.4 Content descriptor
\r
29 typedef struct _ContentDescriptor
\r
31 uint8_t descriptor_tag; // 8
\r
32 uint8_t descriptor_length; // 8
\r
35 uint8_t content_nibble_level_1; // 4
\r
36 uint8_t content_nibble_level_2; // 4
\r
37 uint8_t user_nibble_1; // 4
\r
38 uint8_t user_nibble_2; // 4
\r
39 } contents[MAX_DESC_LEN/2]; // 16 x N
\r
40 } ContentDescriptor;
\r
42 // 6.2.7 Extended event descriptor
\r
43 typedef struct _ExtendedEventDescriptor
\r
45 uint8_t descriptor_tag; // 8
\r
46 uint8_t descriptor_length; // 8
\r
47 uint8_t descriptor_number; // 4
\r
48 uint8_t last_descriptor_number; // 4
\r
49 uint8_t ISO_639_language_code[3]; // 24
\r
50 uint8_t length_of_items; // 8
\r
54 uint8_t item_description_length; // 8
\r
55 uint8_t item_description[MAX_DESC_LEN]; // 8 x N
\r
56 uint8_t item_length; // 8
\r
57 uint8_t item[MAX_DESC_LEN]; // 8 x N
\r
58 } items[MAX_DESC_LEN/2];
\r
59 uint8_t text_length; // 8
\r
60 uint8_t text[MAX_DESC_LEN]; // 8 x N
\r
61 } ExtendedEventDescriptor;
\r
63 // 6.2.13 Service descriptor
\r
64 typedef struct _ServiceDescriptor
\r
66 uint8_t descriptor_tag; // 8
\r
67 uint8_t descriptor_length; // 8
\r
68 uint8_t service_type; // 8
\r
69 uint8_t service_provider_name_length; // 8
\r
70 uint8_t service_provider_name[MAX_DESC_LEN]; // 8 x N
\r
71 uint8_t service_name_length; // 8
\r
72 uint8_t service_name[MAX_DESC_LEN]; // 8 x N
\r
73 } ServiceDescriptor;
\r
75 // 6.2.15 Short event descriptor
\r
76 typedef struct _ShortEventDescriptor
\r
78 uint8_t descriptor_tag; // 8
\r
79 uint8_t descriptor_length; // 8
\r
80 uint8_t ISO_639_language_code[3]; // 24
\r
81 uint8_t event_name_length; // 8
\r
82 uint8_t event_name[MAX_DESC_LEN]; // 8 x N
\r
83 uint8_t text_length; // 8
\r
84 uint8_t text[MAX_DESC_LEN]; // 8 x N
\r
85 } ShortEventDescriptor;
\r
87 // 6.2.33 Series descriptor
\r
88 typedef struct _SeriesDescriptor
\r
90 uint8_t descriptor_tag; // 8
\r
91 uint8_t descriptor_length; // 8
\r
92 uint16_t series_id; // 16
\r
93 uint8_t repeat_label; // 4
\r
94 uint8_t program_pattern; // 3
\r
95 uint8_t expire_date_valid_flag; // 1
\r
96 uint16_t expire_date; // 16
\r
97 uint16_t episode_number; // 12
\r
98 uint16_t last_episode_number; // 12
\r
99 uint8_t series_name[MAX_DESC_LEN]; // 8 x N
\r
100 } SeriesDescriptor;
\r
103 typedef struct _OtherDescriptor
\r
105 uint8_t descriptor_tag; // 8
\r
106 uint8_t descriptor_length; // 8
\r
107 uint8_t descriptor[MAX_DESC_LEN]; // 8 x N
\r
110 typedef union _Descriptor
\r
112 uint8_t descriptor_tag;
\r
113 BouquetNameDescriptor bouquet_name;
\r
114 ServiceDescriptor service;
\r
115 ShortEventDescriptor short_event;
\r
116 ExtendedEventDescriptor extended_event;
\r
117 ContentDescriptor content;
\r
118 SeriesDescriptor series;
\r
119 OtherDescriptor other;
\r
125 TABLE_ID_PAT = 0x00,
\r
126 TABLE_ID_PMT = 0x02
\r
131 TAG_BOUQUET_NAME_DESCRIPTOR = 0x47,
\r
132 TAG_SERVICE_DESCRIPTOR = 0x48,
\r
133 TAG_SHORT_EVENT_DESCRIPTOR = 0x4D,
\r
134 TAG_EXTENDED_EVENT_DESCRIPTOR = 0x4E,
\r
135 TAG_CONTENT_DESCRIPTOR = 0x54,
\r
136 TAG_SERIES_DESCRIPTOR = 0xD5,
\r
143 uint8_t _continuty_counter;
\r
145 uint8_t _section[MAX_SECT_LEN];
\r
147 virtual bool decode_section();
\r
153 bool decode(uint8_t *packet);
\r
154 virtual void reset();
\r
156 static uint16_t parseDescriptor(uint8_t *buf, uint16_t length, Descriptor *descriptor);
\r