Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }
Expand description

OPUS multistream decoder

Implementations§

Source§

impl Decoder

Source

pub fn new<const CH: usize>( config: Config<CH>, rate: SampleRate, ) -> Result<Self, ErrorCode>

Creates new encoder instance

§Notes
§Mapping

config.mapping table defines which decoded channel i should be used for each input/output (I/O) channel j.

Let i = mapping[j] be the index for I/O channel j.

If i < 2*coupled_streams, then I/O channel j is encoded as the left channel of stream (i/2) if i is even, or as the right channel of stream (i/2) if i is odd.

Otherwise, I/O channel j is encoded as mono in stream (i - coupled_streams), unless it has the special value 255, in which case it is omitted from the encoding entirely (the decoder will reproduce it as silence).

Each value i must either be the special value 255 or be less than streams + coupled_streams.

Source

pub fn reset(&mut self) -> Result<(), ErrorCode>

Resets state to initial

Source

pub fn decode_to( &mut self, input: &[u8], output: &mut [MaybeUninit<u16>], decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

If more than 1 channel is configured, then input must be interleaved.

Output size must correspond to sampling rate. For example, at 48 kHz allowed frame sizes are 120, 240, 480, 960, 1920, and 2880.

Maximum packet duration is 120ms therefore maximum frame size must be frame_bytes_size(SampleRate::Hz48000, Channels::Stereo, 120)

When input size is 0, libopus shall treat it as packet loss, in which case output size must match expected output of next packet to know how much frames is skipped

When decode_fec is true, requests that any in-band forward error correction data be decoded. If no such data is available, the frame is decoded as if it were lost.

Source

pub fn decode_to_slice( &mut self, input: &[u8], output: &mut [u16], decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

Refer to decode_to for details

Source

pub fn decode_to_vec( &mut self, input: &[u8], output: &mut Vec<u16>, decode_len: usize, decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

Vector will be written into spare capacity, modifying its length on success.

decode_len is used to reserve additional memory and will be passed exactly with this size to decode_to

Refer to decode_to for details

Source

pub fn decode_float_to( &mut self, input: &[u8], output: &mut [MaybeUninit<f32>], decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

If more than 1 channel is configured, then input must be interleaved.

Output size must correspond to sampling rate. For example, at 48 kHz allowed frame sizes are 120, 240, 480, 960, 1920, and 2880.

Maximum packet duration is 120ms therefore maximum frame size must be frame_bytes_size(SampleRate::Hz48000, Channels::Stereo, 120)

When input size is 0, libopus shall treat it as packet loss, in which case output size must match expected output of next packet to know how much frames is skipped

When decode_fec is true, requests that any in-band forward error correction data be decoded. If no such data is available, the frame is decoded as if it were lost.

Source

pub fn decode_float_to_slice( &mut self, input: &[u8], output: &mut [f32], decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

Refer to decode_to for details

Source

pub fn decode_float_to_vec( &mut self, input: &[u8], output: &mut Vec<f32>, decode_len: usize, decode_fec: bool, ) -> Result<usize, ErrorCode>

Decodes input packet, returning number of decoded samples.

Vector will be written into spare capacity, modifying its length on success.

decode_len is used to reserve additional memory and will be passed exactly with this size to decode_to

Refer to decode_to for details

Source

pub fn get_last_packet_duration(&mut self) -> Result<u32, ErrorCode>

Gets the duration (in samples) of the last packet successfully decoded or concealed.

Source

pub fn get_gain(&mut self) -> Result<i32, ErrorCode>

Gets the decoder’s gain configuration

Source

pub fn set_gain(&mut self, value: i32) -> Result<(), ErrorCode>

Configures decoder gain adjustment.

Scales the decoded output by a factor specified in Q8 dB units. This has a maximum range of -32768 to 32767 inclusive, and returns BadArg otherwise.

The default is zero indicating no adjustment.

This setting survives decoder reset.

Formula:

gain = pow(10, x/(20.0*256))

Source

pub fn get_bandwidth(&mut self) -> Result<Bandwidth, ErrorCode>

Gets the decoder’s last bandpass

Source

pub fn get_sample_rate(&mut self) -> Result<SampleRate, ErrorCode>

Gets configured sample rate of this instance

Source

pub fn get_phase_inversion_disabled(&mut self) -> Result<bool, ErrorCode>

Gets the decoder’s configured phase inversion status.

Source

pub fn set_phase_inversion_disabled( &mut self, value: bool, ) -> Result<(), ErrorCode>

Configures phase inversion.

If set to true, disables the use of phase inversion for intensity stereo, improving the quality of mono downmixes, but slightly reducing normal stereo quality.

Disabling phase inversion in the decoder does not comply with RFC 6716, although it does not cause any interoperability issue and is expected to become part of the Opus standard once RFC 6716 is updated by draft-ietf-codec-opus-update.

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>,

Source§

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>,

Source§

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.