Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| let message = error.to_string(); | ||
| emit( | ||
| events, | ||
| BackendEvent::AudioOutputError { | ||
| backend: *backend, | ||
| message: message.clone(), | ||
| }, | ||
| ); |
There was a problem hiding this comment.
Medium: Successful audio sink fallback still reports an unrecovered DeviceLost
When the primary ALSA/PipeWire write fails but open_audio_fallback opens a working sink and writes the PCM, write_audio still emits AudioOutputError for the primary failure before switching. The Linux monitors map every AudioOutputError to MediaFeedback::DeviceLost with recovered: false, so core/Qt record a warn-level device-state loss and increment deviceLossCount even though audio continued on the fallback backend (only AudioSelected follows). Previously a successful fallback emitted no loss event. Emit AudioOutputError only on terminal output failure, or pair a successful fallback with DeviceLost { recovered: true } (or skip the loss feedback when fallback write succeeds).
|
Closing this malformed PR as part of the user-authorized branch repair. Its head was incorrectly published as |
Stack
Depends on #955. This PR contains only audio failure isolation on top of the reviewed PLC change.
Changes
Keep malformed Opus and unrecoverable audio-output failures inside the audio worker instead of failing the shared video session. Attribute decode failures to Opus and output failures to the actual sink.
Eight consecutive decode rejections trigger a decoder rebuild, with at most two rebuilds per session. A continuously rejected stream disables audio after 24 rejected packets. An unrecoverable sink failure also disables audio without switching a fixed output route or stopping video.
Publish terminal audio state before queue closure and classify concurrent submissions as audio-disabled, not fatal queue errors. Advance the concealment timeline after a rejected packet so the next packet cannot replay an already-concealed interval.
Verification
Independently reviewed and reran:
/dev/fullfailure fixtures: 15 passed.Limits
No live GFN session, GPU-backed embedded monitor, or physical PipeWire device-change test was available. Worker and core-feedback tests prove isolation locally; live Qt session behavior remains unverified. Audio unavailable is terminal for that session after the bounded recovery policy is exhausted.