Repository navigation
Pick the frame rate from the link, never reduce resolution - #116
londospark wants to merge 2 commits into
Conversation
The ladder judged a rung affordable at 0.03 bits per pixel per stream, so
a 2560x1600 Dual420 stream at 15 Mbit/s ran at 60 fps with visibly blocky
text; sharp desktop text wants about 0.1. The rungs were also coarse
(60, 30, 15, 10, 5), and the bottom two halved the resolution.
The ladder now chooses a rung { aux, fps } directly: the highest frame
rate the measured rate pays for at --quality-bpp (0.08 by default),
keeping the 4:4:4 chroma stream while that is at least 30 fps, then
Single420, down to 5 fps. The stream is always the window's size.
Hysteresis is unchanged, plus no move smaller than 15% of the frame rate.
The bitrate ceiling is raised from 80 to 250 Mbit/s (still bounded by
pixels x streams x fps x 0.1) so a large wired stream can pay for full
quality.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
[Medium impact] The changes affect the server's video quality adaptation for remote desktop sessions. Run the required hardware checks before merging; no new code defect was established. Findings
SummaryThe PR chooses frame rate from the measured link rate and keeps the full fitted resolution.
|
…return After the ladder dropped to Single420, RateController bounded the target by one stream (6 x pixels at 60 fps), but restoring Dual420 at 30 fps with 1.25x headroom needs 7.06 x pixels, so a recovered link never got full chroma back. Bound it by the most streams the session has used; the per-stream bitrate still divides by the active count. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| // The stream is always the full fit size: the ladder trades frame | ||
| // rate and chroma, never resolution. | ||
| let want = self.base_stream; |
There was a problem hiding this comment.
Required hardware checks are missing
The PR says scripts/e2e.sh was not run. These changes affect frame pacing, chroma switching, and encoded size. CLAUDE.md requires that check before merging video pipeline changes, so run it and record the result before merging.
Context Used: CLAUDE.md (source)
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Fixes #113
What happens
The ladder accepts a rung once each stream gets
FLOOR_BPP = 0.03bits per pixel per frame. On a 2560x1600 Dual420 stream at 15 Mbit/s, that keeps 60 fps with blocky text, where sharp text wants about 0.1. The rungs are also coarse (60, 30, 15, 15, 10, 10, 5), and the bottom two halve the resolution.The change
The ladder now chooses a
Rung { aux, fps }directly from the measured rate:quality_bppdefaults to 0.08 (QUALITY_BPP). The new server flag--quality-bppchanges it.apply_stream_paramsandfall_back_to_cpualways usebase_stream, and thescalefield is gone.pixels × streams × fps × 0.1is unchanged, so at 60 fps this only matters for streams above 4K.At the current 60 fps ceiling, this mostly changes what happens on slower links. #117 raises the ceiling to the client's refresh rate, and the continuous frame rate is what keeps that from jumping to 240 fps with too few bits.
Testing
scripts/check.shpasses. The ladder tests are rewritten for rungs, with new ones covering:scripts/e2e.shnot run.🤖 Generated with Claude Code