Compare commits
1 Commits
fix_audio_
...
no_kill_ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fbeb53009a |
@@ -77,6 +77,7 @@ enum {
|
||||
OPT_NO_AUDIO_PLAYBACK,
|
||||
OPT_NO_VIDEO_PLAYBACK,
|
||||
OPT_AUDIO_SOURCE,
|
||||
OPT_NO_KILL_ADB_BEFORE_OTG,
|
||||
};
|
||||
|
||||
struct sc_option {
|
||||
@@ -411,6 +412,16 @@ static const struct sc_option options[] = {
|
||||
.longopt = "no-key-repeat",
|
||||
.text = "Do not forward repeated key events when a key is held down.",
|
||||
},
|
||||
{
|
||||
.longopt_id = OPT_NO_KILL_ADB_BEFORE_OTG,
|
||||
.longopt = "no-kill-adb-before-otg",
|
||||
// with .text, the option is not documented on other platforms
|
||||
#ifdef _WIN32
|
||||
.text = "By default, scrcpy kills the adb daemon on Windows if --otg "
|
||||
"is specified.\n"
|
||||
"This option avoids to kill the adb daemon.",
|
||||
#endif
|
||||
},
|
||||
{
|
||||
.longopt_id = OPT_NO_MIPMAPS,
|
||||
.longopt = "no-mipmaps",
|
||||
@@ -1944,6 +1955,14 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[],
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case OPT_NO_KILL_ADB_BEFORE_OTG:
|
||||
#ifdef _WIN32
|
||||
opts->kill_adb_before_otg = false;
|
||||
break;
|
||||
#else
|
||||
LOGE("--no-kill-adb-before-otg only exists on Windows.");
|
||||
return false;
|
||||
#endif
|
||||
default:
|
||||
// getopt prints the error message on stderr
|
||||
return false;
|
||||
|
||||
@@ -48,6 +48,9 @@ const struct scrcpy_options scrcpy_options_default = {
|
||||
#endif
|
||||
#ifdef HAVE_USB
|
||||
.otg = false,
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
.kill_adb_before_otg = true,
|
||||
#endif
|
||||
.show_touches = false,
|
||||
.fullscreen = false,
|
||||
|
||||
@@ -148,6 +148,9 @@ struct scrcpy_options {
|
||||
#endif
|
||||
#ifdef HAVE_USB
|
||||
bool otg;
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
bool kill_adb_before_otg;
|
||||
#endif
|
||||
bool show_touches;
|
||||
bool fullscreen;
|
||||
|
||||
@@ -83,10 +83,12 @@ scrcpy_otg(struct scrcpy_options *options) {
|
||||
#ifdef _WIN32
|
||||
// On Windows, only one process could open a USB device
|
||||
// <https://github.com/Genymobile/scrcpy/issues/2773>
|
||||
LOGI("Killing adb daemon (if any)...");
|
||||
unsigned flags = SC_ADB_NO_STDOUT | SC_ADB_NO_STDERR | SC_ADB_NO_LOGERR;
|
||||
// uninterruptible (intr == NULL), but in practice it's very quick
|
||||
sc_adb_kill_server(NULL, flags);
|
||||
if (options->kill_adb_before_otg) {
|
||||
LOGI("Killing adb daemon (if any)...");
|
||||
unsigned flags = SC_ADB_NO_STDOUT | SC_ADB_NO_STDERR | SC_ADB_NO_LOGERR;
|
||||
// uninterruptible (intr == NULL), but in practice it's very quick
|
||||
sc_adb_kill_server(NULL, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct sc_usb_callbacks cbs = {
|
||||
|
||||
@@ -30,9 +30,8 @@ To disable only the audio playback, see [no playback](video.md#no-playback).
|
||||
|
||||
To play audio only, disable the video:
|
||||
|
||||
```bash
|
||||
```
|
||||
scrcpy --no-video
|
||||
# interrupt with Ctrl+C
|
||||
```
|
||||
|
||||
Without video, the audio latency is typically not criticial, so it might be
|
||||
|
||||
@@ -168,7 +168,6 @@ the computer. This option is useful when [recording](recording.md) or when
|
||||
```bash
|
||||
scrcpy --v4l2-sink=/dev/video2 --no-playback
|
||||
scrcpy --record=file.mkv --no-playback
|
||||
# interrupt with Ctrl+C
|
||||
```
|
||||
|
||||
It is also possible to disable video and audio playback separately:
|
||||
|
||||
@@ -105,17 +105,8 @@ public final class AudioEncoder implements AsyncProcessor {
|
||||
private void outputThread(MediaCodec mediaCodec) throws IOException, InterruptedException {
|
||||
streamer.writeAudioHeader();
|
||||
|
||||
long lastPts = 0;
|
||||
while (!Thread.currentThread().isInterrupted()) {
|
||||
OutputTask task = outputTasks.take();
|
||||
|
||||
if (task.bufferInfo.presentationTimeUs <= lastPts) {
|
||||
// Fix PTS if not strictly monotonically increasing
|
||||
task.bufferInfo.presentationTimeUs = ++lastPts;
|
||||
} else {
|
||||
lastPts = task.bufferInfo.presentationTimeUs;
|
||||
}
|
||||
|
||||
ByteBuffer buffer = mediaCodec.getOutputBuffer(task.index);
|
||||
try {
|
||||
streamer.writePacket(buffer, task.bufferInfo);
|
||||
|
||||
Reference in New Issue
Block a user