pub struct V2ipDecoderReason(/* private fields */);Expand description
Why a decoder reports the state it does.
The primary cause only. Several causes can be true at once, and which of
them lands here is a fixed priority order in the firmware that the numbering
does not express: these values are identities, not ranks, and comparing or
ordering them says nothing. Ask V2ipDecoderReport::has_cause whether a
particular cause applies - a test against this field answers “is this the
one that won” instead, which is a different question.
Firmware adds causes, so the wire value is carried as it arrived: folding an unrecognised one onto a named cause would report a fault this library invented. Appending one cannot reorder the existing priorities.
Implementations§
Source§impl V2ipDecoderReason
impl V2ipDecoderReason
Sourcepub const NO_PACKETS: Self
pub const NO_PACKETS: Self
No packets are arriving.
Sourcepub const PACKETS_DEGRADED: Self
pub const PACKETS_DEGRADED: Self
Packets are arriving, degraded.
Sourcepub const FORMAT_MISMATCH: Self
pub const FORMAT_MISMATCH: Self
The recovered format is not the one the sink is configured for.
Sourcepub const FORMAT_REJECTED: Self
pub const FORMAT_REJECTED: Self
The configured output format was refused.
Sourcepub const DECODER_BLOCKED: Self
pub const DECODER_BLOCKED: Self
The converter watchdog is holding the stream back.
Sourcepub const SWITCH_PENDING: Self
pub const SWITCH_PENDING: Self
A source switch is in progress: a step in an operation someone asked for, rather than a fault.
Sourcepub const PTP_UNLOCKED: Self
pub const PTP_UNLOCKED: Self
PTP is unlocked. That costs audio alone; the picture is unaffected.
Sourcepub const TX_BRIDGE_UNLOCKED: Self
pub const TX_BRIDGE_UNLOCKED: Self
The pipeline is rebuilding after the HDMI transmitter stayed unlocked.
The picture is down, and has been for five seconds before this can
appear: the sender debounces the unlocked reading for that long, so
this never reports a transient. Unlike Self::SWITCH_PENDING nobody
asked for it.
The debounce restarts each time it elapses, so this holding across reports is a restart loop rather than one event, and that is what to escalate on.
It sits near the bottom of the priority order, below every input-side
cause, so a rebuilding pipeline names one of those in
V2ipDecoderReport::reason and carries this in
V2ipDecoderReport::flags alone - always, rather than briefly.
It is evaluated only while no format change is in progress. Across a
switch it holds its previous value and clears on the first reading
after the change settles, which V2ipDecoderReport::updates cannot
distinguish: a value carried forward is still a stored reading.
Sourcepub const IDLE: Self
pub const IDLE: Self
The sink is configured but switched off, so no stream is expected.
This outranks every other cause: whenever it applies it is what
V2ipDecoderReport::reason carries.
The causes beneath it stay set in V2ipDecoderReport::flags. A
sink switched off while it was running keeps the bits the decoder
genuinely observed on the way down - no packets, no format - so a
classifier that tests a fault mask over the whole word calls a
deliberately disabled sink broken. Ask for this cause first and stop
there; the bits below it describe what was seen, not a fault to report.
This says nothing about geometry, in either direction. The decoder reports what it currently detects whatever the cause, so a switched-off sink still detecting a codestream carries a real geometry, and a zero one means the decoder has nothing rather than that the sink is off.
Older senders never report this and give Self::NO_PACKETS for a
disabled sink instead, indistinguishable from one whose source has
died. So an absent Self::IDLE is not evidence a sink is enabled,
and nothing in this block answers enablement: it carries no such
field, and the answer comes from V2IP_DEVICE_CFG or the device’s HTTP
status.
Trait Implementations§
Source§impl Clone for V2ipDecoderReason
impl Clone for V2ipDecoderReason
Source§fn clone(&self) -> V2ipDecoderReason
fn clone(&self) -> V2ipDecoderReason
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more