1#[derive(Clone, Debug)]
2pub enum TagDVB {
3 NetworkName,
4 ServiceList,
5 Stuffing,
6 SatelliteDeliverySystem,
7 CableDeliverySystem,
8 VBIData,
9 VBITeletext,
10 BouquetName,
11 Service,
12 CountryAvailability,
13 Linkage,
14 NVODReference,
15 TimeShiftedService,
16 ShortEvent,
17 ExtendedEvent,
18 TimeShiftedEvent,
19 Component,
20 Mosaic,
21 StreamIdentifier,
22 CAIdentifier,
23 Content,
24 ParentalRating,
25 Teletext,
26 Telephone,
27 LocalTimeOffset,
28 Subtitling,
29 TerrestrialDeliverySystem,
30 MultilingualNetworkName,
31 MultilingualBouquetName,
32 MultilingualServiceName,
33 MultilingualComponent,
34 PrivateDataSpecifier,
35 ServiceMove,
36 ShortSmoothingBuffer,
37 FrequencyList,
38 PartialTransportStream,
39 DataBroadcast,
40 Scrambling,
41 DataBroadcastId,
42 TransportStream,
43 DSNG,
44 PDC,
45 AC3,
46 AncillaryData,
47 CellList,
48 CellFrequencyLink,
49 AnnouncementSupport,
50 ApplicationSignalling,
51 AdaptationFieldData,
52 ServiceIdentifier,
53 ServiceAvailability,
54 DefaultAuthority,
55 RelatedContent,
56 TVAId,
57 ContentIdentifier,
58 TimeSliceFecIdentifier,
59 ECMRepetitionRate,
60 S2SatelliteDeliverySystem,
61 EnhancedAC3,
62 DTSDescriptor,
63 AAC,
64 XAITLocation,
65 FTAContentManagement,
66 Extension,
67}
68
69#[derive(Clone, Debug)]
70pub enum Tag {
71 VH2621381811172,
72 A1381811172,
73 Hierarchy,
74 RegistrationPrivate,
75 DataStreamAlignment,
76 TargetBackgroundGrid,
77 VideoWindow,
78 CASEMMECMPID,
79 ISO639,
80 SystemClockExternalReference,
81 MultiplexBufferUtilizationBounds,
82 CopyrightIdentificationSystemAndReference,
83 MaximumBitRate,
84 PrivateDataIndicator,
85 SmoothingBuffer,
86 STDVideoBufferLeakControl,
87 IBPVideoIFrameIndicator,
88 DSMCCCarouselIdentifier,
89 DSMCCAssociationTag,
90 DSMCCDeferredAssociationTag,
91 DSMCCReserved,
92 DSMCCNPTReference,
93 DSMCCNPTEndpoint,
94 DSMCCStreamMode,
95 DSMCCStreamEvent,
96 VideoStreamHeaderParametersMPEG4H263Based,
97 AudioStreamHeaderParametersMPEG4LOASMultiFormatFramed,
98 IODParametersForISOIEC144961,
99 SLParametersForISOIEC144961,
100 FMCParametersForISOIEC144961,
101 ExternalESIdentifierForISOIEC144961,
102 MuxCodeForISOIEC144961,
103 FMXBufferSizeForISOIEC144961,
104 MultiplexBufferForISOIEC144961,
105 ContentLabelingForISOIEC144961,
106 MetadataPointer,
107 Metadata,
108 MetadataSTD,
109 VideoStreamHeaderParametersForITUTRecH264AndISOIEC1449610,
110 ISOIEC1381811IPMPDRM,
111 TimingAndHRDForITUTRecH264andISOIEC1449610,
112 AudioStreamHeaderParametersForISOIEC138187ADTSAAC,
113 FlexMuxTimingForISOIEC144961,
114 TextStreamHeaderParametersForISOIEC14496,
115 AudioExtensionStreamHeaderParametersForISOIEC144963MPEG4LOASMultiFormatFramed,
116 VideoAuxiliaryStreamHeaderParameters,
117 VideoScalableStreamHeaderParameters,
118 VideoMultiStreamHeaderParameters,
119 VideoStreamHeaderParametersForITUTRecT800AndISOIEC15444,
120 VideoMultiOperationPointStreamHeaderParameters,
121 VideoStereoscopic3DStreamHeaderParametersForITUTRecH262ISOIEC138182AndISOIEC111722,
122 ProgramStereoscopic3DInformation,
123 VideoStereoscopic3DInformation,
124
125 VideoLANFourCCVideoSizeAndCodecInitializationData,
126
127 DVB(TagDVB),
129
130 Reserved(u8),
133
134 ATSC(u8),
136
137 ISDB(u8),
139
140 CableLabs(u8),
142
143 Other(u8),
145
146 Forbidden,
148}
149
150impl Tag {
151 #[inline(always)]
152 pub fn is_dvb_service(&self) -> bool {
153 match self {
154 Tag::DVB(TagDVB::Service) => true,
155 _ => false,
156 }
157 }
158
159 #[inline(always)]
160 pub fn is_dvb_short_event(&self) -> bool {
161 match self {
162 Tag::DVB(TagDVB::ShortEvent) => true,
163 _ => false,
164 }
165 }
166}
167
168impl From<u8> for Tag {
169 fn from(d: u8) -> Self {
170 match d {
171 0x02 => Tag::VH2621381811172,
172 0x03 => Tag::A1381811172,
173 0x04 => Tag::Hierarchy,
174 0x05 => Tag::RegistrationPrivate,
175 0x06 => Tag::DataStreamAlignment,
176 0x07 => Tag::TargetBackgroundGrid,
177 0x08 => Tag::VideoWindow,
178 0x09 => Tag::CASEMMECMPID,
179 0x0A => Tag::ISO639,
180 0x0B => Tag::SystemClockExternalReference,
181 0x0C => Tag::MultiplexBufferUtilizationBounds,
182 0x0D => Tag::CopyrightIdentificationSystemAndReference,
183 0x0E => Tag::MaximumBitRate,
184 0x0F => Tag::PrivateDataIndicator,
185 0x10 => Tag::SmoothingBuffer,
186 0x11 => Tag::STDVideoBufferLeakControl,
187 0x12 => Tag::IBPVideoIFrameIndicator,
188 0x13 => Tag::DSMCCCarouselIdentifier,
189 0x14 => Tag::DSMCCAssociationTag,
190 0x15 => Tag::DSMCCDeferredAssociationTag,
191 0x16 => Tag::DSMCCReserved,
192 0x17 => Tag::DSMCCNPTReference,
193 0x18 => Tag::DSMCCNPTEndpoint,
194 0x19 => Tag::DSMCCStreamMode,
195 0x1A => Tag::DSMCCStreamEvent,
196 0x1B => Tag::VideoStreamHeaderParametersMPEG4H263Based,
197 0x1C => Tag::AudioStreamHeaderParametersMPEG4LOASMultiFormatFramed,
198 0x1D => Tag::IODParametersForISOIEC144961,
199 0x1E => Tag::SLParametersForISOIEC144961,
200 0x1F => Tag::FMCParametersForISOIEC144961,
201 0x20 => Tag::ExternalESIdentifierForISOIEC144961,
202 0x21 => Tag::MuxCodeForISOIEC144961,
203 0x22 => Tag::FMXBufferSizeForISOIEC144961,
204 0x23 => Tag::MultiplexBufferForISOIEC144961,
205 0x24 => Tag::ContentLabelingForISOIEC144961,
206 0x25 => Tag::MetadataPointer,
207 0x26 => Tag::Metadata,
208 0x27 => Tag::MetadataSTD,
209 0x28 => Tag::VideoStreamHeaderParametersForITUTRecH264AndISOIEC1449610,
210 0x29 => Tag::ISOIEC1381811IPMPDRM,
211 0x2A => Tag::TimingAndHRDForITUTRecH264andISOIEC1449610,
212 0x2B => Tag::AudioStreamHeaderParametersForISOIEC138187ADTSAAC,
213 0x2C => Tag::FlexMuxTimingForISOIEC144961,
214 0x2D => Tag::TextStreamHeaderParametersForISOIEC14496,
215 0x2E => Tag::AudioExtensionStreamHeaderParametersForISOIEC144963MPEG4LOASMultiFormatFramed,
216 0x2F => Tag::VideoAuxiliaryStreamHeaderParameters,
217 0x30 => Tag::VideoScalableStreamHeaderParameters,
218 0x31 => Tag::VideoMultiStreamHeaderParameters,
219 0x32 => Tag::VideoStreamHeaderParametersForITUTRecT800AndISOIEC15444,
220 0x33 => Tag::VideoMultiOperationPointStreamHeaderParameters,
221 0x34 => Tag::VideoStereoscopic3DStreamHeaderParametersForITUTRecH262ISOIEC138182AndISOIEC111722,
222 0x35 => Tag::ProgramStereoscopic3DInformation,
223 0x36 => Tag::VideoStereoscopic3DInformation,
224
225 0xA0 => Tag::VideoLANFourCCVideoSizeAndCodecInitializationData,
226
227 0x40 => Tag::DVB(TagDVB::NetworkName),
228 0x41 => Tag::DVB(TagDVB::ServiceList),
229 0x42 => Tag::DVB(TagDVB::Stuffing),
230 0x43 => Tag::DVB(TagDVB::SatelliteDeliverySystem),
231 0x44 => Tag::DVB(TagDVB::CableDeliverySystem),
232 0x45 => Tag::DVB(TagDVB::VBIData),
233 0x46 => Tag::DVB(TagDVB::VBITeletext),
234 0x47 => Tag::DVB(TagDVB::BouquetName),
235 0x48 => Tag::DVB(TagDVB::Service),
236 0x49 => Tag::DVB(TagDVB::CountryAvailability),
237 0x4A => Tag::DVB(TagDVB::Linkage),
238 0x4B => Tag::DVB(TagDVB::NVODReference),
239 0x4C => Tag::DVB(TagDVB::TimeShiftedService),
240 0x4D => Tag::DVB(TagDVB::ShortEvent),
241 0x4E => Tag::DVB(TagDVB::ExtendedEvent),
242 0x4F => Tag::DVB(TagDVB::TimeShiftedEvent),
243 0x50 => Tag::DVB(TagDVB::Component),
244 0x51 => Tag::DVB(TagDVB::Mosaic),
245 0x52 => Tag::DVB(TagDVB::StreamIdentifier),
246 0x53 => Tag::DVB(TagDVB::CAIdentifier),
247 0x54 => Tag::DVB(TagDVB::Content),
248 0x55 => Tag::DVB(TagDVB::ParentalRating),
249 0x56 => Tag::DVB(TagDVB::Teletext),
250 0x57 => Tag::DVB(TagDVB::Telephone),
251 0x58 => Tag::DVB(TagDVB::LocalTimeOffset),
252 0x59 => Tag::DVB(TagDVB::Subtitling),
253 0x5A => Tag::DVB(TagDVB::TerrestrialDeliverySystem),
254 0x5B => Tag::DVB(TagDVB::MultilingualNetworkName),
255 0x5C => Tag::DVB(TagDVB::MultilingualBouquetName),
256 0x5D => Tag::DVB(TagDVB::MultilingualServiceName),
257 0x5E => Tag::DVB(TagDVB::MultilingualComponent),
258 0x5F => Tag::DVB(TagDVB::PrivateDataSpecifier),
259 0x60 => Tag::DVB(TagDVB::ServiceMove),
260 0x61 => Tag::DVB(TagDVB::ShortSmoothingBuffer),
261 0x62 => Tag::DVB(TagDVB::FrequencyList),
262 0x63 => Tag::DVB(TagDVB::PartialTransportStream),
263 0x64 => Tag::DVB(TagDVB::DataBroadcast),
264 0x65 => Tag::DVB(TagDVB::Scrambling),
265 0x66 => Tag::DVB(TagDVB::DataBroadcastId),
266 0x67 => Tag::DVB(TagDVB::TransportStream),
267 0x68 => Tag::DVB(TagDVB::DSNG),
268 0x69 => Tag::DVB(TagDVB::PDC),
269 0x6A => Tag::DVB(TagDVB::AC3),
270 0x6B => Tag::DVB(TagDVB::AncillaryData),
271 0x6C => Tag::DVB(TagDVB::CellList),
272 0x6D => Tag::DVB(TagDVB::CellFrequencyLink),
273 0x6E => Tag::DVB(TagDVB::AnnouncementSupport),
274 0x6F => Tag::DVB(TagDVB::ApplicationSignalling),
275 0x70 => Tag::DVB(TagDVB::AdaptationFieldData),
276 0x71 => Tag::DVB(TagDVB::ServiceIdentifier),
277 0x72 => Tag::DVB(TagDVB::ServiceAvailability),
278 0x73 => Tag::DVB(TagDVB::DefaultAuthority),
279 0x74 => Tag::DVB(TagDVB::RelatedContent),
280 0x75 => Tag::DVB(TagDVB::TVAId),
281 0x76 => Tag::DVB(TagDVB::ContentIdentifier),
282 0x77 => Tag::DVB(TagDVB::TimeSliceFecIdentifier),
283 0x78 => Tag::DVB(TagDVB::ECMRepetitionRate),
284 0x79 => Tag::DVB(TagDVB::S2SatelliteDeliverySystem),
285 0x7A => Tag::DVB(TagDVB::EnhancedAC3),
286 0x7B => Tag::DVB(TagDVB::DTSDescriptor),
287 0x7C => Tag::DVB(TagDVB::AAC),
288 0x7D => Tag::DVB(TagDVB::XAITLocation),
289 0x7E => Tag::DVB(TagDVB::FTAContentManagement),
290 0x7F => Tag::DVB(TagDVB::Extension),
291
292 0x00..=0x01 | 0x37..=0x3F => Tag::Reserved(d),
293 0x80..=0x9F | 0xA1..=0xCF => Tag::ATSC(d),
294
295 0xD0..=0xDF => Tag::ISDB(d),
296
297 0xE0..=0xE9 => Tag::CableLabs(d),
298
299 0xEA..=0xFE => Tag::Other(d),
300
301 0xFF => Tag::Forbidden,
302 }
303 }
304}
305
306impl From<Tag> for u8 {
307 fn from(dt: Tag) -> u8 {
308 match dt {
309 Tag::VH2621381811172 => 0x02,
310 Tag::A1381811172 => 0x03,
311 Tag::Hierarchy => 0x04,
312 Tag::RegistrationPrivate => 0x05,
313 Tag::DataStreamAlignment => 0x06,
314 Tag::TargetBackgroundGrid => 0x07,
315 Tag::VideoWindow => 0x08,
316 Tag::CASEMMECMPID => 0x09,
317 Tag::ISO639 => 0x0A,
318 Tag::SystemClockExternalReference => 0x0B,
319 Tag::MultiplexBufferUtilizationBounds => 0x0C,
320 Tag::CopyrightIdentificationSystemAndReference => 0x0D,
321 Tag::MaximumBitRate => 0x0E,
322 Tag::PrivateDataIndicator => 0x0F,
323 Tag::SmoothingBuffer => 0x10,
324 Tag::STDVideoBufferLeakControl => 0x11,
325 Tag::IBPVideoIFrameIndicator => 0x12,
326 Tag::DSMCCCarouselIdentifier => 0x13,
327 Tag::DSMCCAssociationTag => 0x14,
328 Tag::DSMCCDeferredAssociationTag => 0x15,
329 Tag::DSMCCReserved => 0x16,
330 Tag::DSMCCNPTReference => 0x17,
331 Tag::DSMCCNPTEndpoint => 0x18,
332 Tag::DSMCCStreamMode => 0x19,
333 Tag::DSMCCStreamEvent => 0x1A,
334 Tag::VideoStreamHeaderParametersMPEG4H263Based => 0x1B,
335 Tag::AudioStreamHeaderParametersMPEG4LOASMultiFormatFramed => 0x1C,
336 Tag::IODParametersForISOIEC144961 => 0x1D,
337 Tag::SLParametersForISOIEC144961 => 0x1E,
338 Tag::FMCParametersForISOIEC144961 => 0x1F,
339 Tag::ExternalESIdentifierForISOIEC144961 => 0x20,
340 Tag::MuxCodeForISOIEC144961 => 0x21,
341 Tag::FMXBufferSizeForISOIEC144961 => 0x22,
342 Tag::MultiplexBufferForISOIEC144961 => 0x23,
343 Tag::ContentLabelingForISOIEC144961 => 0x24,
344 Tag::MetadataPointer => 0x25,
345 Tag::Metadata => 0x26,
346 Tag::MetadataSTD => 0x27,
347 Tag::VideoStreamHeaderParametersForITUTRecH264AndISOIEC1449610 => 0x28,
348 Tag::ISOIEC1381811IPMPDRM => 0x29,
349 Tag::TimingAndHRDForITUTRecH264andISOIEC1449610 => 0x2A,
350 Tag::AudioStreamHeaderParametersForISOIEC138187ADTSAAC => 0x2B,
351 Tag::FlexMuxTimingForISOIEC144961 => 0x2C,
352 Tag::TextStreamHeaderParametersForISOIEC14496 => 0x2D,
353 Tag::AudioExtensionStreamHeaderParametersForISOIEC144963MPEG4LOASMultiFormatFramed => 0x2E,
354 Tag::VideoAuxiliaryStreamHeaderParameters => 0x2F,
355 Tag::VideoScalableStreamHeaderParameters => 0x30,
356 Tag::VideoMultiStreamHeaderParameters => 0x31,
357 Tag::VideoStreamHeaderParametersForITUTRecT800AndISOIEC15444 => 0x32,
358 Tag::VideoMultiOperationPointStreamHeaderParameters => 0x33,
359 Tag::VideoStereoscopic3DStreamHeaderParametersForITUTRecH262ISOIEC138182AndISOIEC111722 => 0x34,
360 Tag::ProgramStereoscopic3DInformation => 0x35,
361 Tag::VideoStereoscopic3DInformation => 0x36,
362
363 Tag::VideoLANFourCCVideoSizeAndCodecInitializationData => 0xA0,
364
365 Tag::DVB(TagDVB::NetworkName) => 0x40,
366 Tag::DVB(TagDVB::ServiceList) => 0x41,
367 Tag::DVB(TagDVB::Stuffing) => 0x42,
368 Tag::DVB(TagDVB::SatelliteDeliverySystem) => 0x43,
369 Tag::DVB(TagDVB::CableDeliverySystem) => 0x44,
370 Tag::DVB(TagDVB::VBIData) => 0x45,
371 Tag::DVB(TagDVB::VBITeletext) => 0x46,
372 Tag::DVB(TagDVB::BouquetName) => 0x47,
373 Tag::DVB(TagDVB::Service) => 0x48,
374 Tag::DVB(TagDVB::CountryAvailability) => 0x49,
375 Tag::DVB(TagDVB::Linkage) => 0x4A,
376 Tag::DVB(TagDVB::NVODReference) => 0x4B,
377 Tag::DVB(TagDVB::TimeShiftedService) => 0x4C,
378 Tag::DVB(TagDVB::ShortEvent) => 0x4D,
379 Tag::DVB(TagDVB::ExtendedEvent) => 0x4E,
380 Tag::DVB(TagDVB::TimeShiftedEvent) => 0x4F,
381 Tag::DVB(TagDVB::Component) => 0x50,
382 Tag::DVB(TagDVB::Mosaic) => 0x51,
383 Tag::DVB(TagDVB::StreamIdentifier) => 0x52,
384 Tag::DVB(TagDVB::CAIdentifier) => 0x53,
385 Tag::DVB(TagDVB::Content) => 0x54,
386 Tag::DVB(TagDVB::ParentalRating) => 0x55,
387 Tag::DVB(TagDVB::Teletext) => 0x56,
388 Tag::DVB(TagDVB::Telephone) => 0x57,
389 Tag::DVB(TagDVB::LocalTimeOffset) => 0x58,
390 Tag::DVB(TagDVB::Subtitling) => 0x59,
391 Tag::DVB(TagDVB::TerrestrialDeliverySystem) => 0x5A,
392 Tag::DVB(TagDVB::MultilingualNetworkName) => 0x5B,
393 Tag::DVB(TagDVB::MultilingualBouquetName) => 0x5C,
394 Tag::DVB(TagDVB::MultilingualServiceName) => 0x5D,
395 Tag::DVB(TagDVB::MultilingualComponent) => 0x5E,
396 Tag::DVB(TagDVB::PrivateDataSpecifier) => 0x5F,
397 Tag::DVB(TagDVB::ServiceMove) => 0x60,
398 Tag::DVB(TagDVB::ShortSmoothingBuffer) => 0x61,
399 Tag::DVB(TagDVB::FrequencyList) => 0x62,
400 Tag::DVB(TagDVB::PartialTransportStream) => 0x63,
401 Tag::DVB(TagDVB::DataBroadcast) => 0x64,
402 Tag::DVB(TagDVB::Scrambling) => 0x65,
403 Tag::DVB(TagDVB::DataBroadcastId) => 0x66,
404 Tag::DVB(TagDVB::TransportStream) => 0x67,
405 Tag::DVB(TagDVB::DSNG) => 0x68,
406 Tag::DVB(TagDVB::PDC) => 0x69,
407 Tag::DVB(TagDVB::AC3) => 0x6A,
408 Tag::DVB(TagDVB::AncillaryData) => 0x6B,
409 Tag::DVB(TagDVB::CellList) => 0x6C,
410 Tag::DVB(TagDVB::CellFrequencyLink) => 0x6D,
411 Tag::DVB(TagDVB::AnnouncementSupport) => 0x6E,
412 Tag::DVB(TagDVB::ApplicationSignalling) => 0x6F,
413 Tag::DVB(TagDVB::AdaptationFieldData) => 0x70,
414 Tag::DVB(TagDVB::ServiceIdentifier) => 0x71,
415 Tag::DVB(TagDVB::ServiceAvailability) => 0x72,
416 Tag::DVB(TagDVB::DefaultAuthority) => 0x73,
417 Tag::DVB(TagDVB::RelatedContent) => 0x74,
418 Tag::DVB(TagDVB::TVAId) => 0x75,
419 Tag::DVB(TagDVB::ContentIdentifier) => 0x76,
420 Tag::DVB(TagDVB::TimeSliceFecIdentifier) => 0x77,
421 Tag::DVB(TagDVB::ECMRepetitionRate) => 0x78,
422 Tag::DVB(TagDVB::S2SatelliteDeliverySystem) => 0x79,
423 Tag::DVB(TagDVB::EnhancedAC3) => 0x7A,
424 Tag::DVB(TagDVB::DTSDescriptor) => 0x7B,
425 Tag::DVB(TagDVB::AAC) => 0x7C,
426 Tag::DVB(TagDVB::XAITLocation) => 0x7D,
427 Tag::DVB(TagDVB::FTAContentManagement) => 0x7E,
428 Tag::DVB(TagDVB::Extension) => 0x7F,
429
430 Tag::Reserved(d) => d,
431 Tag::ATSC(d) => d,
432
433 Tag::ISDB(d) => d,
434
435 Tag::CableLabs(d) => d,
436
437 Tag::Other(d) => d,
438
439 Tag::Forbidden => 0xFF,
440 }
441 }
442}