From b08684709aad1dbf85d081132089c3a8a5d448e3 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 3 Mar 2023 18:49:05 +0100 Subject: [PATCH] Extract audio recorder interface In order to support both encoded and raw audio stream, extract a interface (very minimal, but sufficient to just start and stop). PR #3757 --- .../java/com/genymobile/scrcpy/AudioEncoder.java | 2 +- .../java/com/genymobile/scrcpy/AudioRecorder.java | 12 ++++++++++++ .../main/java/com/genymobile/scrcpy/Server.java | 14 +++++++------- 3 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 server/src/main/java/com/genymobile/scrcpy/AudioRecorder.java diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java b/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java index 8b60d37e..ad5be743 100644 --- a/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; -public final class AudioEncoder { +public final class AudioEncoder implements AudioRecorder { private static class InputTask { private final int index; diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioRecorder.java b/server/src/main/java/com/genymobile/scrcpy/AudioRecorder.java new file mode 100644 index 00000000..98302ddb --- /dev/null +++ b/server/src/main/java/com/genymobile/scrcpy/AudioRecorder.java @@ -0,0 +1,12 @@ +package com.genymobile.scrcpy; + +/** + * A component able to record audio asynchronously + * + * The implementation is responsible to send packets. + */ +public interface AudioRecorder { + void start(); + void stop(); + void join() throws InterruptedException; +} diff --git a/server/src/main/java/com/genymobile/scrcpy/Server.java b/server/src/main/java/com/genymobile/scrcpy/Server.java index 35da6965..b034e451 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Server.java +++ b/server/src/main/java/com/genymobile/scrcpy/Server.java @@ -92,7 +92,7 @@ public final class Server { } Controller controller = null; - AudioEncoder audioEncoder = null; + AudioRecorder audioRecorder = null; try (DesktopConnection connection = DesktopConnection.open(scid, tunnelForward, audio, control, sendDummyByte)) { if (options.getSendDeviceMeta()) { @@ -111,8 +111,8 @@ public final class Server { if (audio) { Streamer audioStreamer = new Streamer(connection.getAudioFd(), options.getAudioCodec(), options.getSendCodecId(), options.getSendFrameMeta()); - audioEncoder = new AudioEncoder(audioStreamer, options.getAudioBitRate(), options.getAudioCodecOptions(), options.getAudioEncoder()); - audioEncoder.start(); + audioRecorder = new AudioEncoder(audioStreamer, options.getAudioBitRate(), options.getAudioCodecOptions(), options.getAudioEncoder()); + audioRecorder.start(); } Streamer videoStreamer = new Streamer(connection.getVideoFd(), options.getVideoCodec(), options.getSendCodecId(), @@ -131,8 +131,8 @@ public final class Server { } finally { Ln.d("Screen streaming stopped"); initThread.interrupt(); - if (audioEncoder != null) { - audioEncoder.stop(); + if (audioRecorder != null) { + audioRecorder.stop(); } if (controller != null) { controller.stop(); @@ -140,8 +140,8 @@ public final class Server { try { initThread.join(); - if (audioEncoder != null) { - audioEncoder.join(); + if (audioRecorder != null) { + audioRecorder.join(); } if (controller != null) { controller.join();