-
Notifications
You must be signed in to change notification settings - Fork 129
Remote Display proof-of-concept #316
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
ewired
wants to merge
81
commits into
baskerville:master
Choose a base branch
from
ewired:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A Remote Display application for Plato, tested on Clara 2E and Libra 2. An MQTT server relays messages between the Kobo device and Firefox extension. The extension controls the browser with gestures, and encodes tab screenshots as display updates using a WebAssembly module. Display update keyframes are QOI images, or lossy JPEG as fallback if any display update is too large. Interframes are provided by a bidiff of the previous and new frame for QOI keyframes only. All display updates are compressed with zstd.
The first iteration of Remote Display used zlib compressed PBM or PGM images, which could not be as efficiently diffed for interframes. 1-bit PBM+zlib frames had a great payload size but sacrificed grays. Then, JPEG XL was used instead to allow user-configured lossiness/quality, with lossless having better compression than PGM+zlib. 1-bit images compressed worse than 8-bit grayscale with lossless JPEG XL. Lossy JPEG XL didn't improve payload sizes much over lossless. It also had very slow encode and decode times in either mode, lossy being the slowest, made worse by instantiating ImageMagick in WASM for every frame. A custom WASM module to improve JPEG XL performance and use interframes was planned, but there is currently no pure-Rust encoder supporting the interframe feature easily.
QOI+zstd compresses as well as lossless JPEG XL for reading most webpages, and a fallback to lossy JPEG for pages with high-detail images prevents oversized MQTT payloads. Bidiff+zstd of QOI for interframes achieves significant or near total reduction in payload size when scrolling or interacting with webpages with no noticeable speed impact, and only one full QOI frame of memory consumption.
Currently the gestures are: