Proto commits in colinmarc/magic-mirror

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