Romain Vimont
bfb86ca2c2
Simplify cleanup
...
The cleanup is not linear: for example, the server must be stopped and
its sockets must be shutdown after the stream and controller are stopped
(so that they don't continue processing garbage), but before they are
joined, to avoid a deadlock if they are blocked on a socket read.
Simplify the spaghetti-cleanup by keeping trace of initialization at
runtime.
2019-05-30 22:30:18 +02:00
Romain Vimont
0dee9b04b2
Use net_recv() to read only one byte
...
Partial read is impossible for 1 byte, so net_recv_all() is useless.
2019-05-30 22:30:18 +02:00
Romain Vimont
8fc58bde75
Simplify server_connect_to()
...
Only use 2 branches, using either forward or remote tunnel.
2019-05-30 22:30:18 +02:00
Romain Vimont
5a431cdf9b
Make server_connect_to() return a bool
...
The resulting socket is accessible from the server instance, there is no
need to return it.
This paves the way to use several sockets in parallel.
2019-05-30 22:30:18 +02:00
Romain Vimont
6edb1294f0
Add missing return 0 in unit test
2019-05-30 22:30:18 +02:00
Romain Vimont
073181b294
Use cbuf for file handler request queue
...
Replace the file_handler_request_queue implementation by cbuf.
2019-05-30 22:30:18 +02:00
Romain Vimont
241a3dcba5
Use cbuf for control event queue
...
Replace the control_event_queue implementation by cbuf.
2019-05-30 22:30:18 +02:00
Romain Vimont
b38292cd69
Add generic circular buffer
...
Add a circular buffer implementation, to factorize multiple specific
queues implementation.
2019-05-30 22:30:18 +02:00
Romain Vimont
7475550ae8
Add buffer_read16be()
...
Add a function to read 16 bits in big-endian to a uint16_t.
2019-05-30 22:30:18 +02:00
Romain Vimont
7fc8793d5b
Make buffer util functions accept const buffers
...
So that they can be used both on const and non-const input buffers.
2019-05-30 22:30:18 +02:00
Romain Vimont
bf5e54b2e9
Make control_event_serialize() return size_t
...
control_event_serialize() returns the number of bytes written, so the
type should be size_t.
2019-05-30 22:30:18 +02:00
Romain Vimont
507b0bcccf
Fix memory leak on error
...
The variable condition was not destroyed on strdup() failure.
2019-05-30 22:30:18 +02:00
Romain Vimont
e1afd9f8b0
Fix event ownership comment
2019-05-30 22:30:18 +02:00
Romain Vimont
b08dada6c1
Prefix control event constants by namespace
...
This will avoid conflicts with future device events.
2019-05-30 22:30:18 +02:00
Romain Vimont
999c964689
Make macro expansion-safe
...
Use parentheses to avoid unexpected results.
For example, make:
2 * SERIALIZED_EVENT_MAX_SIZE
expand to:
2 * (3 + TEXT_MAX_LENGTH)
instead of:
2 * 3 + TEXT_MAX_LENGTH
2019-05-30 22:30:18 +02:00
Romain Vimont
befe455e44
Remove unused includes
...
The struct control_event does not use mutexes, and net.h does not need
SDL_platform.h.
2019-05-30 22:30:18 +02:00
Romain Vimont
d2504f974c
Fix indentation
...
Previous refactorings broke indentation.
2019-05-30 22:30:18 +02:00
Romain Vimont
0fbab42f8c
Format meson.build for readability
2019-05-30 22:30:18 +02:00
Romain Vimont
08f506b24f
Replace SDL_bool by bool in tests
...
Commit dfed1b250e replaced SDL types by
standard types in sources, but tests were not updated.
2019-05-30 22:30:18 +02:00
Romain Vimont
3bc1c51b91
Always use SDL_malloc() and SDL_free()
...
To avoid mixing SDL_malloc()/SDL_strdup() with free(), or malloc() with
SDL_free(), always use the SDL version.
2019-05-30 22:30:08 +02:00
Romain Vimont
7ed976967f
Fix checkstyle warning
...
Checkstyle wants a specific order of imports.
2019-05-30 00:22:05 +02:00
Romain Vimont
b75f0e9427
Merge branch 'master' into dev
2019-05-28 13:31:37 +02:00
Romain Vimont
5d473efeb5
Bind Home key to MOVE_HOME
...
On pressing Home key on the computer, move the cursor to the beginning
of the line instead of going back to the home screen.
<https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME >
<https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MOVE_HOME >
Fixes (part of) <https://github.com/Genymobile/scrcpy/issues/555 >.
2019-05-27 10:24:47 +02:00
Romain Vimont
a41dd6c79f
Make owned filename a pointer-to-non-const
...
The file handler owns the filename string, so it needs to free it.
Therefore, it should not be a pointer-to-const.
2019-05-24 17:25:31 +02:00
Romain Vimont
c3779d8513
Make owned serial a pointer-to-non-const
...
The file handler owns the serial, so it needs to free it. Therefore, it
should not be a pointer-to-const.
2019-05-24 17:24:17 +02:00
Romain Vimont
b3bd5f1b80
Remove useless casts to (void *)
2019-05-24 17:23:21 +02:00
Romain Vimont
a920ba6471
Explain how to customize path in README
2019-05-24 13:25:12 +02:00
Romain Vimont
3133d5d1c7
Continue on icon loading failure
...
If loading the icon from xpm fails, launch scrcpy without window icon.
<https://github.com/Genymobile/scrcpy/issues/539 >
2019-05-23 20:58:08 +02:00
Romain Vimont
2dc1a59471
Check surface returned for icon
...
SDL_CreateRGBSurfaceFrom() may return NULL, causing a segfault.
<https://github.com/Genymobile/scrcpy/issues/539 >
2019-05-20 09:44:45 +02:00
Romain Vimont
3068457b90
Log characters failed to be injected
...
Some characters may not be injected (e.g. '\r`). Log them instead of
ignoring them silently.
2019-05-20 08:40:10 +02:00
Romain Vimont
56f8e78f58
Merge pull request #542 from npes87184/dev
...
Return success count in injectText
2019-05-20 08:39:02 +02:00
Romain Vimont
e443518ed9
Print adb command on error
...
When the execution of an adb command fails, print the command. This will
help to understand what went wrong.
See <https://github.com/Genymobile/scrcpy/issues/530 >.
2019-05-12 15:16:13 +02:00
Romain Vimont
eeb8e8420f
Use size_t for command length
...
The size of an array should have type size_t.
2019-05-12 14:31:18 +02:00
Romain Vimont
39b5893c42
Merge pull request #522 from dos1/compositor
...
Disable X11 compositor bypass
2019-05-05 17:35:10 +02:00
Romain Vimont
c8338b2918
Recover if expand/collapse panels is not available
...
Some devices don't have the required method. Recover gracefully without
crashing the server.
Fixes <https://github.com/Genymobile/scrcpy/issues/506 >.
2019-05-04 14:49:48 +02:00
Romain Vimont
2837c6eaab
Add method to log error without throwable
...
Add Ln.e(message) in addition to Ln.e(message, error).
2019-05-04 14:49:04 +02:00
Romain Vimont
668e54fd4b
Upgrade gradle
2019-05-04 14:49:04 +02:00
Romain Vimont
01664777c8
Merge branch 'master' into dev
2019-05-04 14:48:54 +02:00
Romain Vimont
5254e585c6
Run server tests on release
2019-03-27 21:51:42 +01:00
Romain Vimont
66baf0f95b
Run tests with ASAN enabled
...
This may capture more errors (like
e2ef39fae5 ).
2019-03-27 21:50:25 +01:00
Romain Vimont
f11b0ec204
Fix server checkstyle errors
...
Fix errors reported by:
gradle -p server check
2019-03-27 21:47:54 +01:00
Romain Vimont
e2ef39fae5
Fix overflow in test
...
The serialized text is not nul-terminated (its size is explicitely
provided), but the input text in the event is a nul-terminated string.
The test was failing with ASAN enabled.
2019-03-25 11:33:32 +01:00
Romain Vimont
3eda38e5fc
Do not call codec.stop() on exception
...
On exception, the codec is not in a state were .stop() can be called.
2019-03-21 18:46:22 +01:00
Romain Vimont
71fd238b0a
Update developer documentation for v1.8
2019-03-07 20:48:43 +01:00
Romain Vimont
d795144a36
Add note about Ctrl+C on Windows while recording
...
Ctrl+C kills the app on Windows, so the recorded file is broken.
2019-03-07 20:42:08 +01:00
Romain Vimont
c287826f8e
Update links to v1.8 in README and BUILD
2019-03-07 20:42:02 +01:00
Romain Vimont
1323e3c43e
Bump version to 1.8
2019-03-07 20:21:07 +01:00
Romain Vimont
50dac2eaee
Log "new texture" at INFO level
...
The "initial texture" is logged at INFO level. For consistency, log "new
texture" at the same level.
2019-03-07 20:18:03 +01:00
Romain Vimont
b8ff35efe6
Remove empty line
2019-03-07 19:03:13 +01:00
Romain Vimont
7fad611dfb
Merge branch 'dev'
2019-03-07 19:02:40 +01:00
Romain Vimont
a7b3901c31
Add more consts
...
Some decoder and recorder functions must not write to AVCodec and
AVPacket.
2019-03-03 12:02:41 +01:00
Romain Vimont
fc81d0d771
Merge pull request #442 from npes87184/master
...
server/meson.build: support relative path for prebuilt_server
2019-03-03 11:16:13 +01:00
Romain Vimont
f7efafd846
Explicitly pass control flag to input manager
...
Replace the "global" control flag in the input_manager by a function
parameter to make explicit that the behavior depends whether
--no-control has been set.
2019-03-03 11:05:26 +01:00
Romain Vimont
6baed8a06f
Do not init SDL video subsystem if no display
...
The SDL video subsystem is not necessary if we don't display the video.
Move the sdl_init_and_configure() function from screen.c to scrcpy.c,
because it is not only related to the screen display.
2019-03-03 01:41:35 +01:00
Romain Vimont
8595862005
Use explicit output parameter for skipped frame
...
The function video_buffer_offer_decoded_frame() returned a bool to
indicate whether the previous frame had been consumed.
This was confusing, because we could expect the returned bool report
whether the action succeeded.
Make the semantic explicit by using an output parameter.
Also revert the flag (report if the frame has been skipped instead of
consumed) to avoid confusion for the first frame (the previous is
neither skipped nor consumed because there is no previous frame).
2019-03-03 00:35:20 +01:00
Romain Vimont
9ef345fdd0
Make owned serial a pointer-to-non-const
...
The server owns the serial, so it needs to free it. Therefore, it should
not be a pointer-to-const.
2019-03-03 00:01:16 +01:00
Romain Vimont
dfed1b250e
Replace SDL types by C99 standard types
...
Scrcpy is a C11 project. Use the C99 standard types instead of the
SDL-specific types:
SDL_bool -> bool
SintXX -> intXX_t
UintXX -> uintXX_t
2019-03-02 23:55:23 +01:00
Romain Vimont
8655ba7197
Add option to mirror in read-only
...
Add an option to disable device control: -n/--no-control.
2019-03-02 23:10:21 +01:00
Romain Vimont
163cd36ccc
Rename -n/--no-window to -N/--no-display
...
The description of scrcpy is "Display and control your Android device".
We want an option to disable display, another one to disable control.
For naming consistency, name it --no-display.
Also change the shortname to -N, so that we can use -n for --no-control
later.
2019-03-02 22:46:46 +01:00
Romain Vimont
db6644f1f9
Add missing no_window initialization
...
Initialize the field no_window in "struct args"
2019-03-02 22:42:28 +01:00
Romain Vimont
36191b7eec
Avoid unnecessary call if display is disabled
...
If --no-window is passed, there is no need to register an event watcher.
2019-03-02 21:51:07 +01:00
Romain Vimont
33ccb1368f
Extract event processing out of event_loop()
...
To avoid too many levels of nested blocks, move the event handling logic
in a separate function.
2019-03-02 21:51:07 +01:00
Romain Vimont
aeda583a2c
Update code style
...
Limit source code to 80 chars, and declare functions return type and
modifiers on a separate line.
This allows to avoid very long lines, and all function names are
aligned.
(We do this on VLC, and I like it.)
2019-03-02 20:28:46 +01:00
Romain Vimont
b2fe005498
Replace uint64_t by Uint64 for consistency
...
The field pts is declared Uint64 in struct frame_meta.
2019-03-02 20:10:34 +01:00
Romain Vimont
ef118cc633
Describe the --no-window feature in README
2019-03-02 18:45:56 +01:00
Romain Vimont
89812e4eee
Implement the --no-window flag
...
Disable decoder, screen (display), file_handler and controller when
--no-window is requested.
<https://github.com/Genymobile/scrcpy/pull/418 >
2019-03-02 18:45:56 +01:00
Romain Vimont
e6e011baaf
Add stream layer
...
The decoder initially read from the socket, decoded the video and sent
the decoded frames to the screen:
+---------+ +----------+
socket ---> | decoder | ---> | screen |
+---------+ +----------+
The design was simple, but the decoder had several responsabilities.
Then we added the recording feature, so we added a recorder, which
reused the packets received from the socket managed by the decoder:
+----------+
---> | screen |
+---------+ / +----------+
socket ---> | decoder | ----
+---------+ \ +----------+
---> | recorder |
+----------+
This lack of separation of concerns now have concrete implications: we
could not (properly) disable the decoder/display to only record the
video.
Therefore, split the decoder to extract the stream:
+----------+ +----------+
---> | decoder | ---> | screen |
+---------+ / +----------+ +----------+
socket ---> | stream | ----
+---------+ \ +----------+
---> | recorder |
+----------+
This will allow to record the stream without decoding the video.
2019-03-02 18:45:45 +01:00
Romain Vimont
e7b7b083aa
Store the recording request in a local bool
...
This avoids to test explicitly whether options->record_filename is NULL.
2019-03-02 18:21:20 +01:00
Romain Vimont
8aeb5c0e3c
Fix cleanup order
...
The order of cleanup was not the reverse as the initialization order. As
a consequence, recorder_destroy() could theoretically be called even if
recorder_init() failed.
2019-03-02 18:13:11 +01:00
Romain Vimont
bcd4090d51
Fix recording with old decoding/encoding API
...
The deprecated avcodec_decode_video2() should always the whole packet,
so there is no need to loop (cf doc/examples/demuxing_decoding.c in
FFmpeg).
This hack changed the packet size and data pointer. This broke recording
which used the same packet.
2019-03-02 17:03:15 +01:00
Romain Vimont
84270e2d18
Rename "stop" to "interrupt"
...
The purpose of video_buffer_stop() is to interrupt any blocking call, so
rename it to video_buffer_interrupt().
2019-03-02 17:03:15 +01:00
Romain Vimont
fff87095d9
Rename "frames" to "video_buffer"
...
It better describes the purpose of the structure.
2019-03-02 15:24:33 +01:00
Romain Vimont
aacb09a3d6
Remove unused mutex field in decoder
2019-03-02 14:48:34 +01:00
Romain Vimont
7d10ec2b5a
Add shortcut to expand/collapse notification panel
...
Use Ctrl+n to expand, Ctrl+Shift+n to collapse.
Fixes <https://github.com/Genymobile/scrcpy/issues/392 >
2019-02-26 20:35:37 +01:00
Romain Vimont
1c1fe5ec53
Use "always on top" only for SDL >= 2.0.5
...
The flag SDL_WINDOW_ALWAYS_ON_TOP is available since SDL 2.0.5.
Do not use it if SDL is older, to fix compilation failure.
Fixes <https://github.com/Genymobile/scrcpy/issues/432 >
2019-02-16 15:28:56 +01:00
Romain Vimont
751600a7f9
Move all compat ifdefs definitions to compat.h
...
This allows to give a proper name to features requirements.
2019-02-16 15:28:56 +01:00
Romain Vimont
3fc11ee465
Update links to v1.7 in README and BUILD
2019-02-16 01:07:15 +01:00
Romain Vimont
b7472a545e
Bump version to 1.7
2019-02-16 00:53:19 +01:00
Romain Vimont
f5f4e6b1c5
Allocate extradata with av_malloc()
...
The extradata buffer is owned by libav, so it must be allocated with
av_malloc(), not SDL_malloc().
This fixes a crash on Windows during avformat_free_context().
2019-02-16 00:53:12 +01:00
Romain Vimont
6c40dbd27d
Regroup Windows-ifdefs in command.h
2019-02-10 14:33:59 +01:00
Romain Vimont
477c0a2cab
Create process with wide chars on Windows
...
Windows does not support UTF-8, so pushing a file with non-ASCII
characters failed.
Convert the UTF-8 command line to a wide characters string and call
CreateProcessW().
Fixes <https://github.com/Genymobile/scrcpy/issues/422 >
2019-02-10 13:08:28 +01:00
Romain Vimont
c0b65b14df
Merge branch 'master' into dev
2019-02-10 12:23:47 +01:00
Romain Vimont
b23cacfc1a
Add recording logs
...
Log when recording is started and stopped.
2019-02-10 11:29:34 +01:00
Romain Vimont
0ed2373952
Support recording to MKV
...
Implement recording to Matroska files.
The format to use is determined by the option -F/--record-format if set,
or by the file extension (".mp4" or ".mkv").
2019-02-09 15:56:24 +01:00
Romain Vimont
1aaad6ba35
Rescale packet timestamp to container time base
...
Some containers force their own time base. For example, matroska
overwrite time_base to (AVRational) {1, 1000}.
Therefore, rescale our packet timestamps to the output stream time base.
Suggested-by: Steve Lhomme <robux4@ycbcr.xyz >
2019-02-09 15:51:18 +01:00
Romain Vimont
c8f0805b89
Write header file with correct extradata
...
When recording, the header must be written with extradata set to the
content of the very first packet.
Suggested-by: Steve Lhomme <robux4@ycbcr.xyz >
Fixes <https://github.com/Genymobile/scrcpy/issues/351 >
Fixes <https://github.com/Genymobile/scrcpy/issues/416 >
2019-02-09 15:50:24 +01:00
Romain Vimont
ee3cba57a8
Forward FFmpeg logs
...
FFmpeg logs can be useful to understand the cause of issues.
2019-02-09 12:27:13 +01:00
Romain Vimont
c11905b860
Add log verbose macro
...
This was the only log priority missing.
2019-02-09 12:27:13 +01:00
Romain Vimont
1a5ba59504
Fix memory leak on close
...
The buffer associated to the AVIOContext must be freed.
2019-02-09 12:27:13 +01:00
Romain Vimont
aa07dfd2ca
Merge pull request #412 from npes87184/dev
...
app: add always_on_top
2019-01-27 14:09:19 +01:00
Romain Vimont
eea478b9dc
Add release script
...
Add a script to generate the whole release properly.
It first builds locally in release mode, then execute tests. Then it
builds archives for Windows. Finally, it puts all release files (Windows
archives, prebuilt server and checksums) in a separate release
directory.
2019-01-26 15:31:14 +01:00
Romain Vimont
43ad402356
Merge pull request #411 from npes87184/master
...
tests: fix test_control_event_serialize
2019-01-26 13:22:42 +01:00
Romain Vimont
b35733edb6
Fix expected mouse event sizes
...
Commit fefb9816a9 modified mouse events
serialization. The server-side parsing was updated to correctly read the
position, but the expected size of these events was not updated.
As a result, the server might try to parse incomplete events, leading
to BufferUnderflowException.
Fixes
<https://github.com/Genymobile/scrcpy/issues/350#issuecomment-456298816 >.
2019-01-22 09:47:26 +01:00
Romain Vimont
7764a836f1
Fix incorrect comment
...
Comment had not been updated along with the code.
2019-01-22 09:38:51 +01:00
Romain Vimont
0bfaf7b7ff
Update links to v1.6 in README and BUILD
2019-01-20 22:05:32 +01:00
Romain Vimont
446c682374
Bump version to 1.6
2019-01-20 21:35:42 +01:00
Romain Vimont
3aacb7967d
Merge branch 'dev' into master
2019-01-19 21:40:55 +01:00
Romain Vimont
06a0bbbc71
Update FFmpeg (4.1) for Windows
...
Include the last version of FFmpeg in Windows releases.
2019-01-19 18:14:05 +01:00
Romain Vimont
d71e036f3a
Do not disable screensaver
...
Keep screensaver enabled while scrcpy is running.
Fixes <https://github.com/Genymobile/scrcpy/issues/380 >.
2019-01-18 23:17:31 +01:00
Romain Vimont
b343a5dc59
Merge pull request #401 from npes87184/dev
...
input_manager: don't ignore double click event when clicking inside device
2019-01-18 13:34:41 +01:00