Romain Vimont
b7ad652a75
Move empty string test for crop option parsing
...
For consistency with other options.
2023-10-26 22:42:46 +02:00
Romain Vimont
a7c3c9a54c
Make fillBaseContext() method private
...
This is consistent with fillAppInfo() and fillAppContext(), which are
also private.
2023-08-22 20:10:06 +02:00
Romain Vimont
111d02fca4
Add missing 'final' in Java classes
...
For consistency.
2023-08-22 18:52:29 +02:00
Romain Vimont
d391fc3b69
Bump version to 2.1.1
2023-07-14 18:58:58 +02:00
Romain Vimont
7e936fa879
Fix meizu deadlock
...
Some devices (Meizu) assume that the video encoding thread has a
Looper. By moving video encoding to a separate thread, commit
feab87053abcceded41342d9d856763dedc09187 broke this assumption.
Call Looper.prepare() from this thread to fix the problem.
Fixes #4143 <https://github.com/Genymobile/scrcpy/issues/4143 >
2023-07-13 21:46:50 +02:00
Romain Vimont
01d785d9a3
Increase attempts to start AudioRecord
...
Making the shell app foreground (specific for Android 11) may take more
than 300ms on some devices, so increase the number of attempts from 3 to
5 (separated by 100ms).
Fixes #4147 <https://github.com/Genymobile/scrcpy/issues/4147 >
Refs #3796 <https://github.com/Genymobile/scrcpy/issues/3796 >
Refs 02f4ff7534649153d6f87b05a0757431a2d0ee5f
2023-07-07 18:21:17 +02:00
Romain Vimont
808bd14e30
Ignore fold change events for other display ids
...
Scrcpy mirrors a specific display id, it must ignore events for other
display ids.
Fixes #4120 <https://github.com/Genymobile/scrcpy/issues/4120 >
2023-06-27 18:43:22 +02:00
Romain Vimont
0049b3ce07
Remove superfluous log
...
This line was committed by error in commit
a52053421abee7c96b1071a06cb68bbeac2fd464.
2023-06-23 08:23:29 +02:00
Romain Vimont
2dab1f7024
Bump version to 2.1
2023-06-22 01:15:44 +02:00
Romain Vimont
b9315620e2
Fix adb forward initialization
...
In forward mode, the dummy byte must be written immediately after the
first accept(), otherwise the client will wait indefinitely, causing a
deadlock (or a timeout).
Regression introduced by 8c650e53cd37a53d5c3aa746c30a71c6b742a4e2.
2023-06-22 01:13:53 +02:00
Romain Vimont
0ffcfa0f5c
Accept failure in rotation or fold registration
...
Do not make scrcpy fail if rotation or display fold listeners could not
be registered.
2023-06-22 00:52:54 +02:00
Romain Vimont
c0f3c080b6
Register DisplayFoldListener only for Android 10+
...
This listener does not exist on Android < 10, and it makes scrcpy fail.
2023-06-22 00:49:11 +02:00
Romain Vimont
5061b7e02c
Fix build without gradle
...
Add missing class generation from IDisplayFoldListener.aidl.
Refs 24999d0d32daf50246168dde212f01cf109569f9
2023-06-22 00:03:26 +02:00
Romain Vimont
fb21bbf763
Add workarounds for Honor devices
...
Audio did not work on Honor devices.
To make it work, a system context must be set as a base context of
FakeContext (so that a PackageManager is available), and a current
Application and ActivityThread must be set.
These workarounds must not be applied for all devices, because they
might cause other issues.
Fixes #4015 <https://github.com/Genymobile/scrcpy/issues/4015 >
Refs #3085 <https://github.com/Genymobile/scrcpy/issues/3805 >
Co-authored-by: Simon Chan <1330321+yume-chan@users.noreply.github.com>
2023-06-19 18:45:40 +02:00
Romain Vimont
0f1afff7a6
Move workarounds execution
...
Expose a single public static method in the Workarounds class to apply
all necessary workarounds.
2023-06-19 18:45:11 +02:00
Romain Vimont
48a00fb481
Log device BRAND
...
The BRAND value is not always the same as the MANUFACTURER value.
2023-06-17 00:25:01 +02:00
Romain Vimont
3b7e2ca9c8
Fix lint warning
...
Suppress lint "DiscouragedPrivateApi" in Workarounds.java.
2023-06-16 23:24:08 +02:00
wuderek
5bd7514871
Add InputManagerGlobal for Android 14 beta 3
...
Parts of the InputManager class have been moved to a new
InputManagerGlobal class in Android 14 preview.
Fixes #4074 <https://github.com/Genymobile/scrcpy/issues/4074 >
PR #4075 <https://github.com/Genymobile/scrcpy/pull/4075 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2023-06-13 15:19:24 +02:00
Romain Vimont
7536f95d1c
Rename raw_video_stream to raw_stream
...
This server-specific option impacts both the video and audio streams.
2023-06-10 12:09:43 +02:00
Romain Vimont
6832e8d629
Remove spurious empty line
2023-06-10 12:07:35 +02:00
Romain Vimont
28313631e5
Reformat Java code
...
Fix code style.
2023-06-09 22:28:01 +02:00
Romain Vimont
fdbc9397a7
Name Java threads
...
Give a user-friendly name to Java threads created by the server.
2023-06-09 22:27:35 +02:00
Romain Vimont
ff5ffc892f
Add option to select audio source
...
Pass --audio-source=mic to capture the microphone instead of the device
audio output.
2023-06-01 09:21:09 +02:00
Romain Vimont
360f2fea1e
Extract AudioCapture creation
...
This will allow to pass capture options without code duplication.
2023-06-01 09:21:09 +02:00
Adonis Najimi
24999d0d32
Reset video capture on folding event
...
Handle folding event the same way as rotation events.
Fixes #3960 <https://github.com/Genymobile/scrcpy/issues/3960 >
PR #3979 <https://github.com/Genymobile/scrcpy/pull/3979 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2023-06-01 09:20:00 +02:00
Romain Vimont
8e2c0d6407
Rename rotationChanged to resetCapture
...
The flag is used to reset the capture (restart the encoding) on rotation
change. It will also be used for other events (on folding change), so
rename it.
PR #3979 <https://github.com/Genymobile/scrcpy/pull/3979 >
2023-06-01 09:20:00 +02:00
Simon Chan
cab354102d
Create AudioRecord by reflection as a fallback
...
Some devices (Vivo phones) fail to create an AudioRecord from an
AudioRecord.Builder (which throws a NullPointerException).
In that case, create an AudioRecord instance directly by reflection.
The AOSP version of AudioRecord constructor code can be found at:
- Android 11 (R):
<https://cs.android.com/android/platform/superproject/+/android-11.0.0_r1:frameworks/base/media/java/android/media/AudioRecord.java;l=335;drc=64ed2ec38a511bbbd048985fe413268335e072f8 >
- Android 12 (S):
<https://cs.android.com/android/platform/superproject/+/android-12.0.0_r1:frameworks/base/media/java/android/media/AudioRecord.java;l=388;drc=2eebf929650e0d320a21f0d13677a27d7ab278e9 >
- Android 13 (T, functionally identical to Android 12):
<https://cs.android.com/android/platform/superproject/+/android-13.0.0_r1:frameworks/base/media/java/android/media/AudioRecord.java;l=382;drc=ed242da52f975a1dd18671afb346b18853d729f2 >
- Android 14 (U): Not released, but expected to change
PR #3862 <https://github.com/Genymobile/scrcpy/pull/3862 >
Fixes #3805 <https://github.com/Genymobile/scrcpy/issues/3805 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2023-05-26 18:56:43 +02:00
Romain Vimont
597d2ccc01
Rename FORMAT to ENCODING
...
The AudioFormat contains several properties. This specific value is
named "encoding".
2023-05-24 22:13:09 +02:00
Romain Vimont
38900d7730
Extract audio source to a static constant
...
For consistency with the other parameters.
2023-05-24 22:13:09 +02:00
Romain Vimont
8c650e53cd
Add --no-video
...
Similar to --no-audio, add --no-video to play audio only.
Fixes #3842 <https://github.com/Genymobile/scrcpy/issues/3842 >
PR #3978 <https://github.com/Genymobile/scrcpy/pull/3978 >
2023-05-08 17:11:34 +02:00
Romain Vimont
feab87053a
Convert screen encoder to async processor
...
Contrary to the other tasks (controller and audio capture/encoding), the
screen encoder was executed synchronously. As a consequence,
scrcpy-server could not terminate until the screen encoder returned.
Convert it to an async processor. This allows to terminate on controller
error, and this paves the way to disable video mirroring.
PR #3978 <https://github.com/Genymobile/scrcpy/pull/3978 >
2023-05-08 16:41:09 +02:00
Romain Vimont
751a3653a0
Add missing @Override annotations
...
PR #3978 <https://github.com/Genymobile/scrcpy/pull/3978 >
2023-05-08 16:41:06 +02:00
Romain Vimont
9c08eb79cb
Close connection at the end of finally-block
...
The async processors use the socket file descriptors from the
connection. Therefore, the connection must not be closed before all
async processor threads are joined.
PR #3978 <https://github.com/Genymobile/scrcpy/pull/3978 >
2023-05-08 16:41:04 +02:00
Romain Vimont
9cfea347d0
Remove Options setters
...
Now that options parsing is performed from the Options class, setters
are not necessary anymore.
2023-04-09 20:02:39 +02:00
Romain Vimont
ce064fb5e0
Move options parsing to Options class
2023-04-09 20:02:39 +02:00
Romain Vimont
afcdfc7fd7
Fix checkstyle violation
...
Checkstyle reported this error:
[ant:checkstyle] [ERROR] AudioCapture.java:89:145: '+' should be on
a new line. [OperatorWrap]
2023-04-09 20:01:58 +02:00
Simon Chan
fdf465851c
Add Android version check in raw audio recorder
...
Do not attempt to capture audio below Android 11, this may cause a
segfault on the device.
PR #3889 <https://github.com/Genymobile/scrcpy/pull/3889 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2023-04-04 18:37:30 +02:00
Romain Vimont
f77e1c474e
Fix copy-paste for some devices
...
On Honor Magic 5 Pro, the method to get the clipboard content has been
modified in the framework.
Adapt the call to make it work also on this device.
Fixes #3885 <https://github.com/Genymobile/scrcpy/issues/3885 >
2023-04-01 11:52:37 +02:00
Romain Vimont
2fff9b9edf
Adapt FakeContext for Android 14
...
This fixes audio for Android 14 developer preview 2.
Fixes #3784 <https://github.com/Genymobile/scrcpy/issues/3784 >
Suggested-by: Namelesswonder <Namelesswonder@users.noreply.github.com>
2023-03-20 08:40:34 +01:00
Romain Vimont
57f879d68a
Adapt clipboard wrappers to Android 14
...
A new deviceId parameter has been added.
Fixes #3784 <https://github.com/Genymobile/scrcpy/issues/3784 >
2023-03-20 08:40:25 +01:00
Romain Vimont
3626d90004
Use separate audio capture code for Android 11
...
The code to start audio capture is more complicated for Android 11
(launch a fake popup, wait, make several attempts, close the shell
package).
Use a distinct code path specific to Android 11.
2023-03-17 21:30:04 +01:00
Romain Vimont
02f4ff7534
Make 3 attempts to start AudioRecord
...
On Android 11, a fake popup must be briefly opened to make the system
think that the shell app is in the foreground so that audio may be
recorded.
Making the shell app foreground may take some time depending on the
device, so make 3 attempts, waiting 100ms before each.
Fixes #3796 <https://github.com/Genymobile/scrcpy/issues/3796 >
2023-03-17 21:30:04 +01:00
Romain Vimont
a3871130cc
List available encoders on failure
...
When the creation of an encoder fails, log an explicit error message
with the list of available encoders.
2023-03-17 21:29:45 +01:00
Romain Vimont
d7841664f4
Simplify logic in setScreenPowerMode()
...
Refs <f2dee20a20 (r104417398)
>
Suggested-by: brunoais <brunoaiss@gmail.com>
2023-03-15 19:53:58 +01:00
Romain Vimont
6ba99a62ff
Split workarounds to fix audio on some devices
...
There were several workarounds applied in a single method. Some of them
are specific to Meizu phones, but cause issues on other devices.
Split the method to be able to only fill the app context for audio
capture without applying the Meizu workarounds.
Fixes #3801 <https://github.com/Genymobile/scrcpy/issues/3801 >
2023-03-14 23:23:57 +01:00
Romain Vimont
337d6c2fd3
Fail on empty AudioRecord read()
...
If read() returns 0, then there is no data. According to the
documentation, it happens if the buffer is not a direct buffer:
<https://developer.android.com/reference/android/media/AudioRecord#read(java.nio.ByteBuffer,%20int) >
Refs #3812 <https://github.com/Genymobile/scrcpy/issues/3812 >
2023-03-14 19:27:11 +01:00
Romain Vimont
f1b2d6bbbb
Bump version to 2.0
2023-03-12 02:05:37 +01:00
Romain Vimont
2380879376
Remove unused IOException
...
IOException may not be thrown from this method.
2023-03-12 02:04:58 +01:00
Romain Vimont
238ab872ba
Pass video size as codec metadata
...
On initial connection, scrcpy sent some device metadata:
- the device name (to be used as window title)
- the initial video size (before any frame or even SPS/PPS)
But it is better to provide the initial video size as part as the video
stream, so that it can be demuxed and exposed via AVCodecContext to
sinks.
This avoids to pass an explicit "initial frame size" for the screen, the
recorder and the v4l2 sink.
2023-03-11 15:57:25 +01:00
Romain Vimont
aa1efbc35c
Rename sendCodecId to sendCodecMeta
...
This will allow the codec header to contain more than the codec id.
2023-03-11 15:57:25 +01:00