mirror of
https://github.com/Genymobile/scrcpy.git
synced 2025-04-19 19:15:08 +00:00
Refactor virtual display properties initialization
Following the changes from the previous commit, the behavior is now identical when mirroring the main display or using the SurfaceControl API. Factorize the code to perform the initialization in a single location. Refs #5605 <https://github.com/Genymobile/scrcpy/issues/5605> PR #5614 <https://github.com/Genymobile/scrcpy/pull/5614>
This commit is contained in:
parent
97fa77c76c
commit
f90dc216d1
1 changed files with 12 additions and 18 deletions
|
@ -124,23 +124,9 @@ public class ScreenCapture extends SurfaceCapture {
|
|||
inputSize = videoSize;
|
||||
}
|
||||
|
||||
int virtualDisplayId;
|
||||
PositionMapper positionMapper;
|
||||
try {
|
||||
virtualDisplay = ServiceManager.getDisplayManager()
|
||||
.createVirtualDisplay("scrcpy", inputSize.getWidth(), inputSize.getHeight(), displayId, surface);
|
||||
|
||||
|
||||
if (displayId == 0) {
|
||||
// Main display: send all events to the original display, relative to the device size
|
||||
Size deviceSize = displayInfo.getSize();
|
||||
positionMapper = PositionMapper.create(videoSize, transform, deviceSize);
|
||||
virtualDisplayId = 0;
|
||||
} else {
|
||||
// The positions are relative to the virtual display, not the original display (so use inputSize, not deviceSize!)
|
||||
positionMapper = PositionMapper.create(videoSize, transform, inputSize);
|
||||
virtualDisplayId = virtualDisplay.getDisplay().getDisplayId();
|
||||
}
|
||||
Ln.d("Display: using DisplayManager API");
|
||||
} catch (Exception displayManagerException) {
|
||||
try {
|
||||
|
@ -148,11 +134,7 @@ public class ScreenCapture extends SurfaceCapture {
|
|||
|
||||
Size deviceSize = displayInfo.getSize();
|
||||
int layerStack = displayInfo.getLayerStack();
|
||||
|
||||
setDisplaySurface(display, surface, deviceSize.toRect(), inputSize.toRect(), layerStack);
|
||||
virtualDisplayId = displayId;
|
||||
|
||||
positionMapper = PositionMapper.create(videoSize, transform, deviceSize);
|
||||
Ln.d("Display: using SurfaceControl API");
|
||||
} catch (Exception surfaceControlException) {
|
||||
Ln.e("Could not create display using DisplayManager", displayManagerException);
|
||||
|
@ -162,6 +144,18 @@ public class ScreenCapture extends SurfaceCapture {
|
|||
}
|
||||
|
||||
if (vdListener != null) {
|
||||
int virtualDisplayId;
|
||||
PositionMapper positionMapper;
|
||||
if (virtualDisplay == null || displayId == 0) {
|
||||
// Surface control or main display: send all events to the original display, relative to the device size
|
||||
Size deviceSize = displayInfo.getSize();
|
||||
positionMapper = PositionMapper.create(videoSize, transform, deviceSize);
|
||||
virtualDisplayId = displayId;
|
||||
} else {
|
||||
// The positions are relative to the virtual display, not the original display (so use inputSize, not deviceSize!)
|
||||
positionMapper = PositionMapper.create(videoSize, transform, inputSize);
|
||||
virtualDisplayId = virtualDisplay.getDisplay().getDisplayId();
|
||||
}
|
||||
vdListener.onNewVirtualDisplay(virtualDisplayId, positionMapper);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue