#2052 closed enhancement (fixed)
downscaling server side - not just for video
Reported by: | Antoine Martin | Owned by: | Antoine Martin |
---|---|---|---|
Priority: | major | Milestone: | 4.1 |
Component: | encodings | Version: | 2.4.x |
Keywords: | Cc: |
Description
When the client is using a desktop-scaling
value lower than 1.0, we end up sending pixels that aren't all used client-side since we end up downscaling the picture to display it. (the render target is smaller than the picture the client receives)
It would be better if the client could tell the server about the scaling factor it is using then the server can:
- choose this same factor (or more) for video scaling - easy
- downscale picture data before compression: new capability flag, new client option, image down scaling pre-compression
Change History (12)
comment:1 Changed 3 years ago by
Status: | new → assigned |
---|---|
Summary: | downscaling attribute → downscaling server side - not just for video |
comment:2 Changed 3 years ago by
Milestone: | 3.1 → 4.0 |
---|
comment:4 Changed 2 years ago by
I'd argue that a major reason for this feature is shadowing. Currently, there isn't any way to use a shadowed desktop of a higher resolution than the client (at least in HTML5, the only client I use).
comment:5 Changed 2 years ago by
Milestone: | 4.0 → 4.1 |
---|
comment:6 Changed 2 years ago by
Mostly done in:
- r26652: client tells the server about its "render-size", the resolution it will actually render at - the video scaling code will
- r26656: downscale pixel data before compressing, and upscale it client-side
Still TODO:
- maybe support some kind of fast scaling so we can compress
webp
andjpeg
via the native encoders rather than using pillow? (meh: it is likely that the savings from the downscaling via pillow are enough to not have to bother) - client side should be able to decode using any decoder and just upscale during the backend pixel paint (cairo / opengl) rather than being forced to use the pillow decoder
- drop delta compression? (not very useful and makes the code a lot more complicated)
... at least in HTML5, the only client I use ...
@leo60228: there is no support for any window scaling in the HTML5 client, feel free to create a new ticket for that.
comment:7 Changed 2 years ago by
Owner: | changed from Antoine Martin to stdedos |
---|---|
Status: | assigned → new |
- r26663: remove delta support (+r26665 + r26666)
- r26664: honour gravity adjustments when resizing with opengl backend (could be backported with extra care: v4 does gravity adjust in
paint_rgb
, trunk now does it indo_paint_rgb
andgl_paint_planar
) - r26668: handle scaling during the backing paint rather than the decompression stage, so all the decoders can use it and not just pillow
Notes:
- webp can decompress to a scaled image - not sure there are any benefits to doing that
- in non-opengl video mode, we could avoid scaling during the csc stage, and let the cairo paint handle it - meh
@stdedos: I am re-assigning this ticket to you because you will see huge improvements in bandwidth usage and performance when using desktop-scaling
values lower than 1.0
.
Feel free to just close.
(this requires 4.1-r26668 or later on both client and server)
comment:8 Changed 2 years ago by
I can keep it open, and I cannot test it (my OS update plan for the server is late June to August)
comment:9 Changed 22 months ago by
Owner: | changed from stdedos to Antoine Martin |
---|---|
Status: | new → assigned |
This has caused a regression for normal windows when we resize them up: the render-size
does not get updated server side, and we end up downscaling when we don't need to..
comment:10 Changed 22 months ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
... the render-size does not get updated server side ..
Fixed in r27044.
Side effect: we now call update_encoding_selection
from set_client_properties
, even when the render-size is identical to the window size, which is a little bit of a waste.
stdedos: I'm going to close this ticket for 4.1 - try it when you get a chance.
comment:11 Changed 20 months ago by
This causes problems with windows that don't fit the sizing constraints exactly: we end up downscaling them to the client render size (which is often only a few pixels off) and that makes it blurry. Also makes us use pillow (png) instead of the faster options (webp, jpeg).
r27525 fixes that using a threshold.
comment:12 Changed 16 months ago by
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/2052
Milestone renamed