From 420d3a40ddea61be80ef1e7026fa2edb22f66a41 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sat, 11 Nov 2023 11:09:47 +0100 Subject: [PATCH] Fix error handling in raw audio recorder It is incorret to ever call: streamer.writeDisableStream(...); after: streamer.writeAudioHeader(); Move the try-catch block so that it can never happen. --- .../java/com/genymobile/scrcpy/AudioRawRecorder.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioRawRecorder.java b/server/src/main/java/com/genymobile/scrcpy/AudioRawRecorder.java index 6108c54b..fdac8b3a 100644 --- a/server/src/main/java/com/genymobile/scrcpy/AudioRawRecorder.java +++ b/server/src/main/java/com/genymobile/scrcpy/AudioRawRecorder.java @@ -32,7 +32,13 @@ public final class AudioRawRecorder implements AsyncProcessor { final MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); try { - capture.start(); + try { + capture.start(); + } catch (Throwable t) { + // Notify the client that the audio could not be captured + streamer.writeDisableStream(false); + throw t; + } streamer.writeAudioHeader(); while (!Thread.currentThread().isInterrupted()) { @@ -45,10 +51,6 @@ public final class AudioRawRecorder implements AsyncProcessor { streamer.writePacket(buffer, bufferInfo); } - } catch (Throwable e) { - // Notify the client that the audio could not be captured - streamer.writeDisableStream(false); - throw e; } finally { capture.stop(); }