Romain Vimont
bb4614d558
Reverse boolean logic for readability
...
Refs #2260 <https://github.com/Genymobile/scrcpy/pull/2260#issuecomment-823508759 >
2021-04-25 14:36:48 +02:00
Frank Leon Rose
aaf7875d92
Ensure get_server_path() retval is freeable
...
PR #2276 <https://github.com/Genymobile/scrcpy/pull/2276 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-22 22:12:23 +02:00
brunoais
b9c3f65fd8
Provide actions for the extra mouse buttons
...
Bind APP_SWITCH to button 4 and expand notification panel on button 5.
PR #2258 <https://github.com/Genymobile/scrcpy/pull/2258 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-19 20:16:45 +02:00
Romain Vimont
d0739911a3
Forward DOWN and UP separately for right-click
...
The shortcut "back on screen on" is a bit special: the control is
requested by the client, but the actual event injection (POWER or BACK)
is determined on the device.
To properly inject DOWN and UP events for BACK, transmit the action as
a control parameter.
If the screen is off:
- on DOWN, inject POWER (DOWN and UP) (wake up the device immediately)
- on UP, do nothing
If the screen is on:
- on DOWN, inject BACK DOWN
- on UP, inject BACK UP
A corner case is when the screen turns off between the DOWN and UP
event. In that case, a BACK UP event will be injected, so it's harmless.
As a consequence of this change, the BACK button is now handled by
Android on mouse released. This is consistent with the keyboard shortcut
(Mod+b) behavior.
PR #2259 <https://github.com/Genymobile/scrcpy/pull/2259 >
Refs #2258 <https://github.com/Genymobile/scrcpy/pull/2258 >
2021-04-19 20:16:45 +02:00
Romain Vimont
964b6d2243
Forward DOWN and UP separately for middle-click
...
As a consequence of this change, the HOME button is now handled by
Android on mouse released. This is consistent with the keyboard shortcut
(MOD+h) behavior.
PR #2259 <https://github.com/Genymobile/scrcpy/pull/2259 >
Refs #2258 <https://github.com/Genymobile/scrcpy/pull/2258 >
2021-04-17 18:04:24 +02:00
Romain Vimont
8cc057c8f1
Prevent forwarding only "mouse released" events
...
Some mouse clicks DOWN are captured for shortcuts, but the matching UP
events were still forwarded to the device.
Instead, capture both DOWN and UP for shortcuts, and do nothing on UP.
PR #2259 <https://github.com/Genymobile/scrcpy/pull/2259 >
Refs #2258 <https://github.com/Genymobile/scrcpy/pull/2258 >
2021-04-17 18:04:13 +02:00
Romain Vimont
edee69d637
Fix options alphabetical order
...
"verbosity" < "version"
2021-04-16 17:40:39 +02:00
Romain Vimont
8ef4c044fa
Do not forward SDL_DROPFILE event
...
The event is handled by scrcpy.c, it is not necessary to send it to
screen or input_manager.
2021-04-13 22:37:08 +02:00
Romain Vimont
c23c38f99d
Move resizing workaround to screen.c
2021-04-13 22:36:59 +02:00
Romain Vimont
65c4f487b3
Set initial fullscreen from screen.c
2021-04-13 22:15:05 +02:00
Romain Vimont
c6d7f5ee96
Make screen_show_window() static
...
It is only used from screen.c now.
2021-04-13 22:04:38 +02:00
Romain Vimont
28f6cbaea6
Destroy screen once stream is finished
...
The screen receives callbacks from the decoder, fed by the stream.
The decoder is run from the stream thread, so waiting for the end of
stream is sufficient to avoid possible use-after-destroy.
2021-04-11 14:42:09 +02:00
Romain Vimont
08fc6694e1
Do not destroy uninitialized screen
...
When --no-display was passed, screen_destroy() was called while
screen_init() was never called.
In practice, it did not crash because it just freed NULL pointers, but
it was still incorrect.
2021-04-11 13:07:44 +02:00
Romain Vimont
d0983db592
Make internal recorder function static
2021-04-10 18:48:52 +02:00
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