Skip to main content

ResampleSpec

Struct ResampleSpec 

Source
pub struct ResampleSpec { /* private fields */ }
Available on crate feature resample only.
Expand description

One end of a conversion: sample rate, sample format, channel layout.

Spelled in FFmpeg’s own vocabulary because construction is off the AudioResampler trait and this is the backend that has to be handed to swr_alloc_set_opts2. FfmpegResampler restates the source spec in the vocabulary a decoded frame carries, so the mid-stream check compares like with like without the caller ever seeing two dialects.

Implementations§

Source§

impl ResampleSpec

Source

pub const fn new(rate: u32, format: Sample, layout: ChannelLayout) -> Self

Constructs a spec from its three parts.

Deliberately total and const: a spec is a description, and describing something swr cannot convert is not itself an error. FfmpegResampler::new is the choke point every construction route passes through, and it is what refuses a rate, a format or a channel layout this backend cannot honour — see FfmpegResampler::new for the roster and ResampleError::UnsupportedLayout for why a layout can be refused at all.

Source

pub fn from_parameters(parameters: &Parameters) -> Option<Self>

The spec a track declares, read off the codec parameters a crate::FfmpegDemuxer track row carries (track.extra().parameters()) — the “source from TrackInfo” path.

Returns None for a non-audio track, for one whose declared sample format is AV_SAMPLE_FMT_NONE (a codec whose format is only known once its decoder opens), and for a custom or ambisonic channel layout — see Self::from_decoder for the first case and the note on [unspecified_layout] for the last.

Source

pub fn from_decoder(decoder: &Audio) -> Option<Self>

The spec an opened decoder will actually produce — its rate, sample format and channel layout, straight off the codec context.

Reach it through FfmpegAudioStreamDecoder::inner. None on a custom or ambisonic layout, and on a context whose sample format is still unset (a decoder that has not been opened).

Source

pub fn unspecified_layout(channels: i32) -> ChannelLayout

A layout that names a channel count and nothing else — AV_CHANNEL_ORDER_UNSPEC.

Not a degenerate case: a WAV file without a WAVE_FORMAT_EXTENSIBLE channel mask genuinely declares no layout, and FFmpeg faithfully reports it as unspecified in the codec parameters, in the codec context, and on every decoded frame. Substituting a default layout would make the source spec disagree with the frames it is supposed to describe, and every send_frame would be refused as a mid-stream change. swr accepts an unspecified layout at either end and maps the channels positionally.

Source

pub const fn rate(&self) -> u32

Sample rate in Hz.

Source

pub const fn format(&self) -> Sample

Sample format.

Source

pub const fn layout(&self) -> ChannelLayout

Channel layout.

Source

pub fn channels(&self) -> i32

Channel count, from the layout.

Trait Implementations§

Source§

impl Clone for ResampleSpec

Source§

fn clone(&self) -> ResampleSpec

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ResampleSpec

Source§

impl Debug for ResampleSpec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ResampleSpec

Source§

impl PartialEq for ResampleSpec

Source§

fn eq(&self, other: &ResampleSpec) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ResampleSpec

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more