Commit Graph
11 Commits
Author SHA1 Message Date
oleksandr 885ee7fa04 feat(cli): add the binary that wires capture, slot and client together
Sets up logging, starts the network thread, runs the PipeWire loop in the
main thread and shuts down in order so HyperHDR gets a Clear before exit.
2026-09-12 10:10:29 +03:00
oleksandr 5b5cb9bf38 feat(capture): add the PipeWire capture of the gamescope node
Finds the gamescope node, negotiates a small BGRx MemFd format through
gamescope's requested_size extension, converts each buffer and publishes it
into the frame slot. Runs on the PipeWire main loop in the main thread.
2026-09-12 10:10:21 +03:00
oleksandr df857c7424 feat(hyperhdr): add the protocol codec and the network thread
proto encodes registration, image and clear requests with the
[u32 big-endian length][flatbuffer] framing and decodes the replies. client
drives them from a thread: it connects while frames flow, applies the pacer,
sends keepalives and reconnects with backoff.
2026-09-12 10:09:42 +03:00
oleksandr de88dd5799 feat(convert): add BGRx to RGB24 conversion with downscaling
Box filter for integer scale factors, fixed-point area averaging otherwise.
The source view is bounds-checked so a short or misdescribed PipeWire buffer
is reported instead of read out of range.
2026-09-12 10:09:41 +03:00
oleksandr c50a55cf79 feat(stats): add the counters shared by the capture and network threads 2026-09-12 10:09:25 +03:00
oleksandr a2fc524619 feat(pacing): add send pacing, reconnect backoff and log rate limiting
Pure scheduling logic with an injected `now`, so the rules of spec 4.3.6
(fps cap, keepalive, idle clear, heartbeat) are unit-testable without I/O.
2026-09-12 10:09:24 +03:00
oleksandr b3993be5cd feat(slot): add the latest-frame-wins hand-off between threads
The PipeWire thread publishes into a single slot and the network thread takes
from it, swapping buffers instead of copying so the steady state does not
allocate. An older pending frame is dropped when a newer one arrives.
2026-09-12 10:09:23 +03:00
oleksandr 9855d1e18a feat(config): add the CLI and environment configuration
Parses the WxH sizes, clamps them against the HyperHDR message limit and
carries the HyperHDR server constants (max message size, default timeout).
2026-09-12 10:09:09 +03:00
oleksandr 617296afae feat(hyperhdr): vendor the flatbuffers schemas and generated bindings
The .fbs files come from HyperHDR (see schema/NOTICE); the *_generated.rs
files are flatc output regenerated by scripts/regen-fbs.sh, which refuses to
run unless flatc matches the pinned flatbuffers crate.
2026-09-12 10:08:56 +03:00
oleksandr 623fab55e5 build: add cargo manifest and MIT license
Rust 2021, MSRV 1.85. flatbuffers is pinned to an exact version because the
generated bindings must match the flatc that produced them.
2026-09-12 10:08:29 +03:00
oleksandr 722d99675e chore: initial commit 2026-09-12 10:02:53 +03:00