These 34 commits are when the Protocol Buffers files have changed:
Commit: | 5440ad9 | |
---|---|---|
Author: | Colin Marc |
docs(protocol): fix some spelling errors
The documentation is generated from this commit.
Commit: | b41b05e | |
---|---|---|
Author: | Colin Marc |
chore(mm-protocol): bump version
Commit: | ddbe843 | |
---|---|---|
Author: | Colin Marc |
feat!: send hierarchical_layer as video frame metadata The motivation for this (breaking) change is that the `frame_optional` field doesn't provide enough information to the decoder on all platforms. In particular, VideoToolbox on Mac, when confronted with a dropped frame, breaks if you send it any frames depending on it until it's recovered. If there are more than two layers, the middle layer isn't exactly optional, but it's only necessary to exclude higher layers until we recover.
Commit: | 729e652 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat!: implement forward error correction Forward error correction, or FEC, allows us to spend bandwidth and a little bit of CPU and latency to increase the robustness of the video stream in the face of lost packets. In this first simple implementation, we use an inexpensive scheme called RaptorQ, set at a constant level of overhead for each video layer in the server config.
Commit: | 243c2fd | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat!: implement forward error correction Forward error correction, or FEC, allows us to spend bandwidth and a little bit of CPU to increase the robustness of the video stream in the face of lost packets. In this first simple implementation, we use an inexpensive scheme called RaptorQ to protect the base layer of a video stream (assuming hierarchical coding has created multiple layers). This causes us to send 15% more data for those frames, with the advantage that the frames are recoverable with up to 15% packets missing.
Commit: | 60dffc0 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: explicit video refresh Instead of regularly sending headers and keyframes every few seconds, the idea here is to send an endless stream of P frames, each referencing the previous one. This saves some bandwidth, but means that a client which "falls off" the chain has no way of (automatically) recovering. To fix that, the client needs an explicit way to request a keyframe/header packet, which is added here as an attachment message. This is much more robust for the client than just waiting for a refresh to come along, and results in shorter pauses when an important frame is dropped. Because we use hierarchical coding (for h265), we take care to indicate if a frame is actually important, so that clients can avoid requesting refreshes when the stream is already recoverable.
Commit: | aaf8ba8 | |
---|---|---|
Author: | Colin Marc |
docs: wrap line
Commit: | ca330c7 | |
---|---|---|
Author: | Colin Marc |
docs: fix markdown link
Commit: | 3ee3285 | |
---|---|---|
Author: | Colin Marc |
docs: generate internal links for protocol reference
Commit: | 756bfa8 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: add header images to the application list
Commit: | bb4b42f | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: add header images to the application list
Commit: | 0848b80 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
refactor: rename application 'name' to 'id' This should not break existing configs, and is wire compatible.
Commit: | b417559 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: add 'app_path' for organizing apps
Commit: | 57a59f4 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
fix(protocol): use the attachment coordinate space This is cleaner from a protocol design perspective, and currently it makes no difference, since we only support attaching at the session's native resolution.
Commit: | 8552f60 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: refactor out most of mmclient into a UniFFI rust lib The new lib, called "mm-client-common", is intended to be used in more clients.
Commit: | 0e16ec9 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
chore(protocol): use a custom timestamp struct instead of google's This is wire-compatible with the old version, but doesn't require the dependency. We want to export protocol structs as UniFFI records, which is difficult with imported types.
Commit: | 86ea8d4 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
fix(client): correctly invert joystick direction gilrs (the rust input library we're using) inverts up and down. This is also underspecified at the protocol level. Finally, we were also sending the right trigger incorrectly.
Commit: | e8097e5 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: refactor out most of mmclient into a UniFFI rust lib The new lib, called "mm-client-common", is intended to be used in more clients.
Commit: | e1d4b27 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
chore(protocol): use a custom timestamp struct instead of google's This is wire-compatible with the old version, but doesn't require the dependency. We want to export protocol structs as UniFFI records, which is difficult with imported types.
Commit: | a60eb39 | |
---|---|---|
Author: | Colin Marc |
fix(client): correctly invert joystick direction gilrs (the rust input library we're using) inverts up and down. This is also underspecified at the protocol level. Finally, we were also sending the right trigger incorrectly.
Commit: | 1d5b7f0 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: allow specifying 'permanent' gamepads for a session
Commit: | 55108b0 | |
---|---|---|
Author: | Colin Marc |
docs(protocol): be picky about indentatation
Commit: | 5fd2241 | |
---|---|---|
Author: | Colin Marc |
fix(protocol): rename Gamepad* enums to reduce the possibility of collision
Commit: | 990f48c | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: plumb controller input through to the server This doesn't actually do anything with it yet, though.
Commit: | 161a533 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
docs(protocol): be consistent around events sent on the att stream
Commit: | 0c4b85a | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat(protocol): allow attachments to be configured for HDR10 output
Commit: | 6c590ef | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: add --preset, for setting quality/bandwidth usage dynamically In particular, this makes it a first-class concept, and allows clients to set the quality level.
Commit: | e11dfec | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: cursor locking and relative motion First-person games generally work by locking the cursor to the center of the screen and using relative motion to look around. This requires some additions to the protocol, as well as two wayland protocols.
Commit: | 54a5990 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat(protocol): allow attachments to be configured for HDR10 output
Commit: | c18ec0f | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
docs(protocol): add a note about protocol semver
Commit: | 95dc1e9 | |
---|---|---|
Author: | Colin Marc |
feat: cursor push This allows the server to push the app's custom cursor all the way to the client. It works for both "named" cursors and cursor images (like custom cursors in games) but only via the shm wayland interface at the moment.
Commit: | 8fee53f | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
feat: support scroll wheel and touchpad input
Commit: | b1bbe0d | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
fix(protocol): remove server_side_cursor_enabled It's not checked anywhere.
Commit: | 7491613 | |
---|---|---|
Author: | Colin Marc | |
Committer: | Colin Marc |
Initial commit