Romain Vimont
d31725f077
Reorder cli sanity checks
...
Check unexpected additional arguments before other sanity checks.
2021-11-25 22:22:34 +01:00
Romain Vimont
3653fb6b15
Add OutOfMemory log helper
...
Add a special LOG_OOM() function to log all OutOfMemory errors (i.e.
allocations returning NULL).
2021-11-24 22:06:49 +01:00
Romain Vimont
6abff46c9f
Add option to disable clipboard autosync
...
By default, scrcpy automatically synchronizes the computer clipboard to
the device clipboard before injecting Ctrl+v, and the device clipboard
to the computer clipboard whenever it changes.
This new option --no-clipboard-autosync disables this automatic
synchronization.
Fixes #2228 <https://github.com/Genymobile/scrcpy/issues/2228 >
PR #2817 <https://github.com/Genymobile/scrcpy/pull/2817 >
2021-11-24 09:44:39 +01:00
Romain Vimont
68eaee5bb0
Force adb forward if tunnel host/port is provided
...
Tunnel host and port are only meaningful in "adb forward" mode.
They indicate where the client must connect to communicate with the
server. In "adb reverse" mode, the client _listens_, it does not
_connect_.
Refs #2807 <https://github.com/Genymobile/scrcpy/pull/2807 >
2021-11-21 22:37:52 +01:00
RipleyTom
7bdbde7363
Add options to configure tunnel host and port
...
In "adb forward" mode, by default, scrcpy connects to localhost:PORT,
where PORT is the local port passed to "adb forward". This assumes that
the tunnel is established on the local host with a local adb server
(which is the common case).
For advanced usage, add --tunnel-host and --tunnel-port to force the
connection to a different destination.
Fixes #2801 <https://github.com/Genymobile/scrcpy/issues/2801 >
PR #2807 <https://github.com/Genymobile/scrcpy/pull/2807 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-11-21 22:37:52 +01:00
Romain Vimont
b25404ee4b
Print help to stdout
...
The output of -h/--help was printed on stderr, although it is not an
error.
Printing on stdout allows to pipe the result directly:
scrcpy --help | less
Instead of (in bash):
scrcpy --help |& less
2021-11-19 08:18:13 +01:00
Romain Vimont
4cfc1cd70a
Assert that long options are correctly set
2021-11-19 08:06:23 +01:00
Romain Vimont
057c7a4df4
Move str_util to str
...
Simplify naming.
2021-11-14 01:22:22 +01:00
Romain Vimont
979ce64dc0
Improve string util API
...
Use prefixed names and improve documentation.
2021-11-14 01:22:22 +01:00
Romain Vimont
7a733328bc
Adapt help to terminal size
...
If the error stream is a terminal, and we can retrieve the terminal
size, wrap the help content according to the terminal width.
2021-11-11 15:22:39 +01:00
Romain Vimont
3f51a2ab43
Generate getopt params from option structures
...
Use the option descriptions to generate the optstring and longopts
parameters for the getopt_long() command.
That way, the options are completely described in a single place.
2021-11-11 14:59:34 +01:00
Romain Vimont
74ab0a4df8
Structure shortcuts help
2021-11-11 14:59:34 +01:00
Romain Vimont
f59e9e3cb0
Structure command line options help
...
It will allow to correctly print the help for the current terminal size
(even if for now it is hardcoded to 80 columns).
2021-11-11 14:59:34 +01:00
Romain Vimont
570a003c39
Remove deprecated -T option
...
The short option -T is deprecated since v1.11. Only the long version
(--always-on-top) remains.
2021-11-07 21:35:57 +01:00
Romain Vimont
b62df7ee91
Remove deprecated -c option
...
The short option -c is deprecated since v1.11. Only the long version
(--crop) remains.
2021-11-07 21:35:53 +01:00
Romain Vimont
30d40f4e78
Document --power-off-on-close
...
The option was not documented.
Refs #824 <https://github.com/Genymobile/scrcpy/pull/824 >
2021-11-07 19:27:53 +01:00
Romain Vimont
f489f7fcad
Mention drag & drop for non-APK files in help
2021-11-07 18:51:22 +01:00
Romain Vimont
f65c3fde69
Fix typos in help
2021-11-07 18:50:24 +01:00
Romain Vimont
e4d5c1ce36
Move scrcpy option structs to options.h
...
This will allow to define symbols in options.c without all the
dependencies of scrcpy.c.
2021-10-27 18:43:47 +02:00
Alynx Zhou
207082977a
Add support for USB HID keyboard over AOAv2
...
This provides a better input experience, by simulating a physical
keyboard. It converts SDL keyboard events to proper HID events, and send
them over AOAv2.
This is a rewriting and bugfix of the origin code from @amosbird:
<https://github.com/Genymobile/scrcpy/issues/279#issuecomment-453819354 >
The feature is enabled the command line option -K or --hid-keyboard,
and is only available on Linux, over USB.
Refs <https://source.android.com/devices/accessories/aoa2#hid-support >
Refs <https://www.usb.org/sites/default/files/hid1_11.pdf >
PR #2632 <https://github.com/Genymobile/scrcpy/pull/2632 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-10-26 21:30:04 +02:00
Romain Vimont
3397720330
Add buffering command line options
...
Add --display-buffer and --v4l2-buffer options to configure buffering
time.
2021-07-14 14:54:22 +02:00
Romain Vimont
5938e862a1
Fix --lock-video-orientation syntax in help
...
Commit f76fe2c0d4
fixed README and tests.
Fix command line help and manpage.
2021-07-06 18:32:40 +02:00
Romain Vimont
77e96d745b
Suggest --record-format instead of -F on error
...
The short option -F has been deprecated by
ff061b4f30
. On error, suggest the long
option --record-format instead.
2021-06-20 21:16:03 +02:00
Marti Raudsepp
937fa704a6
Add --verbosity=verbose log level
...
PR #2371 <https://github.com/Genymobile/scrcpy/pull/2371 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-06-20 12:34:19 +02:00
Romain Vimont
a1f2094787
Push to /sdcard/Download/ by default
...
Change the default push target from /sdcard/ to /sdcard/Download/.
Pushing to the root of /sdcard/ is not very convenient, many apps do not
expose its content directly.
It can still be changed by --push-target.
PR #2384 <https://github.com/Genymobile/scrcpy/pull/2384 >
2021-06-16 22:56:11 +02:00
Romain Vimont
f062dfd30b
Merge branch 'master' into dev
2021-05-09 11:00:30 +02:00
Romain Vimont
45e7280148
Rename --v4l2_sink to --v4l2-sink
...
This was a rebase issue, the previous version in #2268 was correct.
Refs #2268 <https://github.com/Genymobile/scrcpy/pull/2268 >
2021-04-26 17:59:35 +02:00
Marco Martinelli
d39161f753
Add support for v4l2loopback
...
It allows to send the video stream to /dev/videoN, so that it can be
captured (like a webcam) by any v4l2-capable tool.
PR #2232 <https://github.com/Genymobile/scrcpy/pull/2232 >
PR #2233 <https://github.com/Genymobile/scrcpy/pull/2233 >
PR #2268 <https://github.com/Genymobile/scrcpy/pull/2268 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:59:10 +02:00
Romain Vimont
5af9d0ee0f
Make --lock-video-orientation argument optional
...
If the option is set without argument, lock the initial device
orientation (as if the value "initial" was passed).
2021-04-25 14:55:54 +02:00
Romain Vimont
fd0dc6c0cd
Add --lock-video-orientation=initial
...
Add a new mode to the --lock-video-orientation option, to lock the
initial orientation of the device.
This avoids to pass an explicit value (0, 1, 2 or 3) and think about
which is the right one.
2021-04-25 14:55:54 +02:00
Romain Vimont
55806e7d31
Remove option --render-expired-frames
...
This flag forced the decoder to wait for the previous frame to be
consumed by the display.
It was initially implemented as a compilation flag for testing, not
intended to be exposed at runtime. But to remove ifdefs and to allow
users to test this flag easily, it had finally been exposed by commit
ebccb9f6cc
.
In practice, it turned out to be useless: it had no practical impact,
and it did not solve or mitigate any performance issues causing frame
skipping.
But that added some complexity to the codebase: it required an
additional condition variable, and made video buffer calls possibly
blocking, which in turn required code to interrupt it on exit.
To prepare support for multiple sinks plugged to the decoder (display
and v4l2 for example), the blocking call used for pacing the decoder
output becomes unacceptable, so just remove this useless "feature".
2021-04-25 14:38:42 +02:00
Romain Vimont
edee69d637
Fix options alphabetical order
...
"verbosity" < "version"
2021-04-16 17:40:39 +02:00
Romain Vimont
07a85b7c94
Fix typo in command-line help
...
Refs #2237 <https://github.com/Genymobile/scrcpy/issues/2237 >
2021-04-07 15:12:33 +02:00
Yu-Chen Lin
1d615a0d51
Support power off on close
...
PR #824 <https://github.com/Genymobile/scrcpy/pull/824 >
Signed-off-by: Yu-Chen Lin <npes87184@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-16 21:12:35 +01:00
Romain Vimont
b16b65a715
Simplify default values
...
It makes sense to extract default values for bitrate and port range
(which are arbitrary and might be changed in the future).
However, the default values for "max size" and "lock video orientation"
are naturally unlimited/unlocked, and will never be changed. Extracting
these options just added complexity for no benefit, so hardcode them.
2021-02-25 22:19:05 +01:00
Romain Vimont
a3aa5ac95e
Insert numerical values statically in usage string
2021-02-25 22:19:05 +01:00
Romain Vimont
59feb2a15c
Group common includes into common.h
...
Include config.h and compat.h in common.h, and include common.h from all
source files.
2021-01-08 19:22:10 +01:00
Romain Vimont
aa8b571389
Increase display id range
...
Some devices use big display id values.
Refs #2009 <https://github.com/Genymobile/scrcpy/issues/2009 >
2021-01-04 08:16:32 +01:00
Tzah Mazuz
76c2c6e69d
Adding new option --encoder
...
Some devices have more than one encoder, and some encoders may cause
issues or crash. With this option we can specify which encoder we want
the device to use.
PR #1827 <https://github.com/Genymobile/scrcpy/pull/1827 >
Fixes #1810 <https://github.com/Genymobile/scrcpy/issues/1810 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-11-08 21:07:17 +01:00
Romain Vimont
d5f059c7cb
Add option to force legacy method for pasting
...
Some devices do not behave as expected when setting the device clipboard
programmatically.
Add an option --legacy-paste to change the behavior of Ctrl+v and MOD+v
so that they inject the computer clipboard text as a sequence of key
events (the same way as MOD+Shift+v).
Fixes #1750 <https://github.com/Genymobile/scrcpy/issues/1750 >
Fixes #1771 <https://github.com/Genymobile/scrcpy/issues/1771 >
2020-11-07 15:16:51 +01:00
Romain Vimont
adc547fa6e
Add an option to forward all clicks
...
Add --forward-all-clicks to disable mouse shortcuts and forward middle
and right clicks to the device instead.
Fixes #1302 <https://github.com/Genymobile/scrcpy/issues/1302 >
Fixes #1613 <https://github.com/Genymobile/scrcpy/issues/1613 >
2020-11-03 17:12:26 +01:00
Romain Vimont
d50ecf40b6
Fix options order
2020-10-01 15:08:18 +02:00
Romain Vimont
d02789ce21
List available shortcut keys on error
...
Fixes #1681 <https://github.com/Genymobile/scrcpy/issues/1681 >
Suggested-by: Moritz Schulz <moritzleni@gmail.com>
2020-08-16 13:52:01 +02:00
Romain Vimont
6cc22e1c5b
Reference --shortcut-mod from shortcuts list
...
Fixes #1681 <https://github.com/Genymobile/scrcpy/issues/1681 >
Suggested-by: Moritz Schulz <moritzleni@gmail.com>
2020-08-16 13:44:42 +02:00
Romain Vimont
198346d148
Add pinch-to-zoom simulation
...
If Ctrl is hold when the left-click button is pressed, enable
pinch-to-zoom to scale and rotate relative to the center of the screen.
Fixes #24 <https://github.com/Genymobile/scrcpy/issues/24 >
2020-08-10 20:08:24 +02:00
xeropresence
84f1d9e375
Add --no-key-repeat cli option
...
Add an option to avoid forwarding repeated key events.
PR #1623 <https://github.com/Genymobile/scrcpy/pull/1623 >
Refs #1013 <https://github.com/Genymobile/scrcpy/issues/1013 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-08-03 19:51:55 +02:00
Romain Vimont
7ad47dfaab
Swap paste shortcuts
...
For consistency with MOD+c and MOD+x, use MOD+v to inject PASTE.
Use Mod+Shift+v to inject clipboard content as a sequence of text
events.
2020-08-01 16:47:44 +02:00
Romain Vimont
56a115b5c5
Add shortcuts for COPY and CUT
...
Send COPY and CUT on MOD+c and MOD+x (only supported for Android >= 7).
The shortcuts Ctrl+c and Ctrl+x should generally also work (even before
Android 7), but the active Android app may use them for other actions
instead.
2020-08-01 16:47:43 +02:00
Romain Vimont
8f64a5984b
Change "resize to fit" shortcut to MOD+w
...
For convenience, MOD+x will be used for injecting the CUT keycode.
2020-08-01 16:31:31 +02:00
Romain Vimont
bccd12bf5c
Remove "get clipboard" call
...
Now that every device clipboard change is automatically synchronized to
the computer, the "get clipboard" request (bound to MOD+c) is useless.
2020-08-01 16:31:31 +02:00
Romain Vimont
e4bb7c1d1f
Accept Super as shortcut modifier
...
In addition to (left) Alt, also accept (left) Super. This is especially
convenient for macOS users (Super is the Cmd key).
2020-08-01 16:31:31 +02:00
Romain Vimont
1b76d9fd78
Customize shortcut modifier
...
Add --shortcut-mod, and use Alt as default modifier.
This paves the way to forward the Ctrl key to the device.
2020-08-01 16:31:27 +02:00
Romain Vimont
63cb93d7d7
Use Ctrl for all shortcuts
...
Remove the Cmd modifier on macOS, which was possible only for some
shortcuts but not all.
This paves the way to make the shortcut modifier customizable.
2020-08-01 16:31:08 +02:00
Romain Vimont
0ba74fbd9a
Make scrcpy.h independant of other headers
...
The header scrcpy.h is intended to be the "public" API. It should not
depend on other internal headers.
Therefore, declare all required structs in this header and adapt
internal code.
2020-06-19 22:30:02 +02:00
Ivan Keliukh
dc7b60e619
Add option for disabling screensaver
...
PR #1502 <https://github.com/Genymobile/scrcpy/pull/1502 >
Fixes #1370 <https://github.com/Genymobile/scrcpy/issues/1370 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-06-18 21:35:28 +02:00
Romain Vimont
0e4a6f462b
Mention stay awake limitation
...
The "stay awake" feature only works when the device is plugged in.
Refs #1445 <https://github.com/Genymobile/scrcpy/issues/1445 >
2020-05-28 23:07:28 +02:00
Romain Vimont
dcde578a50
Reactivate "turn device screen on" feature
...
This reverts commit 8c8649cfcd
.
I cannot reproduce the issue with Ctrl+Shift+o on any device, so in
practice it works, it's too bad to remove the feature for a random bug
on some Android versions on some devices.
2020-05-27 18:26:46 +02:00
Romain Vimont
fc1dec0270
Paste on "set clipboard" if possible
...
Ctrl+Shift+v synchronizes the computer clipboard to the Android device
clipboard. This feature had been added to provide a way to copy UTF-8
text from the computer to the device.
To make such a paste more straightforward, if the device runs at least
Android 7, also send a PASTE keycode to paste immediately.
<https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_PASTE >
Fixes #786 <https://github.com/Genymobile/scrcpy/issues/786 >
2020-05-25 20:59:21 +02:00
Romain Vimont
8f46e18426
Add --force-adb-forward
...
Add a command-line option to force "adb forward", without attempting
"adb reverse" first.
This is especially useful for using SSH tunnels without enabling remote
port forwarding.
2020-05-24 23:28:31 +02:00
Romain Vimont
a3ef461d73
Add cli option to set the verbosity level
...
The verbosity was set either to info (in release mode) or debug (in
debug mode).
Add a command-line argument to change it, so that users can enable debug
logs using the release:
scrcpy -Vdebug
2020-05-24 22:01:51 +02:00
Tzah Mazuz
080a4ee365
Add --codec-options
...
Add a command-line parameter to pass custom options to the device
encoder (as a comma-separated list of "key[:type]=value").
The list of possible codec options is available in the Android
documentation:
<https://d.android.com/reference/android/media/MediaFormat >
PR #1325 <https://github.com/Genymobile/scrcpy/pull/1325 >
Refs #1226 <https://github.com/Genymobile/scrcpy/pull/1226 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
2020-05-24 14:54:34 +02:00
Romain Vimont
c77024314d
Add an option to keep the device awake
...
Add an option to prevent the device to sleep:
scrcpy --stay-awake
scrcpy -w
The initial state is restored on exit.
Fixes #631 <https://github.com/Genymobile/scrcpy/issues/631 >
2020-05-02 02:14:25 +02:00
Romain Vimont
828327365a
Reorder options in alphabetical order
2020-05-02 01:55:32 +02:00
Romain Vimont
4668638ee1
Handle "show touches" on the device-side
...
Now that the server can access the Android settings and clean up
properly, handle the "show touches" option from the server.
The initial state is now correctly restored, even on device
disconnection.
2020-05-02 01:55:30 +02:00
Romain Vimont
11a61b2cb3
Add option --no-mipmaps
...
Add an option to disable trilinear filtering even if mipmapping is
available.
2020-04-15 17:39:51 +02:00
Romain Vimont
8a9b20b27e
Add --render-driver command-line option
...
Add an option to set a render driver hint (SDL_HINT_RENDER_DRIVER).
2020-04-15 17:39:51 +02:00
Romain Vimont
ab52b36895
Reorder options in alphabetical order
2020-04-11 14:31:14 +02:00
Romain Vimont
a8fd4aec9a
Remove --fullscreen validation
...
Many options are meaningless if --no-display is set.
We don't want to validate all possible combinations, so don't make an
exception for --fullscreen.
2020-04-08 12:09:24 +02:00
Romain Vimont
cbde7b964a
Improve documentation for consistency
...
Make --lock-video-orientation documentation consistent with that of
--rotation.
2020-04-08 12:09:24 +02:00
Romain Vimont
28c71c528f
Add --rotation command-line option
...
In addition to Ctrl+Left and Ctrl+Right shortcuts, add a command-line
parameter to set the initial rotation.
2020-04-08 12:09:22 +02:00
Romain Vimont
d48b375a1d
Add shortcuts to rotate display
...
Add Ctrl+Left and Ctrl+Right shortcuts to rotate the display (the
content of the scrcpy window).
Contrary to --lock-video-orientation, the rotation has no impact on
recording, and can be changed dynamically (and immediately).
Fixes #218 <https://github.com/Genymobile/scrcpy/issues/218 >
2020-04-08 12:02:26 +02:00
Romain Vimont
fd63e7eb5a
Format shortcut documentation
...
For consistency, start the descriptions with a capital letter.
2020-04-08 12:02:15 +02:00
e_vigurskiy
4150eedcdf
Add display id parameter
...
Add --display command line parameter to specify a display id.
PR #1238 <https://github.com/Genymobile/scrcpy/pull/1238 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-04-02 21:02:52 +02:00
Romain Vimont
e050cfdcd6
Fix static_assert() parameters
...
In C11, static_assert() expects a message.
2020-03-27 14:01:56 +01:00
Romain Vimont
dc7c677728
Accept negative window position
...
It seems to work on some window managers.
Fixes #1242 <https://github.com/Genymobile/scrcpy/issues/1242 >
2020-03-26 22:52:41 +01:00
George Stamoulis
1982bc439b
Add option to lock video orientation
...
PR #1151 <https://github.com/Genymobile/scrcpy/pull/1151 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2020-02-27 21:24:37 +01:00
Romain Vimont
dc7fcf3c7a
Accept port range
...
Accept a range of ports to listen to, so that it does not fail if
another instance of scrcpy is currently starting.
The range can be passed via the command line:
scrcpy -p 27183:27186
scrcpy -p 27183 # implicitly 27183:27183, as before
The default is 27183:27199.
Closes #951 <https://github.com/Genymobile/scrcpy/issues/951 >
2020-01-18 17:21:00 +01:00
Romain Vimont
83d48267a7
Accept --max-fps before Android 10
...
KEY_MAX_FPS_TO_ENCODER existed privately before Android 10:
<https://github.com/Genymobile/scrcpy/issues/488#issuecomment-567321437 >
2019-12-19 11:52:09 +01:00
Romain Vimont
6965d051ae
Limit bitrate range to 31 bits integer
...
A proper solution could be to use "long long" instead (guaranteed to be
at least 64 bits), but it adds its own problems (e.g. "%lld" is not
supported as a printf format on all platforms).
In practice, we don't need such high values, so keep it simple.
Fixes #995 <https://github.com/Genymobile/scrcpy/issues/995 >
2019-12-10 09:28:27 +01:00
Romain Vimont
1eae139b6e
Add missing consts
...
String parsing functions should not be able to modify their input.
2019-12-09 22:30:48 +01:00
Romain Vimont
929bf48c7e
Add tests for command-line parsing
2019-12-08 23:19:01 +01:00
Romain Vimont
d950383b72
Move command-line parsing to a separate file
2019-12-08 23:18:57 +01:00