Replies: 6 comments 7 replies
|
nice! imho, nscodec could be added, gated would be good. Since you mention QOI, by any chance, did you try it? I haven't heard of people using it for real yet. |
|
Yeah, tried it briefly, and long story short, it doesn't work end to end. Some detail below: I built ironrdp-viewer with --features qoi,qoiz and pointed it at the macrdp server (which advertises QOI via the default features). WARN ironrdp_session::fast_path: Unsupported RGBA QOI data …with the viewer drawing a blank window. ~412 warnings in ~12s on a loopback session. You might want to confirm this on your end, but this is mainly on the stock ironrdp-server, I believe - I haven't looked into this issue as I don't have much use for it yet. On NSCodec — thanks for the green light, will gate it behind a feature and put up the PR when time permits. |
|
I’m also in favor of including NSCodec to IronRDP. Happy to get a battle tested implementation merged! I would like this to take the form of:
|
|
I support the codec going in, and I often wonder about adding support for things like this myself but do not usually have time to do it, especially since they don't really touch my use case. The placement is a separate question, and I want to surface it before the dedicated-crate shape gets locked in by #1332. The current approach looks like an ad hoc way to significantly change the architecture of the codebase. The dedicated The NSCodec part of this matters specifically. If the workspace were going to shift toward per-codec crates, NSCodec is the wrong starting point. It is a minor backward-compat codec with narrow real-world relevance (the macOS Microsoft Remote Desktop legacy fallback path being the primary case), and small enough that a dedicated crate carries a high overhead-to-value ratio. A peer crate ships LICENSE-APACHE, LICENSE-MIT, README, full Cargo metadata, and a feature-gated The arguments for peer-crate promotion do not hold up on inspection. Opt-in by default is a solved problem inside Independent versioning is low-value for a stable 15-year-old codec API. The release-plz cost exceeds the decoupling benefit. A possible future extraction roadmap for ClearCodec, RFX, or ZGFX does not require pre-emptive NSCodec placement. The extraction can happen later when there is an actual driver, and pre-empting creates inconsistency now for a hypothetical cleanup later. The fragmentation cost is also real and compounding. A reader looking for codec implementations today looks in one place. With NSCodec out, the search space splits across My read is that NSCodec should fold into |
|
Thanks Greg Lamberson (@glamberson) — that's a well-argued case, and the consistency point (every other bitmap codec living under I don't have a strong opinion on placement myself — my goal is just to get a working NSCodec encoder upstreamed in whatever shape the maintainers want to live with long-term. I built #1332 as a dedicated Since this is really a workspace-architecture decision rather than anything specific to the encoder itself, I'll defer to Benoît Cortier (@CBenoit) on the call. Benoît Cortier (@CBenoit) — do you still want the dedicated-crate shape, or would you rather I fold it into |
|
Quick housekeeping note: both PRs that came up in this thread are now rebased onto current
The placement question for #1332 (dedicated |
Uh oh!
There was an error while loading. Please reload this page.
Hi! I maintain macrdp — an
xrdp-equivalent for macOS built on IronRDP — and I'm trying to upstream as much of myvendor/ironrdp-serverdivergence as possible. Before doing the port-and-cleanup work, I wanted to ask if you'd be open in principle to an NSCodec encoder inironrdp-server.Context
crates/ironrdp-pdu/src/rdp/capability_sets/bitmap_codecs/mod.rsdefines the NSCodec capability advertisement + codec property, andironrdp-server/src/server.rs:1109has aCodecProperty::NsCodec(_) => ()match arm so the server can see the client's NSCodec capability. But there's no actual NSCodec encoder — searching the full git history confirms one never existed.That means a client that advertises only NSCodec for legacy bitmap codecs (no RemoteFx, no QOI) has to fall back to raw/RLE BitmapUpdate. The notable real-world case: the Microsoft Remote Desktop / Windows App on macOS advertises NSCodec only in its legacy codec list. Without an encoder, those clients pay heavy bandwidth for the legacy display path. (With
--enable-h264they decode AVC420 over EGFX fine, so this is specifically about the legacy fallback path.)What I have
A ~200-line encoder following MS-RDPNSC §3.1.5: RGB→YCoCg color-space conversion, custom per-plane RLE, 20-byte frame header. Currently:
ChromaSubsamplingLevel = 0(no subsampling).encoder/mod.rsset_surface()path the same way the other encoders do.What I'm asking
Before I do the port-and-cleanup work for a PR:
ironrdp-server?qoi/qoizprecedent)?UpdateEncoderCodecs, etc.)If the answer is "no, we don't want a second legacy codec encoder" — totally fair, I'll just keep it vendored. Happy either way; just want to avoid writing the cleanup PR if it'd be rejected on policy grounds.
Thanks!
All reactions