pub enum SubframeHeaderType {
Constant,
Verbatim,
Fixed {
order: u8,
},
Lpc {
order: NonZero<u8>,
},
}Expand description
A subframe header’s type and order
This is always a 6-bit field.
| Bits | Type | Order |
|---|---|---|
000000 | CONSTANT | N/A |
000001 | VERBATIM | N/A |
000010 to 000111 | reserved | N/A |
001000 to 001100 | FIXED | v - 8 |
001101 to 011111 | reserved | N/A |
100000 to 111111 | LPC | v - 31 |
Variants§
Constant
All samples are the same
§Example
use flac_codec::stream::SubframeHeaderType;
use bitstream_io::{BitReader, BitRead, BigEndian};
let data: &[u8] = &[0b0_000000_0];
let mut r = BitReader::endian(data, BigEndian);
r.skip(1).unwrap(); // pad bit
assert_eq!(
r.parse::<SubframeHeaderType>().unwrap(),
SubframeHeaderType::Constant,
);Verbatim
All samples as stored verbatim, without compression
§Example
use flac_codec::stream::SubframeHeaderType;
use bitstream_io::{BitReader, BitRead, BigEndian};
let data: &[u8] = &[0b0_000001_0];
let mut r = BitReader::endian(data, BigEndian);
r.skip(1).unwrap(); // pad bit
assert_eq!(
r.parse::<SubframeHeaderType>().unwrap(),
SubframeHeaderType::Verbatim,
);Fixed
Samples are stored with one of a set of fixed LPC parameters
§Example
use flac_codec::stream::SubframeHeaderType;
use bitstream_io::{BitReader, BitRead, BigEndian};
let data: &[u8] = &[0b0_001100_0];
let mut r = BitReader::endian(data, BigEndian);
r.skip(1).unwrap(); // pad bit
assert_eq!(
r.parse::<SubframeHeaderType>().unwrap(),
SubframeHeaderType::Fixed { order: 0b001100 - 8 }, // order = 4
);Lpc
Samples are stored with dynamic LPC parameters
§Example
use flac_codec::stream::SubframeHeaderType;
use bitstream_io::{BitReader, BitRead, BigEndian};
use std::num::NonZero;
let data: &[u8] = &[0b0_100000_0];
let mut r = BitReader::endian(data, BigEndian);
r.skip(1).unwrap(); // pad bit
assert_eq!(
r.parse::<SubframeHeaderType>().unwrap(),
SubframeHeaderType::Lpc {
order: NonZero::new(0b100000 - 31).unwrap(), // order = 1
},
);Implementations§
Source§impl SubframeHeaderType
impl SubframeHeaderType
Sourcepub const FIXED_COEFFS: [&[i64]; 5]
pub const FIXED_COEFFS: [&[i64]; 5]
A set of FIXED subframe coefficients
Note that these are in the reverse order from how they’re usually presented, simply because we’ll be predicting samples in reverse order.
Trait Implementations§
Source§impl Debug for SubframeHeaderType
impl Debug for SubframeHeaderType
Source§impl FromBitStream for SubframeHeaderType
impl FromBitStream for SubframeHeaderType
Source§impl PartialEq for SubframeHeaderType
impl PartialEq for SubframeHeaderType
Source§impl ToBitStream for SubframeHeaderType
impl ToBitStream for SubframeHeaderType
impl Eq for SubframeHeaderType
impl StructuralPartialEq for SubframeHeaderType
Auto Trait Implementations§
impl Freeze for SubframeHeaderType
impl RefUnwindSafe for SubframeHeaderType
impl Send for SubframeHeaderType
impl Sync for SubframeHeaderType
impl Unpin for SubframeHeaderType
impl UnwindSafe for SubframeHeaderType
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more