pub const GRANULE_LINES: usize = 576;
pub const SUBBANDS: usize = 32;
pub const SUBBAND_LINES: usize = 18;
pub const SFB_LONG: usize = 22;
pub const SFB_SHORT: usize = 13;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ChannelMode {
Stereo,
JointStereo {
ms_stereo: bool,
intensity_stereo: bool,
},
DualMono,
#[default]
Mono,
}
impl ChannelMode {
pub fn channels(self) -> usize {
match self {
ChannelMode::Mono => 1,
_ => 2,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum BlockType {
#[default]
Long,
Start,
Short,
Stop,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct GranuleSideInfo {
pub part2_3_length: u16,
pub big_values: u16,
pub global_gain: u8,
pub scalefac_compress: u16,
pub window_switching: bool,
pub block_type: BlockType,
pub mixed_block: bool,
pub table_select: [u8; 3],
pub subblock_gain: [u8; 3],
pub region0_count: u8,
pub region1_count: u8,
pub preflag: bool,
pub scalefac_scale: bool,
pub count1table_select: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct SideInfo {
pub main_data_begin: u16,
pub private_bits: u8,
pub scfsi: [[bool; 4]; 2],
pub granules: [[GranuleSideInfo; 2]; 2],
}
#[derive(Debug, Clone)]
pub struct GranuleSpectrum {
pub lines: [[f32; GRANULE_LINES]; 2],
pub nonzero: [usize; 2],
}
impl Default for GranuleSpectrum {
fn default() -> Self {
GranuleSpectrum {
lines: [[0.0; GRANULE_LINES]; 2],
nonzero: [0; 2],
}
}
}