Skip to main content

SwAudioEncoder

Struct SwAudioEncoder 

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

Encodes Audio frames into Packets via a software encoder (see AudioCodec) — the audio sibling of crate::elements::SwEncoder. A Filter: receives via Sink, pushes what it produces into its own (single) src pad.

Unlike SwEncoder (which requires exactly Pixel::YUV420P in and errors on anything else), this resamples whatever it’s fed — building the resampler lazily from the first frame’s own format/channel_layout/rate, same pattern crate::elements::AudioMixer’s own InputBuffer::push uses — to whatever sample_rate/channels SwAudioEncoderOptions asked for, in whichever Sample::F32 layout (packed or planar) the opened codec actually reports (queried via the codec’s own capabilities, not assumed — aac’s native encoder wants planar, but nothing here hardcodes that). This is what lets a crate::elements::TestAudioSource/crate::elements::AudioMixer (both fixed Sample::F32(Packed)) feed this directly with no separate resampler element in between, the same way SwEncoder leaning on a fixed Pixel::YUV420P input still needs a crate::elements::Scaler in front of it for anything else.

Most audio codecs (aac included) require a fixed number of samples per send_frame call (encoder.frame_size()) — not whatever size happened to arrive. Resampled samples are buffered per-channel (pending) and only handed to the encoder once a full frame_size-sample chunk is ready; a codec that reports frame_size == 0 (accepts any size) skips the buffering and encodes each resampled chunk as-is. Eos flushes both the resampler’s own internal delay line (a few samples of filter latency — see [ffmpeg::software::resampling::Context::flush]) and whatever’s left in pending (as one final, possibly short, frame — allowed for the last frame only) before flushing the encoder itself.

Implementations§

Source§

impl SwAudioEncoder

Source

pub fn new( name: impl Into<String>, options: SwAudioEncoderOptions, ) -> Result<Self>

Source

pub fn parameters(&self) -> Parameters

This encoder’s own codec parameters — what a crate::elements::Mp4Muxer track needs, same pattern crate::elements::SwEncoder::parameters documents for video.

Source

pub fn time_base(&self) -> Rational

The unit each produced packet’s pts is expressed in.

Trait Implementations§

Source§

impl Element for SwAudioEncoder

Source§

fn name(&self) -> Arc<str>

Returns a cheap clone (refcount bump, not a deep copy) of this element’s name — crate::bus::BusEvent stores names as Arc<str> for exactly this reason: a hot path like crate::queue::Queue posting BusEvent::Dropped once per overflowed buffer shouldn’t pay for a fresh heap allocation every time it wants to report which element it is.
Source§

fn element_type(&self) -> ElementType

Source§

fn pp_log(&self) -> &PpLog

This element’s identity for crate::bus::Bus::post — same id/name as Element::name, just already wrapped as the crate::pp_log::PpLog its pp_info!/pp_warn!/pp_error! macros need. A stored private field, not built fresh per call, for the same reason name() returns a cheap Arc<str> clone instead of a fresh String — see its own docs.
Source§

fn pp_log_mut(&mut self) -> &mut PpLog

Mutable access to the same field Element::pp_log reads — used by crate::pipeline::ChainBuilder to stamp the owning crate::pipeline::Pipeline’s id onto every element that passes through it, via element_pp_log. Not meant to be called from anywhere else.
Source§

fn graph_id(&self) -> Option<ElementId>

A pre-reserved graph identity for elements that expose dynamic attachment handles. Most elements receive an ID from ChainBuilder and keep the default None implementation.
Source§

impl Send for SwAudioEncoder

Source§

impl Sink for SwAudioEncoder

Source§

fn consume(&mut self, buf: MediaBuffer) -> Result<()>

Source§

fn control(&mut self, msg: ControlMsg) -> Result<()>

Reacts to a ControlMsg (pause/resume/stop) and, for anything with a downstream of its own, forwards it on — same shape as consume, just a separate channel from MediaBuffer so it can reach every element (not just ones that already know how to interpret a data buffer) and, at a crate::queue::Queue, jump ahead of whatever data is backed up instead of waiting behind it. No default: every Sink has to consciously decide what this means for it, rather than silently dropping it.
Source§

impl Source for SwAudioEncoder

Source§

fn src_pads(&mut self) -> &mut [SrcPad]

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
§

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

§

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

Source§

impl<T> Filter for T
where T: Source + Sink,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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