Skip to main content

wedeo_core/
codec_id.rs

1/// Codec identifier, matching FFmpeg's AVCodecID discriminants for the
2/// codecs we care about. Extend as needed.
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
4#[repr(u32)]
5pub enum CodecId {
6    None = 0,
7
8    // Video codecs
9    Mpeg1video = 1,
10    Mpeg2video = 2,
11    H261 = 3,
12    H263 = 4,
13    Rv10 = 5,
14    Rv20 = 6,
15    Mjpeg = 7,
16    Mpeg4 = 12,
17    Rawvideo = 13,
18    H264 = 27,
19    Vp8 = 139,  // AV_CODEC_ID_VP8
20    Vp9 = 167,  // AV_CODEC_ID_VP9
21    Hevc = 173, // AV_CODEC_ID_HEVC
22    Av1 = 225,  // AV_CODEC_ID_AV1
23
24    // Audio codecs — start at 0x10000 per FFmpeg
25    PcmS16le = 0x10000,
26    PcmS16be = 0x10001,
27    PcmU16le = 0x10002,
28    PcmU16be = 0x10003,
29    PcmS8 = 0x10004,
30    PcmU8 = 0x10005,
31    PcmMulaw = 0x10006,
32    PcmAlaw = 0x10007,
33    PcmS32le = 0x10008,
34    PcmS32be = 0x10009,
35    PcmU32le = 0x1000A,
36    PcmU32be = 0x1000B,
37    PcmS24le = 0x1000C,
38    PcmS24be = 0x1000D,
39    PcmU24le = 0x1000E,
40    PcmU24be = 0x1000F,
41    PcmF32be = 0x10014,
42    PcmF32le = 0x10015,
43    PcmF64be = 0x10016,
44    PcmF64le = 0x10017,
45
46    // ADPCM codecs — start at 0x11000 per FFmpeg
47    AdpcmImaWav = 0x11001,
48    AdpcmMs = 0x11006,
49
50    Mp1 = 0x1502A,
51    Mp2 = 0x15000,
52    Mp3 = 0x15001,
53    Aac = 0x15002,
54    Ac3 = 0x15003,
55    Vorbis = 0x15005,
56    Flac = 0x1500C,
57    Alac = 0x15010,
58    WavPack = 0x15019,
59    Opus = 0x1503C,
60
61    // Subtitle codecs — start at 0x17000
62    SubDvdSubtitle = 0x17000,
63    SubDvbSubtitle = 0x17001,
64    SubText = 0x17002,
65    SubXsub = 0x17003,
66    SubSsa = 0x17004,
67    SubMovText = 0x17005,
68    SubSrt = 0x17008,
69    SubWebvtt = 0x17012,
70}
71
72impl CodecId {
73    pub fn name(self) -> &'static str {
74        match self {
75            CodecId::None => "none",
76            CodecId::Mpeg1video => "mpeg1video",
77            CodecId::Mpeg2video => "mpeg2video",
78            CodecId::H261 => "h261",
79            CodecId::H263 => "h263",
80            CodecId::Rv10 => "rv10",
81            CodecId::Rv20 => "rv20",
82            CodecId::Mjpeg => "mjpeg",
83            CodecId::Mpeg4 => "mpeg4",
84            CodecId::Rawvideo => "rawvideo",
85            CodecId::H264 => "h264",
86            CodecId::Vp8 => "vp8",
87            CodecId::Vp9 => "vp9",
88            CodecId::Av1 => "av1",
89            CodecId::Hevc => "hevc",
90            CodecId::PcmS16le => "pcm_s16le",
91            CodecId::PcmS16be => "pcm_s16be",
92            CodecId::PcmU16le => "pcm_u16le",
93            CodecId::PcmU16be => "pcm_u16be",
94            CodecId::PcmS8 => "pcm_s8",
95            CodecId::PcmU8 => "pcm_u8",
96            CodecId::PcmMulaw => "pcm_mulaw",
97            CodecId::PcmAlaw => "pcm_alaw",
98            CodecId::PcmS32le => "pcm_s32le",
99            CodecId::PcmS32be => "pcm_s32be",
100            CodecId::PcmU32le => "pcm_u32le",
101            CodecId::PcmU32be => "pcm_u32be",
102            CodecId::PcmS24le => "pcm_s24le",
103            CodecId::PcmS24be => "pcm_s24be",
104            CodecId::PcmU24le => "pcm_u24le",
105            CodecId::PcmU24be => "pcm_u24be",
106            CodecId::PcmF32le => "pcm_f32le",
107            CodecId::PcmF32be => "pcm_f32be",
108            CodecId::PcmF64le => "pcm_f64le",
109            CodecId::PcmF64be => "pcm_f64be",
110            CodecId::AdpcmImaWav => "adpcm_ima_wav",
111            CodecId::AdpcmMs => "adpcm_ms",
112            CodecId::Mp1 => "mp1",
113            CodecId::Mp2 => "mp2",
114            CodecId::Mp3 => "mp3",
115            CodecId::Aac => "aac",
116            CodecId::Ac3 => "ac3",
117            CodecId::Vorbis => "vorbis",
118            CodecId::Flac => "flac",
119            CodecId::Alac => "alac",
120            CodecId::WavPack => "wavpack",
121            CodecId::Opus => "opus",
122            CodecId::SubDvdSubtitle => "dvd_subtitle",
123            CodecId::SubDvbSubtitle => "dvb_subtitle",
124            CodecId::SubText => "text",
125            CodecId::SubXsub => "xsub",
126            CodecId::SubSsa => "ssa",
127            CodecId::SubMovText => "mov_text",
128            CodecId::SubSrt => "srt",
129            CodecId::SubWebvtt => "webvtt",
130        }
131    }
132}