Dissociate virtual display size and capture size

Allow capturing virtual displays at a lower resolution using
-m/--max-size.

In the original implementation in #5370, the virtual display size was
necessarily the same as the capture size. The --max-size value was only
allowed to determine the virtual display size when no explicit size was
provided.

Since the dpi was scaled down accordingly, it is often better to create
a virtual display at the target capture size directly. However, not
everything is rendered according to the virtual display DPI. For
example, a page in Firefox is rendered too big on small virtual
displays. Thus, it makes sense to be able create a virtual display at a
given size, and capture it at a lower resolution with --max-size. This
is now possible using OpenGL filters.

Therefore, change the behavior of --max-size for virtual displays:
 - it does not impact --new-display without size argument anymore (the
   virtual display size is the main display size);
 - it is used to limit the capture size (whether an explicit size is
   provided or not).

This new behavior is consistent with main display capture.

Refs #5370 comment <https://github.com/Genymobile/scrcpy/pull/5370#issuecomment-2438944401>
Refs <https://github.com/Genymobile/scrcpy/pull/5370>
This commit is contained in:
Romain Vimont
2024-11-20 13:01:57 +01:00
parent 4608a19a13
commit daba00a819
7 changed files with 35 additions and 24 deletions

View File

@@ -193,9 +193,9 @@ phone, landscape for a tablet).
Cropping is performed before `--capture-orientation` and `--angle`.
For screen mirroring, `--max-size` is applied after cropping. For camera and
virtual display mirroring, `--max-size` is applied first (because it selects the
source size rather than resizing it).
For display mirroring, `--max-size` is applied after cropping. For camera,
`--max-size` is applied first (because it selects the source size rather than
resizing the content).
## Display

View File

@@ -8,7 +8,6 @@ To mirror a new virtual display instead of the device screen:
scrcpy --new-display=1920x1080
scrcpy --new-display=1920x1080/420 # force 420 dpi
scrcpy --new-display # use the main display size and density
scrcpy --new-display -m1920 # ... scaled to fit a max size of 1920
scrcpy --new-display=/240 # use the main display size and 240 dpi
```