A video configuration epoch can advance while client feedback for the
previous epoch is still in flight. Treat structurally valid stale video
control packets as obsolete instead of terminating the QUIC session.
Preserve a partially transmitted frame while replacing queued stale
frames. Continuous capture can otherwise discard every frame before the
client receives its final fragment.
Replace the single-owner PCM queues with one shared LGMP SPMC stream.
Give each admitted client reliable state and an independent playback
cursor, while clients without clock authority resample locally.
Extend the audio protocol with per-client epochs and barriers.
Keep capture exclusive and bound authority backpressure so slow
secondary readers cannot affect the disciplined low-latency path.
Give microphone data priority over replaceable clock feedback and
reduce feedback traffic on the shared client-to-host FIFO.
Retry short FIFO stalls outside the realtime thread and coalesce
consecutive packets in the existing fixed Windows buffers.
Avoid one broker write per tiny PipeWire quantum without adding
allocations or intentional capture latency.
Advertise signed and floating-point 32-bit formats across mono,
stereo, quad, surround, 5.1, and 7.1 at every supported rate.
Carry sample encoding through the broker and LGMP protocol so integer
and floating-point streams remain distinct.
Expand packet, shared-memory, and ring capacity for eight-channel
32-bit audio.
Forward coalesced feedback through the broker to the render clock.
Keep capture independent and apply the rate to WaveRT timing.
Bound and slew targets, then restore unity when feedback stalls.
Withdraw feedback after the watchdog makes fallback safe.
Keep initial playback prewarming, but announce STOP when a stream that
has already run enters PAUSE or ACQUIRE. Restart it when RUN returns.
Keep RUN history across owner changes so a paused stream is not
mistaken for a new prewarm generation.
Only announce capture while it is running. Derive active status flags
from the stream generations successfully announced to the client.
Move audio ingress and playback-credit recovery off the display timer.
Poll through a dedicated MMCSS worker at sub-millisecond intervals.
Wake capture retries immediately and drain queued client records during
release so backpressure cannot stall recording or shutdown.
Add optional playback and capture streams to the LGMP transport.
Negotiate ownership over the existing control path and keep audio
availability isolated from display transport readiness.
Route broker packets through public LGMP stream APIs without changing
the LGMP queue table or shared-memory mapping.
Open the optional audio broker from a passive worker and move bounded
playback and capture packets through a transport-neutral audio hub.
Attach audio sources after transport initialization without making audio
driver availability part of display transport readiness.
Add LGProtocol as a pinned submodule and consume its KVMFR protocol
definitions throughout the client, host, IDD, OBS, and profiler.
Keep Looking Glass framebuffer helpers local while removing duplicated
protocol headers and migrating users to KVMFR-scoped types.
Report guest HID keyboard LED state from LGInput to LGIdd and
publish it with the LGMP input endpoint status.
Forward SPICE modifier updates through the same provider state so evdev
can synchronize physical keyboard LEDs across transport changes and
reconnects.
Bump the versioned pipe and KVMFR input status contracts for the new
feedback state.
Accept earlier LGMP input status versions without LED feedback so the
client retains input while the guest driver is being upgraded.
Extend the clipboard target boundary with ordered prefix delivery.
Pass up to four queued LGMP stream records to the Helper ring in one
operation, apply state only to the accepted prefix, and retain the
remaining suffix for exact retries.
The channel holds its write lock across the prefix and emits one pipe
doorbell per stream window instead of one per record.
Keep inbound stream payloads in the bounded stream-target window while
the Helper channel is busy and publish directly from those buffers.
Retain the pending target only for LGMP queue controls. Their credits
remain outstanding across retries.
This removes one full payload copy per client-to-Helper record without
changing delivery order, backpressure, or reset behavior.
Add a reusable copy path for moving data from write-combined mappings
into normal cacheable memory. Dispatch to MOVNTDQA-based SSE4.1 or AVX2
loads when the processor and OS support them, with a fenced fallback.
Use the optimized path when staging inbound clipboard stream records from
the IVSHMEM mapping.
Drive adaptive clipboard stream polling with a high-resolution waitable
timer instead of rounding microsecond delays into coarse wait-function
timeouts.
Preserve the explicit stop and local wake events while avoiding a clock-tick
stall at each file-transfer window.
Use the documented Win32 wait constants throughout the pipe, clipboard,
and input workers instead of local numeric aliases.
Select the WDK NT-status definitions before including Windows headers.
Include wudfwdm.h privately in the affected translation units so UMDF 2
provides NTSTATUS without exposing WDF headers through LGCommon's public
interface to the desktop Helper.
Carry DATA and FILE_DATA only through the duplex SPSC streams. Keep LGMP
queues for control and status. Remove grants, commits, ACKs, and
queue-payload transport negotiation.
Poll adaptively while ownership or release is active. Preserve FIFO
release and graceful draining. Quarantine payloads crossed by a newer
OFFER or CLEAR, and retire data-plane state on detach.
Carry every input activation and report through its client-bound SPSC
stream. Keep the LGMP queue only for status publication and subscriber
discovery, removing transport selection and the queue-report fallback.
Retain graceful endpoint draining when a subscriber disappears and use
bounded adaptive polling while streams are active. The IDD polling setup
remains compatible with the project’s current C++ language mode.
Publish ordered four-record prefixes through the Helper mapping and ring
once per accepted burst. Wake blocked producers when the peer returns
credits while retaining the bounded polling fallback.
Move received payload ownership into manager work items and place remote
file-read data directly into the waiting caller’s bounded output buffer.
This removes avoidable 256 KiB copies without changing record ordering,
timeouts, cancellation, or reset semantics.
Create and advertise one reliable input stream for each possible LGMP
client, then bind endpoints to active input subscribers.
Drain endpoints fairly while prioritizing the current owner's lane so
its RELEASE remains the ordering barrier. Reject transport changes
within an activation generation.
Gracefully retire missing or stalled subscribers without reusing an
active reservation. Keep excess clients on the queue and release HID
ownership from the input worker when its stream retires.
Create one reliable four-slot lane in each direction and advertise the
stream data plane for clipboard protocol v4.
Bind both lanes to the accepted owner generation, stage incoming data
within a fixed window, and apply backpressure when Helper delivery is
full.
Drain reliable records before releasing an owner. Force stale or
unresponsive bindings after a bounded deadline while preserving the
existing cancellation and clipboard-clear cleanup.
Expose LGMP stream creation through the existing IDD host wrapper so
subsystem transports do not reach through its ownership boundary.
Keep stream lifetime and binding under each transport while the host
continues to own the underlying shared-memory allocator.