#[derive(Debug, Clone, Copy, PartialEq)]
#[repr(u8)]
pub enum FrameCountCode {
Single = 0,
DoubleEqual = 1,
DoubleDifferent = 2,
Arbitrary = 3,
}
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum Mode {
SILK,
CELT,
HYBRID,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum Bandwidth {
Narrow,
Medium,
Wide,
SuperWide,
Full,
}
impl Bandwidth {
#[inline]
pub const fn audio_band_width(&self) -> u16 {
match self {
Bandwidth::Narrow => 4000,
Bandwidth::Medium => 6000,
Bandwidth::Wide => 8000,
Bandwidth::SuperWide => 12000,
Bandwidth::Full => 20000,
}
}
#[inline]
pub const fn sample_rate(&self) -> u16 {
match self {
Bandwidth::Narrow => 8000,
Bandwidth::Medium => 12000,
Bandwidth::Wide => 16000,
Bandwidth::SuperWide => 24000,
Bandwidth::Full => 48000,
}
}
#[inline]
pub const fn samples_in_subframe(&self) -> u8 {
match self {
Bandwidth::Narrow => 40,
Bandwidth::Medium => 60,
Bandwidth::Wide => 80,
_ => 0,
}
}
}
#[derive(Clone, Copy, PartialEq)]
pub enum FrameDuration {
Ms2_5,
Ms5,
Ms10,
Ms20,
Ms40,
Ms60,
}
impl core::fmt::Debug for FrameDuration {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
FrameDuration::Ms2_5 => write!(f, "2.5 ms"),
FrameDuration::Ms5 => write!(f, "5 ms"),
FrameDuration::Ms10 => write!(f, "10 ms"),
FrameDuration::Ms20 => write!(f, "20 ms"),
FrameDuration::Ms40 => write!(f, "40 ms"),
FrameDuration::Ms60 => write!(f, "60 ms"),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct Packet<'a> {
frame_count_code: FrameCountCode,
variable_bitrate: bool,
stereo: bool,
opus_padding: u16,
mode: Mode,
bandwidth: Bandwidth,
frame_duration: FrameDuration,
raw_data: &'a [u8],
}