Romain Vimont
969bfd4374
Serialize clean-up configuration
...
This avoids to pass each option as individual parameter and parse them
manually (it's still "manual" in the Parcelable implementation).
Refs #824 <https://github.com/Genymobile/scrcpy/pull/824#issuecomment-780319422 >
Reviewed-by: Yu-Chen Lin <npes87184@gmail.com>
2021-06-11 09:33:29 +02:00
Romain Vimont
506f918fb7
Group components into struct scrcpy
...
This avoids to refer to many structs globally.
2021-05-28 21:29:14 +02:00
Romain Vimont
6fd7e89da1
Explicitly initialize decoder sink_count
...
The zero-initialization relied on the fact that the decoder instance is
static.
2021-05-28 21:23:18 +02:00
Romain Vimont
4c31911df2
Pass serial within struct server_params
...
This was the only option passed separately.
2021-05-28 21:21:54 +02:00
Romain Vimont
6adc97198b
Provide device info directly on server connection
...
This avoids to retrieve them in a separate step.
2021-05-17 08:52:08 +02:00
Romain Vimont
6a2cd089a1
Initialize input manager dynamically
...
The input manager was partially initialized statically, but a call to
input_manager_init() was needed anyway, so initialize all the fields
from the "constructor".
This is consistent with the initialization of the other structs.
2021-05-17 08:48:51 +02:00
Romain Vimont
dcee7c0f7f
Factorize screen_init() error management
2021-05-16 18:48:04 +02:00
Romain Vimont
e604e8a752
Move fps_counter to screen
...
The FPS counter specifically count frames from the screen video buffer,
so it is specific to the screen.
2021-05-16 18:47:16 +02:00
Romain Vimont
f19c455110
Fix leak on error
...
Destroy video buffer if screen window creation failed.
2021-05-16 18:46:47 +02:00
Romain Vimont
83116fc199
Notify end-of-stream via callback
...
Do not send a SDL event directly, to make stream independent of SDL.
2021-05-16 15:48:07 +02:00
Romain Vimont
1e64f0f931
Use ARRAY_LEN() macro
2021-05-09 11:06:02 +02:00
Romain Vimont
8fb5715740
Add libavdevice-dev in BUILD instructions
...
On Linux, scrcpy now depends on libavdevice for v4l2.
2021-05-09 11:01:16 +02:00
Romain Vimont
f062dfd30b
Merge branch 'master' into dev
2021-05-09 11:00:30 +02:00
Haren S
644a5ef14a
Add MacPorts documentation
...
PR #2299 <https://github.com/Genymobile/scrcpy/pull/2299 >
Signed-off-by: Romain Vimont <rom@rom1v.com>
2021-05-09 10:55:59 +02:00
Romain Vimont
1b9dcce23c
Fix double-free on error
...
On error, server->serial was freed twice: immediately and in
server_destroy().
Refs #2292 <https://github.com/Genymobile/scrcpy/issues/2292#issuecomment-831424820 >
2021-05-03 20:43:45 +02:00
Romain Vimont
233f8e6cc4
Rename keycode injection method
...
Make it explicit that it injects both "press" and "release" events.
2021-04-30 23:07:37 +02:00
Romain Vimont
9a7d351d67
Simplify non-static injectEvent() implementation
...
Just call the static version (having a displayId) from the non-static
version (using the displayId field).
2021-04-30 23:07:37 +02:00
Romain Vimont
d00ee640c0
Simplify Device.java
...
Remove useless intermediate method with a "mode" parameter (it's always
called with the same mode).
This also avoids the need for a specific injectEventOnDisplay() method,
since it does not conflict with another injectEvent() method anymore.
2021-04-30 23:07:29 +02:00
Romain Vimont
ae6ec7a194
Unref decoder AVFrame immediately
...
The frame can be unref immediately after it is pushed to the frame
sinks.
It was not really a memory leak because the frame was unref every time
by avcodec_receive_frame() (and freed on close), but a reference was
unnecessarily kept for too long.
2021-04-26 18:05:43 +02:00
Romain Vimont
84f17fdeab
Fix v4l2 AVPacket memory leak on error
...
Unref v4l2 AVPacket even if writing failed.
2021-04-26 18:05:11 +02:00
Romain Vimont
1cde68a1fa
Fix v4l2 AVFrame memory leak
...
Unref frame immediately once encoded.
Fixes #2279 <https://github.com/Genymobile/scrcpy/pull/2279 >
2021-04-26 18:04:51 +02:00
Romain Vimont
45e7280148
Rename --v4l2_sink to --v4l2-sink
...
This was a rebase issue, the previous version in #2268 was correct.
Refs #2268 <https://github.com/Genymobile/scrcpy/pull/2268 >
2021-04-26 17:59:35 +02:00
Romain Vimont
41a0383d7c
Document v4l2 sink in README
2021-04-25 15:00:56 +02:00
Marco Martinelli
d39161f753
Add support for v4l2loopback
...
It allows to send the video stream to /dev/videoN, so that it can be
captured (like a webcam) by any v4l2-capable tool.
PR #2232 <https://github.com/Genymobile/scrcpy/pull/2232 >
PR #2233 <https://github.com/Genymobile/scrcpy/pull/2233 >
PR #2268 <https://github.com/Genymobile/scrcpy/pull/2268 >
Co-authored-by: Romain Vimont <rom@rom1v.com>
2021-04-25 14:59:10 +02:00
Romain Vimont
5af9d0ee0f
Make --lock-video-orientation argument optional
...
If the option is set without argument, lock the initial device
orientation (as if the value "initial" was passed).
2021-04-25 14:55:54 +02:00
Romain Vimont
fd0dc6c0cd
Add --lock-video-orientation=initial
...
Add a new mode to the --lock-video-orientation option, to lock the
initial orientation of the device.
This avoids to pass an explicit value (0, 1, 2 or 3) and think about
which is the right one.
2021-04-25 14:55:54 +02:00
Romain Vimont
151bc16644
Use strlist_contains() to find a muxer
...
The AVOutputFormat name is a string list: it contains names separated by
',' (possibly only one).
2021-04-25 14:55:19 +02:00
Romain Vimont
ffc00210e9
Add strlist_contains()
...
Add a function to know if a string list, using some separator, contains
a specific string.
2021-04-25 14:38:42 +02:00
Romain Vimont
243854a408
Fix recorder comment
2021-04-25 14:38:42 +02:00
Romain Vimont
8b90dc61b9
Handle EAGAIN on send_packet in decoder
...
EAGAIN was only handled on receive_frame.
In practice, it should not be necessary, since one packet always
contains one frame. But just in case.
2021-04-25 14:38:42 +02:00
Romain Vimont
2a5dfc1c17
Handle errors using gotos in recorder_open()
...
There are many initializations in recorder_open(). Handle RAII-like
deinitialization using gotos.
2021-04-25 14:38:42 +02:00
Romain Vimont
e3fccc5a5e
Initialize recorder fields on open
...
Only initialize ops and parameters copy from recorder_init(). It was
inconsistent to initialize some fields from _init() and some others from
_open().
2021-04-25 14:38:42 +02:00
Romain Vimont
0541f1bff2
Hide the window immediately on close
...
The screen may not be destroyed immediately on close to avoid undefined
behavior, because it may still receive events from the decoder.
But the visual window must still be closed immediately.
2021-04-25 14:38:42 +02:00
Romain Vimont
0272e6dc77
Assert screen closed on destroy
...
The destruction order is important, but tricky, because the screen is
open/close by the decoder, but destroyed by scrcpy.c on the main thread.
Add assertions to guarantee that the screen is not destroyed before
being closed.
2021-04-25 14:38:42 +02:00
Romain Vimont
2a94a2b119
Remove video_buffer callbacks
...
Now that screen is both the owner and the listener of the video buffer,
execute the code directly without callbacks.
2021-04-25 14:38:42 +02:00
Romain Vimont
e91acdb0c4
Move video_buffer to screen
...
The video buffer is now an internal detail of the screen component.
Since the screen is plugged to the decoder via the frame sink trait, the
decoder does not access to the video buffer anymore.
2021-04-25 14:38:42 +02:00
Romain Vimont
6f5ad21f57
Make decoder push frames to sinks
...
Now that screen implements the packet sink trait, make decoder push
packets to the sinks without depending on the concrete sink types.
2021-04-25 14:38:42 +02:00
Romain Vimont
08b3086ffc
Expose screen as frame sink
...
Make screen implement the frame sink trait.
This will allow the decoder to push frames without depending on the
concrete sink type.
2021-04-25 14:38:42 +02:00
Romain Vimont
deab7da761
Add frame sink trait
...
This trait will allow to abstract the concrete sink types from the frame
producer (decoder.c).
2021-04-25 14:38:42 +02:00
Romain Vimont
f7a1b67d66
Make stream push packets to sinks
...
Now that decoder and recorder implement the packet sink trait, make
stream push packets to the sinks without depending on the concrete sink
types.
2021-04-25 14:38:42 +02:00
Romain Vimont
cbed38799e
Expose decoder as packet sink
...
Make decoder implement the packet sink trait.
This will allow the stream to push packets without depending on the
concrete sink type.
2021-04-25 14:38:42 +02:00
Romain Vimont
5beb7d6c02
Reorder decoder functions
...
This will make further commits more readable.
2021-04-25 14:38:42 +02:00
Romain Vimont
5980183a33
Expose recorder as packet sink
...
Make recorder implement the packet sink trait.
This will allow the stream to push packets without depending on the
concrete sink type.
2021-04-25 14:38:42 +02:00
Romain Vimont
fe8de893ca
Privatize recorder threading
...
The fact that the recorder uses a separate thread is an internal detail,
so the functions _start(), _stop() and _join() should not be exposed.
Instead, start the thread on _open() and _stop()+_join() on close().
This paves the way to expose the recorder as a packet sink trait.
2021-04-25 14:38:42 +02:00
Romain Vimont
a974483c15
Reorder recorder functions
...
This will make further commits more readable.
2021-04-25 14:38:42 +02:00
Romain Vimont
1b072a24c4
Add packet sink trait
...
This trait will allow to abstract the concrete sink types from the
packet producer (stream.c).
2021-04-25 14:38:42 +02:00
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