From 6928acdeac29eee404a7c7014654965ef5128b88 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 5 May 2023 23:43:14 +0200 Subject: [PATCH] Rename --no-display to --no-mirror The option impacts both video and audio playback, so "no display" is not an appropriate name. PR #3978 --- app/data/bash-completion/scrcpy | 2 +- app/data/zsh-completion/_scrcpy | 2 +- app/scrcpy.1 | 4 ++-- app/src/cli.c | 27 ++++++++++++++++++--------- app/src/options.c | 2 +- app/src/options.h | 2 +- app/src/scrcpy.c | 20 +++++++++----------- app/tests/test_cli.c | 8 ++++---- doc/recording.md | 2 +- doc/v4l2.md | 2 +- doc/video.md | 6 +++--- 11 files changed, 42 insertions(+), 35 deletions(-) diff --git a/app/data/bash-completion/scrcpy b/app/data/bash-completion/scrcpy index ae516c34..a0fca23d 100644 --- a/app/data/bash-completion/scrcpy +++ b/app/data/bash-completion/scrcpy @@ -33,7 +33,7 @@ _scrcpy() { --no-clipboard-autosync --no-downsize-on-error -n --no-control - -N --no-display + -N --no-mirror --no-key-repeat --no-mipmaps --no-power-on diff --git a/app/data/zsh-completion/_scrcpy b/app/data/zsh-completion/_scrcpy index 97bf4f3e..ccb51a2c 100644 --- a/app/data/zsh-completion/_scrcpy +++ b/app/data/zsh-completion/_scrcpy @@ -39,7 +39,7 @@ arguments=( '--no-clipboard-autosync[Disable automatic clipboard synchronization]' '--no-downsize-on-error[Disable lowering definition on MediaCodec error]' {-n,--no-control}'[Disable device control \(mirror the device in read only\)]' - {-N,--no-display}'[Do not display device \(during screen recording or when V4L2 sink is enabled\)]' + {-N,--no-mirror}'[Do not mirror device \(only when recording or V4L2 sink is enabled\)]' '--no-key-repeat[Do not forward repeated key events when a key is held down]' '--no-mipmaps[Disable the generation of mipmaps]' '--no-power-on[Do not power on the device on start]' diff --git a/app/scrcpy.1 b/app/scrcpy.1 index 37497211..6ef01680 100644 --- a/app/scrcpy.1 +++ b/app/scrcpy.1 @@ -210,8 +210,8 @@ This option disables this behavior. Disable device control (mirror the device in read\-only). .TP -.B \-N, \-\-no\-display -Do not display device (only when screen recording is enabled). +.B \-N, \-\-no\-mirror +Do not mirror device video or audio on the computer (only when recording or V4L2 sink is enabled). .TP .B \-\-no\-key\-repeat diff --git a/app/src/cli.c b/app/src/cli.c index d6d9f41d..1ba7fe1f 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -72,6 +72,7 @@ enum { OPT_REQUIRE_AUDIO, OPT_AUDIO_BUFFER, OPT_AUDIO_OUTPUT_BUFFER, + OPT_NO_DISPLAY, }; struct sc_option { @@ -380,9 +381,14 @@ static const struct sc_option options[] = { }, { .shortopt = 'N', + .longopt = "no-mirror", + .text = "Do not mirror device video or audio on the computer (only " + "when recording or V4L2 sink is enabled).", + }, + { + // deprecated + .longopt_id = OPT_NO_DISPLAY, .longopt = "no-display", - .text = "Do not display device (only when screen recording or V4L2 " - "sink is enabled).", }, { .longopt_id = OPT_NO_KEY_REPEAT, @@ -1642,8 +1648,11 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], case 'n': opts->control = false; break; + case OPT_NO_DISPLAY: + LOGW("--no-display is deprecated, use --no-mirror instead."); + // fall through case 'N': - opts->display = false; + opts->mirror = false; break; case 'p': if (!parse_port_range(optarg, &opts->port_range)) { @@ -1890,8 +1899,8 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], } #ifdef HAVE_V4L2 - if (!opts->display && !opts->record_filename && !opts->v4l2_device) { - LOGE("-N/--no-display requires either screen recording (-r/--record)" + if (!opts->mirror && !opts->record_filename && !opts->v4l2_device) { + LOGE("-N/--no-mirror requires either screen recording (-r/--record)" " or sink to v4l2loopback device (--v4l2-sink)"); return false; } @@ -1915,14 +1924,14 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], return false; } #else - if (!opts->display && !opts->record_filename) { - LOGE("-N/--no-display requires screen recording (-r/--record)"); + if (!opts->mirror && !opts->record_filename) { + LOGE("-N/--no-mirror requires screen recording (-r/--record)"); return false; } #endif - if (opts->audio && !opts->display && !opts->record_filename) { - LOGI("No display and no recording: audio disabled"); + if (opts->audio && !opts->mirror && !opts->record_filename) { + LOGI("No mirror and no recording: audio disabled"); opts->audio = false; } diff --git a/app/src/options.c b/app/src/options.c index 8b99f6f3..eec81716 100644 --- a/app/src/options.c +++ b/app/src/options.c @@ -52,7 +52,7 @@ const struct scrcpy_options scrcpy_options_default = { .fullscreen = false, .always_on_top = false, .control = true, - .display = true, + .mirror = true, .turn_screen_off = false, .key_inject_mode = SC_KEY_INJECT_MODE_MIXED, .window_borderless = false, diff --git a/app/src/options.h b/app/src/options.h index c41e2757..3bb0c91e 100644 --- a/app/src/options.h +++ b/app/src/options.h @@ -135,7 +135,7 @@ struct scrcpy_options { bool fullscreen; bool always_on_top; bool control; - bool display; + bool mirror; bool turn_screen_off; enum sc_key_inject_mode key_inject_mode; bool window_borderless; diff --git a/app/src/scrcpy.c b/app/src/scrcpy.c index efa69d31..2c7fbf30 100644 --- a/app/src/scrcpy.c +++ b/app/src/scrcpy.c @@ -137,7 +137,7 @@ sdl_set_hints(const char *render_driver) { } static void -sdl_configure(bool display, bool disable_screensaver) { +sdl_configure(bool mirror, bool disable_screensaver) { #ifdef _WIN32 // Clean up properly on Ctrl+C on Windows bool ok = SetConsoleCtrlHandler(windows_ctrl_handler, TRUE); @@ -146,7 +146,7 @@ sdl_configure(bool display, bool disable_screensaver) { } #endif // _WIN32 - if (!display) { + if (!mirror) { return; } @@ -385,12 +385,10 @@ scrcpy(struct scrcpy_options *options) { goto end; } - if (options->display) { + if (options->mirror) { sdl_set_hints(options->render_driver); - } - // Initialize SDL video in addition if display is enabled - if (options->display) { + // Initialize SDL video and audio in addition if mirroring is enabled if (SDL_Init(SDL_INIT_VIDEO)) { LOGE("Could not initialize SDL video: %s", SDL_GetError()); goto end; @@ -402,7 +400,7 @@ scrcpy(struct scrcpy_options *options) { } } - sdl_configure(options->display, options->disable_screensaver); + sdl_configure(options->mirror, options->disable_screensaver); // Await for server without blocking Ctrl+C handling bool connected; @@ -428,7 +426,7 @@ scrcpy(struct scrcpy_options *options) { struct sc_file_pusher *fp = NULL; - if (options->display && options->control) { + if (options->mirror && options->control) { if (!sc_file_pusher_init(&s->file_pusher, serial, options->push_target)) { goto end; @@ -451,8 +449,8 @@ scrcpy(struct scrcpy_options *options) { &audio_demuxer_cbs, options); } - bool needs_video_decoder = options->display; - bool needs_audio_decoder = options->audio && options->display; + bool needs_video_decoder = options->mirror; + bool needs_audio_decoder = options->mirror && options->audio; #ifdef HAVE_V4L2 needs_video_decoder |= !!options->v4l2_device; #endif @@ -646,7 +644,7 @@ aoa_hid_end: // There is a controller if and only if control is enabled assert(options->control == !!controller); - if (options->display) { + if (options->mirror) { const char *window_title = options->window_title ? options->window_title : info->device_name; diff --git a/app/tests/test_cli.c b/app/tests/test_cli.c index 3e9a248a..1f00cb90 100644 --- a/app/tests/test_cli.c +++ b/app/tests/test_cli.c @@ -53,7 +53,7 @@ static void test_options(void) { "--max-size", "1024", "--lock-video-orientation=2", // optional arguments require '=' // "--no-control" is not compatible with "--turn-screen-off" - // "--no-display" is not compatible with "--fulscreen" + // "--no-mirror" is not compatible with "--fulscreen" "--port", "1234:1236", "--push-target", "/sdcard/Movies", "--record", "file", @@ -108,8 +108,8 @@ static void test_options2(void) { char *argv[] = { "scrcpy", "--no-control", - "--no-display", - "--record", "file.mp4", // cannot enable --no-display without recording + "--no-mirror", + "--record", "file.mp4", // cannot enable --no-mirror without recording }; bool ok = scrcpy_parse_args(&args, ARRAY_LEN(argv), argv); @@ -117,7 +117,7 @@ static void test_options2(void) { const struct scrcpy_options *opts = &args.opts; assert(!opts->control); - assert(!opts->display); + assert(!opts->mirror); assert(!strcmp(opts->record_filename, "file.mp4")); assert(opts->record_format == SC_RECORD_FORMAT_MP4); } diff --git a/doc/recording.md b/doc/recording.md index 4aad088c..9455a6fc 100644 --- a/doc/recording.md +++ b/doc/recording.md @@ -18,7 +18,7 @@ _It is currently not possible to record only the audio._ To disable mirroring while recording: ```bash -scrcpy --no-display --record=file.mp4 +scrcpy --no-mirror --record=file.mp4 scrcpy -Nr file.mkv # interrupt recording with Ctrl+C ``` diff --git a/doc/v4l2.md b/doc/v4l2.md index ea8c0eed..2c6e2cfc 100644 --- a/doc/v4l2.md +++ b/doc/v4l2.md @@ -35,7 +35,7 @@ To start `scrcpy` using a v4l2 sink: ```bash scrcpy --v4l2-sink=/dev/videoN -scrcpy --v4l2-sink=/dev/videoN --no-display # disable mirroring window +scrcpy --v4l2-sink=/dev/videoN --no-mirror # disable mirroring window ``` (replace `N` with the device ID, check with `ls /dev/video*`) diff --git a/doc/video.md b/doc/video.md index a2e9d106..58aa5022 100644 --- a/doc/video.md +++ b/doc/video.md @@ -159,15 +159,15 @@ scrcpy --display-buffer=50 --v4l2-buffer=300 ``` -## No display +## No mirror It is possible to capture an Android device without displaying a mirroring window. This option is available if either [recording](recording.md) or [v4l2](#video4linux) is enabled: ```bash -scrcpy --v4l2-sink=/dev/video2 --no-display -scrcpy --record=file.mkv --no-display +scrcpy --v4l2-sink=/dev/video2 --no-mirror +scrcpy --record=file.mkv --no-mirror ``` ## Video4Linux