va_ts/descriptor/
tag.rs

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    // 0x40...0x7F
128    DVB(TagDVB),
129
130    // 0x00...0x01
131    // 0x37...0x3F
132    Reserved(u8),
133
134    // 0x80...0x9F | 0xA1...0xCF
135    ATSC(u8),
136
137    // 0xD0...0xDF
138    ISDB(u8),
139
140    // 0xE0...0xE9
141    CableLabs(u8),
142
143    // 0xEA...0xFE
144    Other(u8),
145
146    // 0xFF
147    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}