Skip to main content

Sink

Struct Sink 

Source
pub struct Sink(/* private fields */);
Expand description

A Decoder confined to one thread, driven from anywhere.

Same shape as Decoder, except that decode is async and takes its payload by value (it may cross a thread). Reach for this instead of a Decoder whenever the decoder outlives a single thread’s stack: a spawned task, an object shared across threads, an FFI handle. A Decoder you build, drive, and drop inside one function needs none of it.

Consumer is built on one, so a caller reading a subscribed track from a task already gets this and needs nothing here.

§Cancellation

Not cancel-safe, and it says so rather than letting it slide. A queued decode runs whether or not anyone is still waiting, so dropping the future (racing it in a select!, giving it a timeout) leaves the decoder a step ahead of the stream, holding frames nobody received. Rather than let the next call carry on against a decoder that has moved, the sink refuses every call after a cancelled one. Drop it and open another.

macOS never refuses, because there is no thread to run ahead: the decoder runs inline, so a dropped future either had not started the call or had already finished it. Write to the contract above regardless, or the same code loses frames off macOS.

Implementations§

Source§

impl Sink

Source

pub async fn open(catalog: &VideoConfig, config: &Config) -> Result<Self, Error>

Open a decoder for catalog on its own thread. Returns once the decoder is built (or its construction fails), so an unsupported codec surfaces here rather than on the first frame.

Source

pub fn name(&self) -> &str

The decoder name in use, e.g. "mediafoundation".

Source

pub async fn decode( &mut self, payload: Bytes, timestamp: Timestamp, keyframe: bool, ) -> Result<Vec<Frame>, Error>

Decode one access unit, waiting for whatever pictures it yields.

Otherwise Decoder::decode: zero or more frames, since a backend that reorders holds pictures back. payload is a Bytes, so handing it over is a refcount rather than a copy.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Sink

§

impl !UnwindSafe for Sink

§

impl Freeze for Sink

§

impl Send for Sink

§

impl Sync for Sink

§

impl Unpin for Sink

§

impl UnsafeUnpin for Sink

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> 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> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

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

Source§

type Error = !

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