1use crate::{Error, Result};
2
3#[allow(missing_docs)]
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum StreamType {
7 Mpeg1Video = 0x01,
8 Mpeg2Video = 0x02,
9 Mpeg1Audio = 0x03,
10 Mpeg2HalvedSampleRateAudio = 0x04,
11 Mpeg2TabledData = 0x05,
12 Mpeg2PacketizedData = 0x06,
13 Mheg = 0x07,
14 DsmCc = 0x08,
15 AuxiliaryData09 = 0x09,
16 DsmCcMultiprotocolEncapsulation = 0x0A,
17 DsmCcUnMessages = 0x0B,
18 DsmCcStreamDescriptors = 0x0C,
19 DsmCcTabledData = 0x0D,
20 AuxiliaryData0e = 0x0E,
21 AdtsAac = 0x0F,
22 Mpeg4H263BasedVideo = 0x10,
23 Mpeg4LoasMultiFormatFramedAudio = 0x11,
24 Mpeg4FlexMux = 0x12,
25 Mpeg4FlexMuxInTable = 0x13,
26 DsmCcSynchronizedDownloadProtocol = 0x14,
27 PacketizedMetadata = 0x15,
28 SectionedMetadata = 0x16,
29 DsmCcDataCarouselMetadata = 0x17,
30 DsmCcObjectCarouselMetadata = 0x18,
31 SynchronizedDownloadProtocolMetadata = 0x19,
32 Ipmp = 0x1A,
33 H264 = 0x1B,
34 H265 = 0x24,
35 ChineseVideoStandard = 0x42,
36 PcmAudio = 0x80,
37 DolbyDigitalUpToSixChannelAudio = 0x81,
38 Dts6ChannelAudio = 0x82,
39 DolbyTrueHdLosslessAudio = 0x83,
40 DolbyDigitalPlusUpTo16ChannelAudio = 0x84,
41 Dts8ChannelAudio = 0x85,
42 Dts8ChannelLosslessAudio = 0x86,
43 DolbyDigitalPlusUpTo16ChannelAudioForAtsc = 0x87,
44 PresentationGraphicStream = 0x90,
45 AtscDsmCcNetworkResourcesTable = 0x91,
46 DigiCipher2Text = 0xC0,
47 DolbyDigitalUpToSixChannelAudioWithAes128Cbc = 0xC1,
48 DolbyDigitalPlusUpToSixChannelAudioWithAes128Cbc = 0xC2,
49 AdtsAacWithAes128Cbc = 0xCF,
50 UltraHdVideo = 0xD1,
51 H264WithAes128Cbc = 0xDB,
52 MicrosoftWindowsMediaVideo9 = 0xEA,
53}
54impl StreamType {
55 pub fn from_u8(n: u8) -> Result<Self> {
57 Ok(match n {
58 0x01 => StreamType::Mpeg1Video,
59 0x02 => StreamType::Mpeg2Video,
60 0x03 => StreamType::Mpeg1Audio,
61 0x04 => StreamType::Mpeg2HalvedSampleRateAudio,
62 0x05 => StreamType::Mpeg2TabledData,
63 0x06 => StreamType::Mpeg2PacketizedData,
64 0x07 => StreamType::Mheg,
65 0x08 => StreamType::DsmCc,
66 0x09 => StreamType::AuxiliaryData09,
67 0x0A => StreamType::DsmCcMultiprotocolEncapsulation,
68 0x0B => StreamType::DsmCcUnMessages,
69 0x0C => StreamType::DsmCcStreamDescriptors,
70 0x0D => StreamType::DsmCcTabledData,
71 0x0E => StreamType::AuxiliaryData0e,
72 0x0F => StreamType::AdtsAac,
73 0x10 => StreamType::Mpeg4H263BasedVideo,
74 0x11 => StreamType::Mpeg4LoasMultiFormatFramedAudio,
75 0x12 => StreamType::Mpeg4FlexMux,
76 0x13 => StreamType::Mpeg4FlexMuxInTable,
77 0x14 => StreamType::DsmCcSynchronizedDownloadProtocol,
78 0x15 => StreamType::PacketizedMetadata,
79 0x16 => StreamType::SectionedMetadata,
80 0x17 => StreamType::DsmCcDataCarouselMetadata,
81 0x18 => StreamType::DsmCcObjectCarouselMetadata,
82 0x19 => StreamType::SynchronizedDownloadProtocolMetadata,
83 0x1A => StreamType::Ipmp,
84 0x1B => StreamType::H264,
85 0x24 => StreamType::H265,
86 0x42 => StreamType::ChineseVideoStandard,
87 0x80 => StreamType::PcmAudio,
88 0x81 => StreamType::DolbyDigitalUpToSixChannelAudio,
89 0x82 => StreamType::Dts6ChannelAudio,
90 0x83 => StreamType::DolbyTrueHdLosslessAudio,
91 0x84 => StreamType::DolbyDigitalPlusUpTo16ChannelAudio,
92 0x85 => StreamType::Dts8ChannelAudio,
93 0x86 => StreamType::Dts8ChannelLosslessAudio,
94 0x87 => StreamType::DolbyDigitalPlusUpTo16ChannelAudioForAtsc,
95 0x90 => StreamType::PresentationGraphicStream,
96 0x91 => StreamType::AtscDsmCcNetworkResourcesTable,
97 0xC0 => StreamType::DigiCipher2Text,
98 0xC1 => StreamType::DolbyDigitalUpToSixChannelAudioWithAes128Cbc,
99 0xC2 => StreamType::DolbyDigitalPlusUpToSixChannelAudioWithAes128Cbc,
100 0xCF => StreamType::AdtsAacWithAes128Cbc,
101 0xD1 => StreamType::UltraHdVideo,
102 0xDB => StreamType::H264WithAes128Cbc,
103 0xEA => StreamType::MicrosoftWindowsMediaVideo9,
104 _ => return Err(Error::invalid_input(format!("Unknown stream type: {n}"))),
105 })
106 }
107}