Romain Vimont
08f1fd46c8
Add container_of() macro
...
This will allow to get the parent of an embedded struct.
2021-04-25 14:38:42 +02:00
Romain Vimont
2ddf760c09
Make video_buffer more generic
...
The video buffer took ownership of the producer frame (so that it could
swap frames quickly).
In order to support multiple sinks plugged to the decoder, the decoded
frame must not be consumed by the display video buffer.
Therefore, move the producer and consumer frames out of the video
buffer, and use FFmpeg AVFrame refcounting to share ownership while
avoiding copies.
2021-04-25 14:38:42 +02:00
Romain Vimont
5d9e96dc4e
Remove compat with old FFmpeg codec params API
...
The new API has been introduced in 2016 in libavformat 57.xx, it's very
old.
This will avoid to maintain two code paths for codec parameters.
2021-04-25 14:38:42 +02:00
Romain Vimont
de9b79ec2d
Remove compat with old FFmpeg decoding API
...
The new API has been introduced in 2016 in libavcodec 57.xx, it's very
old.
This will avoid to maintain two code paths for decoding.
2021-04-25 14:38:42 +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
21b590b766
Write trailer from recorder thread
...
The recorder thread wrote the whole content except the trailer, which
was odd.
2021-04-25 14:38:42 +02:00
brunoais
d7e6589677
Document 4th+5th + 2xn shortcuts
...
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
b4ee9f27ce
Add mouse shortcut to expand settings panel
...
Double-click on extra mouse button to open the settings panel (a
single-click opens the notification panel).
This is consistent with the keyboard shortcut MOD+n+n.
PR #2264 <https://github.com/Genymobile/scrcpy/pull/2264 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
6fa63cf6f8
Add keyboard shortcut to expand settings panel
...
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
50eecdab28
Add control message to expand settings panel
...
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
9576283907
Count repeated identical key events
...
This will allow shortcuts such as MOD+n+n to open the settings panel.
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
brunoais
66c581851f
Rename control message type to COLLAPSE_PANELS
...
The collapsing action collapses any panels.
By the way, the Android method is named collapsePanels().
PR #2260 <https://github.com/Genymobile/scrcpy/pull/2260 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:36:48 +02:00
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
Andrea Gelmini
498ad23e98
Fix typos
...
PR #2263 <https://github.com/Genymobile/scrcpy/pull/2263 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-18 14:36:31 +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
07a85b7c94
Fix typo in command-line help
...
Refs #2237 <https://github.com/Genymobile/scrcpy/issues/2237 >
2021-04-07 15:12:33 +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
Romain Vimont
2812de8a9a
Update brew java version to JDK 11
...
Refs f8524a2be7
Refs 7b51a0313e
2021-04-04 14:39:16 +02:00
quyleanh
d50c678a5f
Update brew cask documentation
...
The command `brew cask` has been deprecated:
<https://github.com/Homebrew/discussions/discussions/340#discussioncomment-232364 >
Should be `brew install` directly now.
PR #2231 <https://github.com/Genymobile/scrcpy/pull/2231 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-04-04 14:38:54 +02:00
Romain Vimont
b77932a5b7
Add instructions to uninstall
2021-04-01 09:47:15 +02:00
Romain Vimont
47d16a57ac
Add simplified installation script
...
Add a script to download the server and build scrcpy using the
prebuilt server.
2021-03-29 09:33:39 +02:00
Ray Foss
fc5de88eaa
Clarify the order of operations in BUILD.md
...
PR #2223 <https://github.com/Genymobile/scrcpy/pull/2223 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-29 09:28:08 +02:00
Romain Vimont
fda293f9bb
Fix BUILD.md line wrapping
2021-03-29 09:11:40 +02:00
Romain Vimont
38f392f08f
Fix typo in BUILD.md
2021-03-29 08:39:02 +02:00
Romain Vimont
8414b688f0
Link release to main README in translations
...
This avoids to link an older version.
2021-03-28 21:36:00 +02:00
aruko-210
6a217b70f4
Add Japanese translation for README.md
...
PR #2195 <https://github.com/Genymobile/scrcpy/pull/2195 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-03-28 21:28:20 +02:00
Romain Vimont
3a4b10a38d
Improve --push-target example in README
...
A common use case for the --push-target option is to pass the device
Download directory.
2021-03-28 12:25:08 +02:00
Romain Vimont
1fb7957525
Fix typo in README
...
Refs <https://github.com/Genymobile/scrcpy/pull/2195#discussion_r595664697 >
2021-03-17 08:52:16 +01:00
Romain Vimont
19ad107f1f
Add "Get the app" summary section
...
Give quick instructions to download/install scrcpy.
2021-03-16 21:43:52 +01: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