Romain Vimont
fb7870500a
Remove unused field from input_manager
2021-04-10 18:48:52 +02:00
Romain Vimont
33006561c7
Remove useless forward declaration from stream.h
2021-04-10 18:48:52 +02:00
Romain Vimont
a09733d175
Remove useless includes from decoder.c
2021-04-10 18:48:44 +02:00
Romain Vimont
6231f683af
Fix compilation error for old decoding API
...
Commits cb9c42bdcb
and
441d3fb119
updated the code only for the
new decoding API.
2021-04-05 22:35:14 +02:00
Romain Vimont
9826c5c4a4
Remove HiDPI compilation flag
...
Always enable HiDPI support, there is no reason to expose a compilation
flag.
2021-04-04 15:00:13 +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
Yu-Chen Lin
fb0bcaebc2
Export static method to power off screen in Device
...
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:29 +01:00
slingmint
dd453ad041
Pass scrcpy-noconsole arguments through to scrcpy
...
PR #2052 <https://github.com/Genymobile/scrcpy/pull/2052 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-16 21:04:04 +01:00
Romain Vimont
0308ef43f2
Do not set buttons on touch events
...
BUTTON_PRIMARY must not be set for touch events:
> This button constant is not set in response to simple touches with a
> finger or stylus tip. The user must actually push a button.
<https://developer.android.com/reference/android/view/MotionEvent#BUTTON_PRIMARY >
Fixes #2169 <https://github.com/Genymobile/scrcpy/issues/2169 >
2021-03-15 18:46:56 +01:00
Romain Vimont
40febf4a91
Use device id 0 for touch/mouse events
...
Virtual device is only for keyboard sources, not mouse or touchscreen
sources. Here is the value of InputDevice.getDevice(-1).toString():
Input Device -1: Virtual
Descriptor: ...
Generation: 2
Location: built-in
Keyboard Type: alphabetic
Has Vibrator: false
Has mic: false
Sources: 0x301 ( keyboard dpad )
InputDevice.getDeviceId() documentation says:
> An id of zero indicates that the event didn't come from a physical
> device and maps to the default keymap.
<https://developer.android.com/reference/android/view/InputEvent#getDeviceId() >
However, injecting events with a device id of 0 causes event.getDevice()
to be null on the client-side.
Commit 26529d377f
used -1 as a workaround
to avoid a NPE on a specific Android TV device. But this is a bug in the
device system, which wrongly assumes that input device may not be null.
A similar issue was present in Flutter, but it is now fixed:
- <https://github.com/flutter/flutter/issues/30665 >
- <https://github.com/flutter/engine/pull/7986 >
On the other hand, using an id of -1 for touchscreen events (which is
invalid) causes issues for some apps:
<https://github.com/Genymobile/scrcpy/issues/2125#issuecomment-790535792 >
Therefore, use a device id of 0.
An alternative could be to find an existing device matching the source,
like "adb shell input" does. See getInputDeviceId():
<https://android.googlesource.com/platform/frameworks/base.git/+/master/cmds/input/src/com/android/commands/input/Input.java >
But it seems better to indicate that the event didn't come from a
physical device, and it would not solve #962 anyway, because an Android
TV has no touchscreen.
Refs #962 <https://github.com/Genymobile/scrcpy/issues/962 >
Fixes #2125 <https://github.com/Genymobile/scrcpy/issues/2125 >
2021-03-14 18:30:56 +01:00
Romain Vimont
429fdef04f
Fix encoder parameter suggestion
...
The option is --encoder, not --encoder-name.
2021-03-11 10:55:12 +01:00
Biswapriyo Nath
d1789f082a
meson: Do not use full path with mingw tools name
...
This helps to use mingw toolchains which are not in /usr/bin path.
PR #2185 <https://github.com/Genymobile/scrcpy/pull/2185 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-09 09:59:57 +01:00
Romain Vimont
eb7e1070cf
Release frame data as soon as possible
...
During a frame swap, one of the two frames involved can be released.
2021-03-06 22:58:03 +01:00
Romain Vimont
386f017ba9
Factorize frame swap
2021-03-06 22:58:03 +01:00
Romain Vimont
cc48b24324
Simplify screen initialization
...
Use a single function to initialize the screen instance.
2021-03-06 22:58:03 +01:00
Romain Vimont
597c54f049
Group screen parameters into a struct
...
The function screen_init_rendering had too many parameters.
2021-03-06 22:58:03 +01:00
Romain Vimont
955da3b578
Remove screen static initializer
...
Most of the fields are initialized dynamically.
2021-03-06 22:58:03 +01:00
Romain Vimont
cb9c42bdcb
Use a callback to notify frame skip
...
A skipped frame is detected when the producer offers a frame while the
current pending frame has not been consumed.
However, the producer (in practice the decoder) is not interested in the
fact that a frame has been skipped, only the consumer (the renderer) is.
Therefore, notify frame skip via a consumer callback. This allows to
manage the skipped and rendered frames count at the same place, and
remove fps_counter from decoder.
2021-03-06 22:58:03 +01:00
Romain Vimont
fb9f9848bd
Use a callback to notify a new frame
...
Make the decoder independant of the SDL even mechanism, by making the
consumer register a callback on the video_buffer.
2021-03-06 22:58:03 +01:00
Romain Vimont
c50b958ee4
Initialize screen before starting the stream
...
As soon as the stream is started, the video buffer could notify a new
frame available.
In order to pass this event to the screen without race condition, the
screen must be initialized before the screen is started.
2021-03-06 22:58:03 +01:00
Romain Vimont
441d3fb119
Make video buffer more generic
...
Video buffer is a tool between a frame producer and a frame consumer.
For now, it is used between a decoder and a renderer, but in the future
another instance might be used to swscale decoded frames.
2021-03-06 22:58:03 +01:00
Romain Vimont
cb197ee3a2
Move fps counter out of video buffer
...
In order to make video buffer more generic, move out its specific
responsibility to count the fps between the decoder and the renderer.
2021-03-06 22:58:03 +01:00
Romain Vimont
218636dc10
Inject touch events with smallest detectable size
...
A value of 1 means the "largest detectable size", a value of 0 means the
"smallest detectable size".
https://developer.android.com/reference/android/view/MotionEvent.PointerCoords#size
https://developer.android.com/reference/android/view/MotionEvent#AXIS_SIZE
Fixes #2125 <https://github.com/Genymobile/scrcpy/issues/2125 >
2021-03-03 18:22:54 +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
0207e3df33
Remove unused no_window field
2021-02-25 22:19:05 +01:00
Romain Vimont
9cd1a7380d
Enable NDEBUG via Meson built-in option
2021-02-25 22:19:05 +01:00
Romain Vimont
24b637b972
Handle im-related events from input_manager.c
2021-02-25 22:19:05 +01:00
Romain Vimont
76a3d9805b
Inline window events handling
...
Now that all screen-related events are handled from screen.c, there is
no need for a separate method for window events.
2021-02-25 22:19:05 +01:00
Romain Vimont
50b4a730e3
Handle screen-related events from screen.c
2021-02-25 22:19:05 +01:00
Romain Vimont
ea2369f568
Reference video buffer from screen
...
This paves the way to handle EVENT_NEW_FRAME from screen.c, by allowing
to call screen_update_frame() without an explicit video_buffer instance.
2021-02-25 22:19:05 +01:00
Romain Vimont
0538e9645b
Improve error handling in screen initialization
...
After the struct screen is initialized, the window, the renderer and the
texture are necessarily valid, so there is no need to check in
screen_destroy().
2021-02-25 22:18:51 +01:00
Romain Vimont
626094ad13
Handle window events only once visible
...
This will avoid corner cases where we need to resize while no frame has
been received yet.
2021-02-17 09:54:03 +01:00
Romain Vimont
a566635c43
Log mipmaps error only if mipmaps are enabled
2021-02-17 09:54:03 +01:00
Romain Vimont
862948b132
Make use_opengl local
...
The flag is used only locally, there is no need to store it in the
screen structure.
2021-02-17 09:54:03 +01:00
Romain Vimont
c0c4ba7009
Add intermediate frame in video buffer
...
There were only two frames simultaneously:
- one used by the decoder;
- one used by the renderer.
When the decoder finished decoding a frame, it swapped it with the
rendering frame.
Adding a third frame provides several benefits:
- the decoder do not have to wait for the renderer to release the
mutex;
- it simplifies the video_buffer API;
- it makes the rendering frame valid until the next call to
video_buffer_take_rendering_frame(), which will be useful for
swscaling on window resize.
2021-02-17 09:54:03 +01:00
Romain Vimont
c53bd4d8b6
Assert non-recursive usage of mutexes
2021-02-17 09:54:03 +01:00
Romain Vimont
54f5c42d7b
Add mutex assertions
2021-02-17 09:54:03 +01:00
Romain Vimont
21d206f360
Expose mutex assertions
...
Add a function to assert that the mutex is held (or not).
2021-02-17 09:54:03 +01:00
Romain Vimont
d2689fc168
Expose thread id
2021-02-17 09:54:03 +01:00
Romain Vimont
f6320c7e31
Wrap SDL thread functions into scrcpy-specific API
...
The goal is to expose a consistent API for system tools, and paves the
way to make the "core" independant of SDL in the future.
2021-02-17 09:54:03 +01:00
Romain Vimont
30e619d37f
Replace SDL_strdup() by strdup()
...
The functions SDL_malloc(), SDL_free() and SDL_strdup() were used only
because strdup() was not available everywhere.
Now that it is available, use the native version of these functions.
2021-02-17 09:54:03 +01:00
Romain Vimont
c0dde0fade
Provide strdup() compat
...
Make strdup() available on all platforms.
2021-02-17 09:53:25 +01:00
Romain Vimont
ace438e52a
Remove unused port_range field
...
The port_range is used from "struct server_params", the copy in
"struct server" was unused.
2021-02-14 14:47:49 +01:00
Romain Vimont
8e83f3e8af
Remove unused custom event
2021-02-14 14:44:05 +01:00
Romain Vimont
97b001e7c0
Fix undefined left shift
...
Small unsigned integers promote to signed int. As a consequence, if v is
a uint8_t, then (v << 24) yields an int, so the left shift is undefined
if the MSB is 1.
Cast to uint32_t to yield an unsigned value.
Reported by USAN (meson x -Db_sanitize=undefined):
runtime error: left shift of 255 by 24 places cannot be represented
in type 'int'
2021-01-24 15:31:21 +01:00
Romain Vimont
d8e9ad20b0
Improve file handler error message
...
Terminating the file handler current process may be either a "push" or
"install" command.
2021-01-24 14:24:24 +01:00
Romain Vimont
b566700bfd
Kill process with SIGKILL signal
...
An "adb push" command is not terminated by SIGTERM.
2021-01-24 14:24:24 +01:00
Romain Vimont
7afd149f4b
Fix file_handler process race condition
...
The current process could be waited both by run_file_handler() and
file_handler_stop().
To avoid the race condition, wait the process without closing, then
close with mutex locked.
2021-01-24 14:24:24 +01:00
Romain Vimont
6a50231698
Expose a single process_wait()
...
There were two versions: process_wait() and process_wait_noclose().
Expose a single version with a flag (it was already implemented that way
internally).
2021-01-24 14:24:18 +01:00