Struct chd::codecs::CdFlacCodec

source ·
pub struct CdFlacCodec { /* private fields */ }
Available on 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

source§

fn new(hunk_size: u32) -> Result<Self>
where Self: Sized,

Creates a new instance of this codec for the provided hunk size.
source§

fn decompress( &mut self, input: &[u8], output: &mut [u8] ) -> Result<DecompressResult>

Decompress compressed bytes from the input buffer into the output buffer. Read more
source§

impl CompressionCodecType for CdFlacCodec

source§

fn codec_type(&self) -> CodecType

Returns the known CodecType that this codec implements.
source§

impl CompressionCodec for CdFlacCodec

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.