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
48fcfa96ab
Add missing include "common.h"
2021-11-06 19:26:29 +01:00
Romain Vimont
676fa73d2c
Wrap device name and size in a struct
...
As a benefit, this avoids to take care of the device name length on the
caller side.
2021-11-02 11:08:58 +01:00
Romain Vimont
58ea238fb2
Remove unnecessary variable
...
Test directly if a record filename is provided, without an intermediate
boolean variable.
2021-10-31 12:45:59 +01:00
Romain Vimont
13c4aa1a3b
Disable synthetic mouse events from touch events
...
Touch events with id SDL_TOUCH_MOUSEID are ignored anyway, but it is
better not to generate them in the first place.
2021-10-31 12:45:59 +01:00
Romain Vimont
caf594c90e
Split SDL initialization
...
Initialize SDL_INIT_EVENTS first (very quick) and SDL_INIT_VIDEO after
the server (quite long).
2021-10-31 12:45:59 +01:00
Romain Vimont
688477ff65
Move SDL initialization
...
Inline SDL initialization in scrcpy(). This will allow to split
minimal initialization and video initialization.
2021-10-31 12:45:59 +01:00
Romain Vimont
ac539e1312
Set SDL hints before initialization
...
In theory, some SDL hints should be initialized before calling
SDL_Init().
2021-10-31 12:45:59 +01:00
Romain Vimont
a57c7d3a2b
Extract SDL hints
...
Set all SDL hints in a separate function.
2021-10-31 12:45:56 +01:00
Romain Vimont
d2d18466d4
Factorize SDL event push
...
Add a macro and inline function to call SDL_PushEvent() and log on error
(without actually handling the error, because there is nothing we could
do).
2021-10-30 22:36:56 +02:00
Romain Vimont
dae091e3ab
Handle SDL_PushEvent() errors
...
Pushing an event to the main thread may fail. If this happens, log an
error, and try to recover when possible.
2021-10-30 20:25:20 +02:00
Romain Vimont
4c4381de4c
Use sc_ prefix for size, position and point
2021-10-30 15:20:39 +02:00
Romain Vimont
06131ef634
Fix typo in clock comments
2021-10-29 12:21:34 +02:00
Romain Vimont
34eb10ea0b
Define v4l2 option field only if HAVE_V4L2
2021-10-27 18:43:47 +02:00
Romain Vimont
27fa23846d
Define default options as const struct
...
This is more readable than a macro, and we could ifdef some fields.
2021-10-27 18:43:47 +02: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
Romain Vimont
ac23bec144
Expose socket interruption
...
On Linux, socket functions are unblocked by shutdown(), but on Windows
they are unblocked by closesocket().
Expose net_interrupt() and net_close() to abstract these differences:
- net_interrupt() calls shutdown() on Linux and closesocket() on
Windows (if not already called);
- net_close() calls close() on Linux and closesocket() on Windows (if
not already called).
This simplifies the server code, and prevents a data race on close
(reported by TSAN) on Linux (but does not fix it on Windows):
WARNING: ThreadSanitizer: data race (pid=836124)
Write of size 8 at 0x7ba0000000d0 by main thread:
#0 close ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1690 (libtsan.so.0+0x359d8)
#1 net_close ../app/src/util/net.c:211 (scrcpy+0x1c76b)
#2 close_socket ../app/src/server.c:330 (scrcpy+0x19442)
#3 server_stop ../app/src/server.c:522 (scrcpy+0x19e33)
#4 scrcpy ../app/src/scrcpy.c:532 (scrcpy+0x156fc)
#5 main ../app/src/main.c:92 (scrcpy+0x622a)
Previous read of size 8 at 0x7ba0000000d0 by thread T6:
#0 recv ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:6603 (libtsan.so.0+0x4f4a6)
#1 net_recv ../app/src/util/net.c:167 (scrcpy+0x1c5a7)
#2 run_receiver ../app/src/receiver.c:76 (scrcpy+0x12819)
#3 <null> <null> (libSDL2-2.0.so.0+0x84f40)
2021-10-27 18:41:58 +02:00
Romain Vimont
e5ea13770b
Add socket wrapper
...
This paves the way to store an additional "closed" flag on Windows
to interrupt and close properly.
2021-10-26 22:49:57 +02:00
Romain Vimont
3eac212af1
Use net_send() from net_send_all()
...
This will make net_send_all() continue to work even if net_send()
behavior is changed.
2021-10-26 22:49:45 +02:00
Romain Vimont
3adff37c2d
Use sc_ prefix for sockets
...
Rename:
- socket_t to sc_socket
- INVALID_SOCKET to SC_INVALID_SOCKET
2021-10-26 22:49:45 +02:00
Romain Vimont
eb6afe7669
Move net_init() and net_cleanup() upwards
...
These two functions are global, define them at the top of the
implementation file. This is consistent with the header file.
2021-10-26 22:49:45 +02:00
Romain Vimont
e4163321f0
Delay HID events on Ctrl+v
...
When Ctrl+v is pressed, a control is sent to the device to set the
device clipboard before injecting Ctrl+v.
With the InputManager method, it is guaranteed that the device
synchronization is executed before handling Ctrl+v, since the commands
are executed on the device in sequence.
However, HID are injected from the computer, so there is no such
guarantee. As a consequence, on Android, Ctrl+v triggers a paste with
the old clipboard content.
To workaround the issue, wait a bit (2 milliseconds) from the AOA
thread before injecting the event, to leave enough time for the
clipboard to be set before injecting Ctrl+v.
2021-10-26 21:30:04 +02:00
Romain Vimont
c96874b257
Synchronize HID keyboard state on first event
...
When an AOA HID keyboard is registered, CAPSLOCK and NUMLOCK are both
disabled, regardless of the state of the computer keyboard.
To synchronize the state, on first key event, inject CAPSLOCK and/or
NUMLOCK if necessary.
2021-10-26 21:30:04 +02:00
Romain Vimont
511356710d
Retrieve device serial for AOA
...
The serial is necessary to find the correct Android device for AOA.
If it is not explicitly provided by the user via -s, then execute "adb
getserialno" to retrieve it.
2021-10-26 21:30:04 +02:00
Romain Vimont
d55015e4cf
Expose function to get the device serial
...
Expose adb_get_serialno() to retrieve the device serial via the command
"adb getserialno".
2021-10-26 21:30:04 +02:00
Romain Vimont
0681480809
Add read_pipe_all()
...
Add a convenience function to read from a pipe until all requested data
has been read.
2021-10-26 21:30:04 +02:00
Romain Vimont
96b18dabaa
Expose adb execution with redirection
...
Expose the redirection feature to the adb API.
2021-10-26 21:30:04 +02:00
Romain Vimont
eaf4afaad9
Add command execution with redirection
...
Expose command execution with pipes to stdin, stdout and stderr.
This will allow to read the result of adb commands.
2021-10-26 21:30:04 +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
f7d1efdf1d
Extract mouse processor trait
...
Mainly for consistency with the keyboard processor trait.
This could allow to provide alternative mouse processors.
2021-10-26 21:30:04 +02:00
Romain Vimont
bcf5a9750f
Extract keyboard processor trait
...
This will allow to provide alternative key processors.
2021-10-26 21:30:04 +02:00
Romain Vimont
056d36ce4a
Fix trait header guards
2021-10-26 21:30:04 +02:00
Romain Vimont
1e340caf76
Remove legacy scrcpy icon
...
Remove the old icon in XPM format and the code to load it.
2021-10-25 18:08:37 +02:00
Romain Vimont
6004f0b6b0
Use a new scrcpy icon
...
Use the new icon designed by @varlesh:
<https://github.com/Genymobile/scrcpy/pull/1987#issuecomment-949684080 >
Load it from a PNG file (SDL only supports bitmap icons).
2021-10-25 18:08:37 +02:00
Romain Vimont
12ed2f2402
Add support for palette icon formats
...
To support more icon formats.
2021-10-25 18:08:37 +02:00
Romain Vimont
0e4564da03
Add icon loader
...
Add helper to load icons from image files via FFmpeg.
2021-10-25 18:08:37 +02:00
Romain Vimont
156d958e77
Move common instruction out of ifdef
...
Both ifdef-branches return server_path.
2021-10-25 18:08:31 +02:00
Romain Vimont
7229e3cce0
Extract util function to build a local file path
...
Finding a local file in the scrcpy directory may be useful for files
other than scrcpy-server in the future.
2021-10-25 16:29:43 +02:00
Romain Vimont
a7e41b0f85
Fix code style
2021-10-21 18:36:34 +02:00
zhongkaizhu
46d3e35c30
Fix "Could not find v4l2 muxer"
...
The AVOutputFormat name is a comma-separated list. In theory, possible
names for V4L2 are:
- "video4linux2,v4l2"
- "v4l2,video4linux2"
- "v4l2"
- "video4linux2"
To find the muxer in all cases, we must request exactly one muxer name
at a time.
PR #2718 <https://github.com/Genymobile/scrcpy/pull/2718 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-10-21 16:26:48 +02:00
Romain Vimont
07d75eb336
Simplify net_send_all()
...
There is no need to declare the variable before the loop.
2021-10-17 16:21:37 +02:00
Romain Vimont
31131039bb
Add missing includes
...
Refs #2616 <https://github.com/Genymobile/scrcpy/issues/2616 >
2021-09-20 18:27:37 +02:00
Romain Vimont
1d1c9f36f4
Retrieve correct error messages on Windows
...
For sockets functions, Windows does not store error codes in errno, so
perror() does not print any error. Use WSAGetLastError() instead.
Refs #2624 <https://github.com/Genymobile/scrcpy/issues/2624 >
2021-09-09 23:03:35 +02:00
Romain Vimont
4d6dd9d281
Compute scrcpy directory manually
...
The function dirname() does not work correctly everywhere with non-ASCII
characters.
Fixes #2619 <https://github.com/Genymobile/scrcpy/issues/2619 >
2021-09-09 12:51:18 +02:00
a1346054
b5e98db635
Fix typo in manpage
...
PR #2606 <https://github.com/Genymobile/scrcpy/pull/2606 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-09-07 21:41:40 +02:00
Romain Vimont
3761f56c28
Declare callbacks static
...
It was a typo, "static" was missing.
2021-08-26 12:26:44 +02:00
Romain Vimont
f78608ab29
Fix type for assignment
...
The functions net_send_all() and net_recv_all() return ssize_t, not int.
2021-07-15 18:16:56 +02:00
Romain Vimont
6f03022646
Fix net_send_all()
...
On partial writes, the final result was the number of bytes written by
the last send() rather than the total.
2021-07-15 18:16:26 +02:00
Romain Vimont
daf90d33d5
Fix code style
...
Make the code fit into 80 columns.
2021-07-15 18:07:39 +02:00