From 292af180c0c2fbbdfe5e49051d74abc3578d6ecf Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 10 Nov 2024 09:00:32 +0100 Subject: [PATCH] Move mediaCodec.stop() to finally block This will allow to stop MediaCodec only after clean ups of other components which must be performed before stopping MediaCodec. --- .../java/com/genymobile/scrcpy/video/SurfaceEncoder.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java b/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java index 62581d3d..fc99e660 100644 --- a/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java @@ -108,9 +108,6 @@ public class SurfaceEncoder implements AsyncProcessor { // The capture might have been closed internally (for example if the camera is disconnected) alive = !stopped.get() && !capture.isClosed(); } - - // do not call stop() on exception, it would trigger an IllegalStateException - mediaCodec.stop(); } catch (IllegalStateException | IllegalArgumentException e) { Ln.e("Encoding error: " + e.getClass().getName() + ": " + e.getMessage()); if (!prepareRetry(size)) { @@ -120,6 +117,11 @@ public class SurfaceEncoder implements AsyncProcessor { alive = true; } finally { reset.setRunningMediaCodec(null); + try { + mediaCodec.stop(); + } catch (IllegalStateException e) { + // ignore + } mediaCodec.reset(); if (surface != null) { surface.release();