Skip to main content

FfmpegResampler

Struct FfmpegResampler 

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

mediadecode::resampler::AudioResampler impl wrapping swresample.

Construction is Self::new, off the trait, taking both specs — see the trait’s own documentation for why the target can never be a constant.

Implementations§

Source§

impl FfmpegResampler

Source

pub fn new( source: ResampleSpec, target: ResampleSpec, ) -> Result<Self, ResampleError>

Opens a resampler between two explicit specs.

Both are required and neither is inferred. The source is what the decoder will hand over — read it off the track (ResampleSpec::from_parameters) or off the opened decoder (ResampleSpec::from_decoder). The target is the caller’s, and is options: 16 kHz mono for a speech model, 48 kHz for an audio-event one, both from the same track.

§The choke point

ResampleSpec::new is const and total, so this is where both ends are checked — every construction route (from_parameters, from_decoder, the public constructor) passes through here, and nothing hazardous reaches swr or a staged AVFrame behind it:

Source

pub const fn source(&self) -> &ResampleSpec

The spec frames must arrive in.

Source

pub const fn target(&self) -> &ResampleSpec

The spec frames leave in.

Source

pub const fn inner(&self) -> &Context

Borrows the wrapped swr context.

Source

pub fn delay(&self) -> i64

Samples still inside the delay line, counted at the output rate.

Trait Implementations§

Source§

impl AudioResampler for FfmpegResampler

Source§

fn flush(&mut self) -> Result<(), ResampleError>

Resets the resampler for another stream on the same two specs.

The swr context is rebuilt, not drained. swresample has no reset call, and draining it dry cannot be verified from outside: a swr_convert_frame that makes no progress reports no error, so a drain loop that gives up and a drain loop that finished are indistinguishable — and a flush that returned Ok with the old delay line still inside would let one stream’s tail contaminate the next. A fresh context is the only reset whose success is a fact.

The new context is built before the old one is dropped, so a failure leaves the resampler exactly as it was: this call either resets everything or changes nothing.

Source§

type Adapter = Ffmpeg

Backend vocabulary. The source and target specs are both expressed in it.
Source§

type Buffer = FfmpegBuffer

Buffer type held by the frames this resampler accepts and produces.
Source§

type Error = ResampleError

Resampler-specific error type. Carries both the “nothing ready yet” signal out of receive_frame and the mid-stream-change refusal out of send_frame.
Source§

fn send_frame( &mut self, frame: &AudioFrame<SampleFormat, ChannelLayoutDescription, AudioFrameExtra, FfmpegBuffer>, ) -> Result<(), ResampleError>

Submits one decoded frame. Read more
Source§

fn receive_frame( &mut self, dst: &mut AudioFrame<SampleFormat, ChannelLayoutDescription, AudioFrameExtra, FfmpegBuffer>, ) -> Result<(), ResampleError>

Drains one converted frame into dst. Implementations signal “no frame ready” via a backend-specific Error variant, exactly as AudioStreamDecoder::receive_frame does.
Source§

fn send_eof(&mut self) -> Result<(), ResampleError>

Signals end of stream. The conversion tail becomes drainable through receive_frame.

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