Skip to main content

DecodePath

Enum DecodePath 

Source
pub enum DecodePath {
    Auto,
    Hardware(Backend),
    Software,
}
Expand description

Which decode path a video session takes — the choice CarrierVideoStreamDecoder::open_as is given.

§The arms differ in what they PERMIT, not only in where they start

Auto is a preference: it starts on hardware and is free to end on software, at open or mid-stream. The other two are pins, and a pin that a mid-stream failure could quietly undo would not be one — so a session opened on either of them stays on the path it was opened on for its whole life, and a hardware failure that Auto would degrade through is reported instead.

That is the difference the two consumers of this door need. A determinism comparison decodes one stream both ways and compares the pixels; a run that silently swapped paths halfway would compare nothing and say it had. An operator turning hardware off for a lane over a driver that produces wrong pixels needs it to stay off.

§Observability is unchanged

is_hardware and is_software read where a session is, which stays a live reading — under Auto it can still change once, and under the pins it answers what was pinned because nothing can move it.

This type deliberately grows no is_* predicates of its own, where most vocabularies in this crate do. They would spell the decoder’s two questions a second time with a different meaning — path.is_software() is what was asked for and decoder.is_software() is where it ended up, and under Auto those genuinely differ. A caller that needs to branch on the choice it made already holds the value and can match it.

Variants§

§

Auto

Probe the platform’s hardware backends in order and fall back to software — at open, and again on a mid-stream hardware failure.

What CarrierVideoStreamDecoder::open has always done, and what it still does.

§

Hardware(Backend)

This hardware backend, or nothing. No other backend is probed and software is never opened.

A backend that cannot be opened for the stream fails the open_as call. A backend that opens and then fails to decode surfaces Error::AllBackendsFailed from the send or receive road that met it, carrying that backend and what it said — the same error Auto treats as its cue to degrade, reported here because degrading is what this arm declines.

§

Software

Software, with no probe at all.

Opens libavcodec’s own decoder for the stream directly. There is no hardware in this session to fail, so there is nothing for it to fall back from — the terminal state Auto reaches by degrading, entered on purpose.

Trait Implementations§

Source§

impl Clone for DecodePath

Source§

fn clone(&self) -> DecodePath

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 DecodePath

Source§

impl Debug for DecodePath

Source§

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

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

impl Eq for DecodePath

Source§

impl Hash for DecodePath

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for DecodePath

Source§

fn eq(&self, other: &DecodePath) -> 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 DecodePath

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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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