Part of #920 (rank 19). Effort S, risk low.
Problem
- The Linux helper's main loop advances the capture clock (
capture.advance(), which holds the last picture forward and drains audio) only on FrameReady and on recv_timeout expiring (pipewire-capture/src/main.rs).
- Every other message resets the
recv_timeout. Cursor messages arrive at the compositor's rate (up to 144/s) while the mouse moves, so on a static screen with a moving mouse the timeout never expires and nothing advances.
- Hypothesis on the consequence: the 2 s audio ring saturates and silence is inserted; the video holds no frames for that span.
Proposal
- Advance whenever a tick has elapsed since the last advance, whatever message woke the loop.
Verify
- A unit test on the tick rule.
- On Linux: static screen, mouse moving for 10 s, with sound: no
audio-dropped warning, audio continuous.
Part of #920 (rank 19). Effort S, risk low.
Problem
capture.advance(), which holds the last picture forward and drains audio) only onFrameReadyand onrecv_timeoutexpiring (pipewire-capture/src/main.rs).recv_timeout. Cursor messages arrive at the compositor's rate (up to 144/s) while the mouse moves, so on a static screen with a moving mouse the timeout never expires and nothing advances.Proposal
Verify
audio-droppedwarning, audio continuous.