Commit Graph

4369 Commits

Author SHA1 Message Date
Geoffrey McRae
ffa7f10085 [client/idd] network: bound pending QUIC sends 2026-11-06 14:37:38 +11:00
Geoffrey McRae
5faf9e05e3 [common] network: add dedicated stream bindings 2026-11-06 14:37:38 +11:00
Geoffrey McRae
9f73703246 [common] network: update shared protocol support 2026-11-06 14:37:38 +11:00
Geoffrey McRae
5e9b1b3999 [common] network: update audio ownership protocol 2026-11-06 14:37:38 +11:00
Geoffrey McRae
a67034b14f [client/idd] network: add recovery, cursor, and control 2026-11-06 14:37:38 +11:00
Geoffrey McRae
6dfba7519c [client/idd] network: add password authentication 2026-11-06 14:37:38 +11:00
Geoffrey McRae
5138f470b7 [client/idd] network: add negotiated input service 2026-11-06 14:37:38 +11:00
Geoffrey McRae
f15c0af653 [common] network: update protocol helpers 2026-11-06 14:37:38 +11:00
Geoffrey McRae
d477d169d4 [client] network: add datagram send path 2026-11-06 14:37:38 +11:00
Geoffrey McRae
c8196b9f99 [build] msquic: fix static MinGW linking 2026-11-06 14:37:38 +11:00
Geoffrey McRae
cd27ffb06e [idd] network: use shared identity constants 2026-11-06 14:37:38 +11:00
Geoffrey McRae
6eb7c1698c [common] network: use LGProtocol codecs 2026-11-06 14:37:38 +11:00
Geoffrey McRae
04ac46c049 [client] network: add QUIC transport foundation 2026-11-06 14:37:38 +11:00
Geoffrey McRae
ed3b269919 [client] egl: import shared GPU textures 2026-11-06 14:37:38 +11:00
Geoffrey McRae
adf9ac3035 [common] network: add service payload codecs 2026-11-06 14:37:38 +11:00
Geoffrey McRae
90d2867a78 [idd] network: start QUIC control server 2026-11-06 14:37:37 +11:00
Geoffrey McRae
a3f822685c [build] msquic: add static network dependency 2026-11-06 14:37:37 +11:00
Geoffrey McRae
298577d25a [idd] network: provision persistent server identity 2026-11-06 14:37:37 +11:00
Geoffrey McRae
5dcfad9bb0 [idd] network: add transport session foundation 2026-11-06 14:37:37 +11:00
Geoffrey McRae
5ba1bda0c8 [common] network: define transport wire protocol 2026-11-06 14:37:37 +11:00
Geoffrey McRae
536516be19 [idd] postprocess: accept effective output alignment
Ignore the driver-selected texture alignment when validating external
compute-effect destinations.

Keep layout and resource flags in the comparison.
2026-11-06 14:37:37 +11:00
Geoffrey McRae
ca0738ec0d [client] windows: add WASAPI audio support 2026-11-06 14:34:25 +11:00
Geoffrey McRae
eabc56a6de [common/client] platform: abstract runtime services 2026-11-06 14:34:25 +11:00
Geoffrey McRae
a7d2e4592f [client] windows: add native display and input 2026-11-06 14:34:25 +11:00
Geoffrey McRae
18541865f0 [client] egl: add portable texture upload fallback 2026-11-06 14:34:25 +11:00
Geoffrey McRae
7ea69f3d1c [client] input: add platform-neutral keycodes 2026-11-06 14:34:25 +11:00
Geoffrey McRae
382f35e503 [common/client] ivshmem: add portable external frames 2026-11-06 14:34:25 +11:00
Geoffrey McRae
6d367d4ab2 [common/client] platform: make filesystem access portable 2026-11-06 14:34:25 +11:00
Geoffrey McRae
a60da36420 [common] windows: add native path and UTF support 2026-11-06 14:34:25 +11:00
Geoffrey McRae
62a8786fe2 [common/client] platform: add portable worker primitives 2026-11-06 14:34:25 +11:00
Geoffrey McRae
9c8343df96 [common/client] platform: make timing waits portable 2026-11-06 14:34:25 +11:00
Geoffrey McRae
d045ac6ba7 [client] build: add Windows platform composition 2026-11-06 14:34:25 +11:00
Geoffrey McRae
17e416c3f2 [obs] audio: capture guest playback
Subscribe the OBS source as a playback-only LGMP audio client. Decode
the advertised formats and channel maps, then resample into the OBS
clock domain without participating in driver clock feedback.

Keep queue and resampler storage fixed in the packet path.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
36e170d93a [client/idd] audio: support multiple playback clients
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.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
95234cea86 [client] audio: fall back when feedback is unavailable 2026-11-06 14:34:25 +11:00
Geoffrey McRae
56f3305fe8 [client/idd] audio: prevent recording transport stalls
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.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
efc9952e74 [idd] audio: support 32-bit and common channel layouts
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.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
5681dcdbe7 [idd] audio: discipline playback clock from client
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.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
f7b1133785 [client] audio: poll LGMP streams at 25 microseconds
Use the active polling floor as the maximum wait and advertised
playback delivery reserve. Keep learned scheduling jitter adaptive.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
bf7c76c8db [idd] audio: stop paused streams after playback
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.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
25d87e1c6d [client] lgmp: test same-generation audio restart
Queue playback STOP, START, and DATA for the same wire generation.
Verify that the client creates a fresh local generation and delivers the
first restarted packet.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
c162d760a1 [idd] audio: configure kernel driver debugging
Persist hardware-ID installation for the LGAudio WDK project and
enable deployment in every existing solution configuration.

This allows LGAudio to run as the kernel-debugger startup project.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
b8ab04507e [client] audio: complete LGMP shutdown release
Treat the binding phase as the authoritative shutdown state after
graceful stream release.

Cover disconnect while the host drains and unbinds both streams.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
f2f3787aec [client] audio: reduce LGMP poll reserve
Reduce the active LGMP poll bound and matching playback reserve from
250 us to 125 us.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
b75b90ff1d [idd] audio: publish render data promptly
Publish committed WaveRT render frames on a 4 kHz timer while keeping
packet completion and notification semantics unchanged.

Serialize clock sampling with position updates to prevent concurrent
queries from replaying elapsed time.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
4c395bb488 [client] audio: minimize LGMP playback latency
Scope the legacy latency offset to classic SPICE and use the LGMP
poll bound as its fixed arrival reserve. Keep learned jitter additive.

Select provider clock feedback only when the current remote endpoint
advertises it, avoiding a failed startup attempt on broker v1.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
2fa376b31b [client] audio: reduce LGMP stream latency
Poll active audio streams every 25 to 250 microseconds and reset the
adaptive delay whenever records arrive.
2026-11-06 14:34:25 +11:00
Geoffrey McRae
405233bfb9 [idd] audio: poll LGMP streams at low latency
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.
2026-11-06 14:32:15 +11:00
Geoffrey McRae
3cd005ac74 [client] audio: add optional LGMP transport 2026-11-06 14:32:14 +11:00
Geoffrey McRae
348f92d8b6 [idd] audio: bridge broker packets over LGMP streams
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.
2026-11-06 14:32:04 +11:00