Romain Vimont
45b2e6db5c
Log component stopped in finally clause
...
The message must be logged even when no exception occurs.
2023-02-10 19:06:17 +01:00
Romain Vimont
400a1c69b1
Join all threads before end of main
...
Some calls from separate threads may throw exceptions once the main()
method has returned.
2023-02-10 19:04:56 +01:00
Romain Vimont
730eb1086a
Properly report demuxer errors
...
All demuxer errors were reported as "device disconnected", even if the
failure was not related to device socket read.
2023-02-10 18:55:43 +01:00
Romain Vimont
4f9e9c6619
Prefix UI events constants by SC_
2023-02-10 18:55:43 +01:00
Romain Vimont
953edfd1df
Split codec_id reading
...
Receive codec id and convert it to AVCodecID separately.
This will allow the caller to distinguish between EOS and unknown codec
id.
2023-02-10 18:55:43 +01:00
Romain Vimont
230b8274b9
Fix error return value
...
The function returns an enum AVCodecID, not a bool.
2023-02-10 18:55:43 +01:00
Romain Vimont
40866ddc10
Fix demuxer error message
...
The message applies to all packets, not only config packets.
2023-02-10 18:55:39 +01:00
Romain Vimont
bd56c0abf7
Remove unused codec context
...
The demuxer does not need any codec context.
2023-02-10 18:46:01 +01:00
Romain Vimont
6524e90c68
Remove unused constant
...
This line was committed by error.
Refs 3e517cd40e
2023-02-07 23:11:42 +01:00
Romain Vimont
f2dee20a20
Set power mode on all physical displays
...
Android 10 and above support multiple physical displays. Apply power
mode to all of them.
Fixes #3716 <https://github.com/Genymobile/scrcpy/issues/3716 >
2023-02-06 11:07:14 +01:00
Romain Vimont
d2dce51038
Add support for AV1
...
Add option --codec=av1.
PR #3713 <https://github.com/Genymobile/scrcpy/pull/3713 >
2023-02-06 11:00:49 +01:00
Romain Vimont
4342c5637d
Add support for H265
...
Add option --codec=h265.
PR #3713 <https://github.com/Genymobile/scrcpy/pull/3713 >
Fixes #3092 <https://github.com/Genymobile/scrcpy/issues/3092 >
2023-02-06 11:00:49 +01:00
Romain Vimont
3e517cd40e
Add option to select video codec
...
Introduce the selection mechanism. Alternative codecs will be added in
further commits.
PR #3713 <https://github.com/Genymobile/scrcpy/pull/3713 >
2023-02-06 10:58:45 +01:00
Romain Vimont
f70f6cdd3e
Simplify server info initialization
...
Use sc_read16be() to read 16-bit integer fields.
2023-02-03 12:31:28 +01:00
Romain Vimont
87972e2022
Extract video streaming to a separate class
...
ScreenEncoder handled both capture/encoding and sending over the
network.
Move the streaming part to a separate VideoStreamer.
2023-02-03 12:31:28 +01:00
Romain Vimont
3aac74e9e9
Move variable assignment
...
Computing eof flag is not necessary if rotation changed.
2023-02-03 12:31:28 +01:00
Romain Vimont
1c82c3923d
Compute relative PTS on the client-side
...
The PTS received from MediaCodec are expressed relative to an arbitrary
clock origin. We consider the PTS of the first frame to be 0, and the
PTS of every other frame is relative to this first PTS (note that the
PTS is only used for recording, it is ignored for mirroring).
For simplicity, this relative PTS was computed on the server-side.
To prepare support for multiple stream (video and audio), send the
packet with its original PTS, and handle the PTS offset on the
client-side (by the recorder).
Since we can't know in advance which stream will produce the first
packet with the lowest PTS (a packet received later on one stream may
have a PTS lower than a packet received earlier on another stream),
computing the PTS on the server-side would require unnecessary waiting.
2023-02-03 12:31:28 +01:00
Romain Vimont
36d656e91f
Improve workarounds call comments
2023-02-03 12:31:28 +01:00
Romain Vimont
bdbf1f4eb7
Move Workarounds call
...
Workarounds are not specific to the screen encoder.
Co-authored-by: Simon Chan <1330321+yume-chan@users.noreply.github.com >
2023-02-03 12:31:28 +01:00
Romain Vimont
4177de5880
Do not expose controller threads
...
The way the controller executes its events asynchronously is an
implementation detail.
2023-02-03 12:31:28 +01:00
Romain Vimont
6a07e3d470
Fix manpage formatting
...
Only the option arguments must be underlined.
2023-02-03 12:31:28 +01:00
Simon Chan
9b286ec8a7
Inject additional ACTION_BUTTON_* events for mouse
...
On mouse click events:
- the first button pressed must first generate ACTION_DOWN;
- all button pressed (including the first one) must generate
ACTION_BUTTON_PRESS;
- all button released (including the last one) must generate
ACTION_BUTTON_RELEASE;
- the last button released must in addition generate ACTION_UP.
Otherwise, Chrome does not work properly.
Fixes #3635 <https://github.com/Genymobile/scrcpy/issues/3635 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2023-01-30 20:57:54 +01:00
Simon Chan
8c5c55f9e1
Fix mouse pointer state update
...
If the pointer is a mouse, the pointer is UP only when no buttons are
pressed (not when a button is released, because there might be other
buttons still pressed).
Refs #3635 <https://github.com/Genymobile/scrcpy/issues/3635 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2023-01-30 20:57:54 +01:00
Simon Chan
0afef0c634
Forward action button to device
...
On click event, only the whole buttons state was passed to the device.
In addition, on ACTION_DOWN and ACTION_UP, pass the button associated to
the action.
Refs #3635 <https://github.com/Genymobile/scrcpy/issues/3635 >
Co-authored-by: Romain Vimont <rom@rom1v.com >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2023-01-30 20:57:54 +01:00
Romain Vimont
07806ba915
Retry on spurious error
...
MediaCodec may fail spuriously, typically when stopping an encoding and
starting a new one immediately (for example on device rotation).
In that case, retry a few times, in many cases it should work.
Refs #3693 <https://github.com/Genymobile/scrcpy/issues/3693 >
2023-01-30 20:55:51 +01:00
Romain Vimont
a52053421a
Extract retry handling
...
Move the code to downscale and retry on error out of the catch-block.
Refs 26b4104844
2023-01-29 14:49:36 +01:00
Romain Vimont
a9b2697f3e
Move local variables declarations
...
This makes it clear that these local variables are only passed to
setDisplaySurface().
2023-01-27 22:43:16 +01:00
Romain Vimont
b53d2c66e0
Remove useless setSize() method
...
Inline its content. It makes the logic of internalStreamScreen() more
readable (it reduces the number of indirections).
2023-01-27 22:39:28 +01:00
Romain Vimont
6cccf3ab2a
Remove useless configure() method
...
Inline its single call.
2023-01-27 22:38:37 +01:00
Romain Vimont
52f85fd6f1
Keep the same MediaCodec instance across sessions
...
Calling codec.reset() is sufficient.
2023-01-27 22:31:09 +01:00
Romain Vimont
91c69ad95c
Remove useless destroyDisplay() method
...
The method made exactly one simple call. Just make the call directly.
2023-01-27 22:28:11 +01:00
Romain Vimont
75d7c01a0c
Keep the same display binder across sessions
...
Do not destroy/recreate the display when starting a new encoding session
(on device rotation for example).
2023-01-27 22:26:01 +01:00
Romain Vimont
74d32e612d
Terminate loop explicitly on interrupted
...
Make explicit that the loop terminates when the current thread is
interrupted.
2023-01-27 22:20:35 +01:00
Romain Vimont
bdba554118
Use Java lambdas where possible
2023-01-27 22:16:36 +01:00
Romain Vimont
234ad7ee78
Support Java lambdas in build_without_gradle.sh
...
Building Java source code using lambdas requires core-lambda-stubs.jar.
Refs #3657 <https://github.com/Genymobile/scrcpy/issues/3657 >
2023-01-27 22:08:25 +01:00
Romain Vimont
8cbbcc939f
Add missing final modifiers
2023-01-27 22:08:17 +01:00
Romain Vimont
b22810b17c
Use try-with-resources
...
Replace an explicit try-finally by a try-with-resources block.
2023-01-27 21:59:26 +01:00
Romain Vimont
4315be1648
Use random name for device socket
...
For the initial connection between the device and the computer, an adb
tunnel is established (with "adb reverse" or "adb forward").
The device-side of the tunnel is a local socket having the hard-coded
name "scrcpy". This may cause issues when several scrcpy instances are
started in a few seconds for the same device, since they will try to
bind the same name.
To avoid conflicts, make the client generate a random UID, and append
this UID to the local socket name ("scrcpy_01234567").
2023-01-27 21:51:59 +01:00
Romain Vimont
74e3f8b253
Add random util
...
Add a user-friendly tool to generate random numbers.
2023-01-27 19:26:19 +01:00
Romain Vimont
059ec45f82
Add jrand48()/nrand48() compat functions
...
These functions are not available on all platforms.
2023-01-26 18:11:23 +01:00
Romain Vimont
e6cd42355b
Use separate gen dir to build without gradle
...
The generated source files were written to the classes dir. Use a
separate gen dir instead.
2023-01-26 10:44:31 +01:00
Romain Vimont
bf8696d02e
Avoid unnecessary copy on config packets demuxing
...
Use av_packet_ref() to reference the packet without copy.
This also simplifies the logic, by making the "offset" variable and the
memcpy() call local to the if-block.
2023-01-02 16:18:23 +01:00
Romain Vimont
d8c2fe6ef2
Revert "Remove continuous resizing workaround for Windows"
...
This reverts commit 18082f6069
.
I can't reproduce, but it seems the workaround improves the behavior on
some Windows versions.
Fixes #3640 <https://github.com/Genymobile/scrcpy/issues/3640 >
Refs #3458 <https://github.com/Genymobile/scrcpy/issues/3458 >
2022-12-26 12:42:59 +01:00
Romain Vimont
54c7baceac
Use "meson setup" from install_release.sh
...
Refs 64821466a1
2022-12-22 13:07:07 +01:00
Romain Vimont
4c43784fd1
Update links to v1.25
2022-12-22 12:44:01 +01:00
Romain Vimont
fe21158c20
Bump version to 1.25
v1.25
2022-12-22 12:33:29 +01:00
Romain Vimont
8e0c899218
Upgrade FFmpeg (5.1.2) for Windows 64-bit
...
Use the latest version of FFmpeg in Windows 64-bit releases.
2022-12-22 12:33:08 +01:00
Romain Vimont
725a922271
Upgrade SDL (2.26.1) for Windows
...
Include the latest version of SDL in Windows releases.
2022-12-22 12:29:08 +01:00
Romain Vimont
b5773a6fe8
Upgrade platform-tools (33.0.3) for Windows
...
Include the latest version of adb in Windows releases.
2022-12-22 12:29:08 +01:00
Romain Vimont
67fb457dcb
Merge branch 'master' into dev
2022-12-22 12:29:00 +01:00