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
impl Clone for DecodePath
Source§fn clone(&self) -> DecodePath
fn clone(&self) -> DecodePath
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more