Commit Graph

1302 Commits (0c9666b733ef16e1c250d59773120d2635318e5f)
 

Author SHA1 Message Date
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>
3 years ago
Romain Vimont fda293f9bb Fix BUILD.md line wrapping 3 years ago
Romain Vimont 38f392f08f Fix typo in BUILD.md 3 years ago
Romain Vimont 8414b688f0 Link release to main README in translations
This avoids to link an older version.
3 years ago
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>
3 years ago
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.
3 years ago
Romain Vimont 1fb7957525 Fix typo in README
Refs <https://github.com/Genymobile/scrcpy/pull/2195#discussion_r595664697>
3 years ago
Romain Vimont 19ad107f1f Add "Get the app" summary section
Give quick instructions to download/install scrcpy.
3 years ago
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>
3 years ago
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>
3 years ago
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>
3 years ago
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>
3 years ago
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>
3 years ago
Romain Vimont 429fdef04f Fix encoder parameter suggestion
The option is --encoder, not --encoder-name.
3 years ago
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>
3 years ago
Romain Vimont eb7e1070cf Release frame data as soon as possible
During a frame swap, one of the two frames involved can be released.
3 years ago
Romain Vimont 386f017ba9 Factorize frame swap 3 years ago
Romain Vimont cc48b24324 Simplify screen initialization
Use a single function to initialize the screen instance.
3 years ago
Romain Vimont 597c54f049 Group screen parameters into a struct
The function screen_init_rendering had too many parameters.
3 years ago
Romain Vimont 955da3b578 Remove screen static initializer
Most of the fields are initialized dynamically.
3 years ago
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.
3 years ago
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.
3 years ago
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.
3 years ago
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.
3 years ago
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.
3 years ago
Romain Vimont dca11f6c51 Remove obsolete FAQ entry
Issue #15 had been fixed in v1.14 by
e40532a376.
3 years ago
Romain Vimont 08baaf4b57 Mention adb debugging in FAQ 3 years ago
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>
3 years ago
yangfl 1863ca7ad1 Remove unnecessary escape characters in manpage
PR #2123 <https://github.com/Genymobile/scrcpy/pull/2123>

Signed-off-by: Romain Vimont <rom@rom1v.com>
3 years ago
Romain Vimont 7b51a0313e Update another java version in BUILD.md
Commit f8524a2be7 updated one reference to
the openjdk package, but there was another one.
3 years ago
Romain Vimont a2919b3ef2 Fix release instructions in BUILD.md
Makefile.CrossWindows have been renamed to release.mk, which is called
from release.sh.
3 years ago
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.
3 years ago
Romain Vimont a3aa5ac95e Insert numerical values statically in usage string 3 years ago
Romain Vimont 0207e3df33 Remove unused no_window field 3 years ago
Romain Vimont 9cd1a7380d Enable NDEBUG via Meson built-in option 3 years ago
Romain Vimont 24b637b972 Handle im-related events from input_manager.c 3 years ago
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.
3 years ago
Romain Vimont 50b4a730e3 Handle screen-related events from screen.c 3 years ago
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.
3 years ago
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().
3 years ago
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.
3 years ago
Romain Vimont a566635c43 Log mipmaps error only if mipmaps are enabled 3 years ago
Romain Vimont 862948b132 Make use_opengl local
The flag is used only locally, there is no need to store it in the
screen structure.
3 years ago
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.
3 years ago
Romain Vimont c53bd4d8b6 Assert non-recursive usage of mutexes 3 years ago
Romain Vimont 54f5c42d7b Add mutex assertions 3 years ago
Romain Vimont 21d206f360 Expose mutex assertions
Add a function to assert that the mutex is held (or not).
3 years ago
Romain Vimont d2689fc168 Expose thread id 3 years ago
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.
3 years ago
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.
3 years ago