Skip to content

Commit

Permalink
Do not recreate display on every rotation
Browse files Browse the repository at this point in the history
This semantically reverts 7e3b935.

The issue seems to be fixed if setSurface() is called before resize() on
the virtual display.

Refs #4840 <#4840>
  • Loading branch information
rom1v committed Nov 15, 2024
1 parent 9a1f9f6 commit 239553f
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions server/src/main/java/com/genymobile/scrcpy/video/ScreenCapture.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,6 @@ public void prepare() throws ConfigurationException {

@Override
public void start(Surface surface) throws IOException {
if (display != null) {
SurfaceControl.destroyDisplay(display);
display = null;
}
if (virtualDisplay != null) {
virtualDisplay.release();
virtualDisplay = null;
}

Size inputSize;
if (transform != null) {
// If there is a filter, it must receive the full display content
Expand All @@ -158,16 +149,23 @@ public void start(Surface surface) throws IOException {
int virtualDisplayId;
PositionMapper positionMapper;
try {
virtualDisplay = ServiceManager.getDisplayManager()
.createVirtualDisplay("scrcpy", inputSize.getWidth(), inputSize.getHeight(), displayId, surface);
if (virtualDisplay == null) {
virtualDisplay = ServiceManager.getDisplayManager()
.createVirtualDisplay("scrcpy", inputSize.getWidth(), inputSize.getHeight(), displayId, surface);
} else {
virtualDisplay.setSurface(surface);
virtualDisplay.resize(videoSize.getWidth(), videoSize.getHeight(), displayInfo.getDpi());
}
virtualDisplayId = virtualDisplay.getDisplay().getDisplayId();

// The positions are relative to the virtual display, not the original display (so use inputSize, not deviceSize!)
positionMapper = PositionMapper.create(videoSize, transform, inputSize);
Ln.d("Display: using DisplayManager API");
} catch (Exception displayManagerException) {
try {
display = createDisplay();
if (display == null) {
display = createDisplay();
}

Size deviceSize = displayInfo.getSize();
int layerStack = displayInfo.getLayerStack();
Expand Down

0 comments on commit 239553f

Please sign in to comment.