Struct chd::codecs::CdFlacCodec
source · pub struct CdFlacCodec { /* private fields */ }
codec_api
only.Expand description
CD-ROM wrapper decompression codec (cdfl) using the FLAC for decompression of sector data and the Deflate codec for decompression of subcode data.
§Format Details
FLAC compressed audio data is assumed to be 2-channel 16-bit signed integer PCM. The audio data is decompressed in interleaved format, with the left channel first, then the right channel for each sample, for 32 bits each sample.
CD-ROM wrapped FLAC is always written to the output stream in big-endian byte order.
CD-ROM compressed hunks have a layout with all compressed frame data in sequential order, followed by compressed subcode data.
[Frame0, Frame1, ..., FrameN, Subcode0, Subcode1, ..., SubcodeN]
Unlike CDLZ or CDZL, there is no header before the compressed data begins. The length of the compressed data is determined by the number of 2448-sized frames that can fit into the hunk-sized output buffer. Following the FLAC compressed blocks, the subcode data is a single Deflate stream.
After decompression, the data is swizzled so that each frame is followed by its corresponding subcode data.
[Frame0, Subcode0, Frame1, Subcode1, ..., FrameN, SubcodeN]
FLAC compressed frames does not require manual reconstruction of the sync header or ECC bytes.
§Buffer Restrictions
Each compressed CDFL hunk decompresses to a hunk-sized chunk. The hunk size must be a multiple of 2448, the size of each CD frame. The input buffer must contain enough samples to fill the number of CD sectors that can fit into the output buffer.
Trait Implementations§
source§impl CodecImplementation for CdFlacCodec
impl CodecImplementation for CdFlacCodec
source§fn new(hunk_size: u32) -> Result<Self>where
Self: Sized,
fn new(hunk_size: u32) -> Result<Self>where
Self: Sized,
source§fn decompress(
&mut self,
input: &[u8],
output: &mut [u8]
) -> Result<DecompressResult>
fn decompress( &mut self, input: &[u8], output: &mut [u8] ) -> Result<DecompressResult>
source§impl CompressionCodecType for CdFlacCodec
impl CompressionCodecType for CdFlacCodec
source§fn codec_type(&self) -> CodecType
fn codec_type(&self) -> CodecType
CodecType
that this
codec implements.