pub const FLAC_MARKER: [u8; 4] = *b"fLaC";
pub const FRAME_SYNC_CODE: u16 = 0x3FFE;
pub const MAX_BLOCK_SIZE: u32 = 65535;
pub const MIN_BLOCK_SIZE: u32 = 16;
pub const MAX_LPC_ORDER: usize = 32;
pub const MAX_RICE_PARTITION_ORDER: u8 = 15;
pub const MAX_CHANNELS: u8 = 8;
pub const MAX_BITS_PER_SAMPLE: u8 = 24;
pub const MIN_BITS_PER_SAMPLE: u8 = 4;
pub const STREAMINFO_SIZE: usize = 34;
pub const MD5_SIZE: usize = 16;
pub const MAX_FIXED_ORDER: usize = 4;
pub const FIXED_COEFFICIENTS: [[i32; 4]; 5] = [
[0, 0, 0, 0], [1, 0, 0, 0], [2, -1, 0, 0], [3, -3, 1, 0], [4, -6, 4, -1], ];
pub const SAMPLE_RATE_TABLE: [u32; 12] = [
0, 88200, 176400, 192000, 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000, ];
pub const BLOCK_SIZE_TABLE: [u32; 16] = [
0, 192, 576, 1152, 2304, 4608, 0, 0, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, ];
pub const BITS_PER_SAMPLE_TABLE: [u8; 8] = [
0, 8, 12, 0, 16, 20, 24, 32, ];
pub const fn bits_per_sample_to_code(bits: u8) -> Option<u8> {
match bits {
8 => Some(1),
12 => Some(2),
16 => Some(4),
20 => Some(5),
24 => Some(6),
32 => Some(7),
_ => None,
}
}
pub const fn sample_rate_to_code(rate: u32) -> (u8, u8) {
match rate {
88200 => (1, 0),
176400 => (2, 0),
192000 => (3, 0),
8000 => (4, 0),
16000 => (5, 0),
22050 => (6, 0),
24000 => (7, 0),
32000 => (8, 0),
44100 => (9, 0),
48000 => (10, 0),
96000 => (11, 0),
_ => {
if rate % 1000 == 0 && rate / 1000 <= 255 {
(12, 1)
}
else if rate <= 65535 {
(13, 2)
}
else if rate % 10 == 0 && rate / 10 <= 65535 {
(14, 3)
}
else {
(0, 0)
}
}
}
}
pub const fn block_size_to_code(size: u32) -> (u8, u8) {
match size {
192 => (1, 0),
576 => (2, 0),
1152 => (3, 0),
2304 => (4, 0),
4608 => (5, 0),
256 => (8, 0),
512 => (9, 0),
1024 => (10, 0),
2048 => (11, 0),
4096 => (12, 0),
8192 => (13, 0),
16384 => (14, 0),
32768 => (15, 0),
_ => {
if size <= 256 { (6, 1) } else { (7, 2) }
}
}
}