You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
perf: instant switch (IDR on select) + non-blocking preview capture
D — request IDR on select(): copy-mux has no ffmpeg GOP, so keyframes come from
the ~2s IDR heartbeat. On a switch the browser WHEPs to the target path and
can't render until it sees an IDR, waiting up to ~2s (black screen). select()
now forces one immediately via control.request_idr(), so switching is
near-instant. Best-effort (control socket may not be up yet on a fresh session;
the heartbeat still covers that).
A — non-blocking preview capture: `screencap -p` is a blocking subprocess up to
~5s that ran inside the async handlers, freezing the whole event loop —
including the /input WebSocket, stalling taps while a thumbnail loaded. Extract
the two duplicate preview bodies into one _capture_preview() helper that runs
the grab + PIL encode via asyncio.to_thread.
Bump 2.3.0 -> 2.3.1.