Sebastian Dröge
d6fa921822
fmp4mux: Use saturing_sub() in more places
...
On unclean input, PTS/DTS might go backwards a bit and in those cases
calculate a duration of 0 instead of panicking.
2022-05-20 15:03:06 +03:00
Sebastian Dröge
6bca5a9962
fmp4mux: Implement interleaving based on start timestamps instead of accumulated durations
...
Durations might accumulate rounding errors and streams might not
actually start at the same time. For that reason also start with the
stream that has the lowest timestamp.
2022-05-20 15:03:06 +03:00
Sebastian Dröge
d7bd4c1c93
fmp4mux: Implement handling of GAP events
2022-05-20 15:03:04 +03:00
Sebastian Dröge
987e4efc02
fmp4mux: In live pipelines use the current fragment end time as timeout
...
This allows muxing even if some streams are sparse or have big gaps.
2022-05-20 15:02:46 +03:00
Sebastian Dröge
ffea0e2d2d
fmp4mux: Add support for ONVIF timed XML metadata
2022-05-19 17:55:07 +03:00
Sebastian Dröge
e4634ca2fe
fmp4mux: Add ONVIF variant with support for additional codecs
...
This variant supports H264/5, JPEG, alaw, mulaw and G726.
2022-05-19 17:55:07 +03:00
Sebastian Dröge
0206178279
fmp4mux: Check for force-keyunit events on both pads in the multistream test
2022-05-19 17:55:07 +03:00
Sebastian Dröge
4bc0ae09fa
fmp4mux: Use saturing subtraction to calculate sample durations
...
PTS/DTS might go backwards if the input is borderline broken but that
shouldn't cause a panic.
2022-05-13 10:54:23 +00:00
Sebastian Dröge
cfb59100d6
fmp4mux: Add test for muxing of multiple streams
2022-05-12 18:31:02 +03:00
Sebastian Dröge
e06665b92d
fmp4mux: Add support for multiple input streams
2022-05-12 18:31:02 +03:00
Sebastian Dröge
31a32a7e2e
fmp4mux: Add support for writing out multiple tracks in the serialization code
...
Not yet exposed from the element.
2022-05-12 18:31:02 +03:00
Sebastian Dröge
c09b7b9e41
fmp4mux: Port to aggregator as base class as preparation for supporting multiple streams
2022-05-12 18:31:02 +03:00
Sebastian Dröge
23cc00ce4b
fmp4mux: Write sample flags in tfhd
if there's only a single sample
...
Instead of declaring them to be in the `tfhd` but not writing them into
the `tfhd` but also not the `trun`.
2022-05-12 18:31:02 +03:00
Mathieu Duponchelle
943a138d49
ts-jitterbuffer: set jbuf delay when instantiating it
...
The internal (C) jitterbuffer needs to know about the configured
latency when calculating a PTS, as it otherwise may consider that
the packet is too late, trigger a resync and cause the element to
discard the packet altogether.
I could not identify when this was broken, but the net effect was
that in the current state, ts-jitterbuffer was discarding up to
half of all the incoming packets.
2022-05-11 06:29:22 +00:00
Sebastian Dröge
2f16b5dd3e
threadshare: Use into_glib_ptr()
instead of into_ptr()
2022-05-08 13:31:10 +03:00
Julien Vary
f908cbaffd
fmp4mux: adding headers when data resumes after EOS
2022-04-28 11:39:55 -04:00
Tim-Philipp Müller
90c203857a
threadshare: fix build on Windows
2022-04-27 00:13:46 +01:00
Sebastian Dröge
9e3f713aa9
Update to m3u8-rs 4.0
2022-04-14 07:41:18 +00:00
Vivia Nikolaidou
b5a3a99825
m3u8-rs: Depend on version exactly 3.0.0
...
https://github.com/rutgersc/m3u8-rs/pull/46#issuecomment-1094867533
2022-04-11 13:22:44 +03:00
Sebastian Dröge
5af52f94a8
threadshare: Remove glib::SendUnique usage
...
It's being removed from the GLib bindings because it does not add much
value.
2022-04-09 08:41:58 +00:00
Sebastian Dröge
803e452889
Update minimum supported GStreamer version to 1.14
2022-04-07 12:41:54 +03:00
François Laignel
59ca466081
ts: log max throttling when creating Context
2022-03-28 08:47:32 +00:00
François Laignel
1ef9ae6398
ts/jitterbuffer: don't wake up immediately...
...
... when next wakeup delay is shorter than the max throttling duration.
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/169
2022-03-28 08:47:32 +00:00
François Laignel
8eb8ea0e7d
ts/rt/Task: use light weight executor blocking on ack or join handle
...
Previous version used the Context::block_on_or_add_sub_task which
spawns a full-fledged executor with timer and io Reactor for no
reason when we just need to wait for a Receiver or JoinHandle.
2022-03-28 08:47:32 +00:00
François Laignel
c1615d01e6
ts/rt/Task: awake the iteration loop when it needs to be aborted
...
When the iteration loop is throttling, the call to `abort` on the
`loop_abort_handle` returns immediately, but the actual `Future`
for the iteration loop is aborted only when the scheduler throttling
completes. State transitions which requires the loop to be aborted &
which are serialized at the pipeline level can incur long delays.
This commit makes sure the Task Context's scheduler is awaken as soon
as the task loop is aborted.
2022-03-28 08:47:32 +00:00
François Laignel
97985d6442
ts/examples: add rtp mode with jitter-buffer & trace stop duration
2022-03-28 08:47:32 +00:00
Sebastian Dröge
6cf7d28481
Use SPDX license format in Cargo.toml
2022-03-14 10:23:16 +02:00
Mathieu Duponchelle
526f34d98b
fmp4mux: HLS live example
...
Producing two audio playlists, a video playlist and a super
manifest, and implementing basic trimming of old segments.
2022-03-02 10:01:38 +00:00
Mathieu Duponchelle
35d9247487
fmp4mux: HLS VOD example
...
Producing two audio playlists, a video playlist and a super
manifest
2022-03-02 10:01:38 +00:00
Sebastian Dröge
b38f6cc731
Remove now unnecessary Send+Sync
impls for element/etc subclasses
...
This is now automatically implemented.
2022-02-28 18:56:58 +02:00
François Laignel
72d9d3dc58
generic/threadshare: fix for nightly build
2022-02-22 00:18:28 +01:00
François Laignel
2cf84d5ce8
Update minimum supported Rust version to 1.57
2022-02-21 23:32:32 +01:00
François Laignel
422ea740ca
Update to gst::_log_macro_
...
See the details:
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/980
2022-02-21 20:50:01 +01:00
Sebastian Dröge
65fcd55160
Update for event/message/query view API changes
2022-01-19 15:07:45 +02:00
Sebastian Dröge
b2d0172422
Replace Foo::from_instance(foo)
with foo.imp()
2022-01-17 19:36:41 +02:00
Sebastian Dröge
51f8e963d6
Add SPDX-License-Identifier to all file headers
2022-01-15 21:18:47 +02:00
Sebastian Dröge
0c7764fa40
Update versions to 0.9.0
2022-01-15 20:33:49 +02:00
Sebastian Dröge
ab14c50d1c
Ignore clippy::non_send_fields_in_send_ty
lint
...
It's useless in its current shape and wrongly triggering on all types.
See https://github.com/rust-lang/rust-clippy/issues/8045
2022-01-14 12:09:57 +02:00
Sebastian Dröge
81f5f0f60c
Fix various clippy warnings
2022-01-12 19:51:08 +02:00
François Laignel
64dd588734
ts/runtime/scheduler: check must_awake before sleeping
2022-01-05 19:00:00 +01:00
François Laignel
1573522520
ts/runtime: rewrite runnable loop
...
Previous version relied on a plain loop / match / break because
I experimented different strategies. The while variant is better
for the final solution.
2022-01-05 18:59:43 +01:00
Sebastian Dröge
e2ecd77654
sodium: Port examples to clap 3
2022-01-02 09:13:55 +00:00
François Laignel
5e4fc8b138
ts/executor: relax the static bound on enter
...
The function `enter` is executed in a blocking way from the caller's
point of view. This means that we can guaranty that the provided
function and its output will outlive the underlying Scheduler Task
execution. This requires an unsafe call to
`async_task::spawn_unchecked`. See:
https://docs.rs/async-task/latest/async_task/fn.spawn_unchecked.html
2021-12-25 11:25:56 +00:00
François Laignel
6163589ac7
ts/executor: replace tokio with smol-like implementation
...
The threadshare executor was based on a modified version of tokio
which implemented the throttling strategy in the BasicScheduler.
Upstream tokio codebase has significantly diverged from what it
was when the throttling strategy was implemented making it hard
to follow. This means that we can hardly get updates from the
upstream project and when we cherry pick fixes, we can't reflect
the state of the project on our fork's version. As a consequence,
tools such as cargo-deny can't check for RUSTSEC fixes in our fork.
The smol ecosystem makes it quite easy to implement and maintain
a custom async executor. This MR imports the smol parts that
need modifications to comply with the threadshare model and implements
a throttling executor in place of the tokio fork.
Networking tokio specific types are replaced with Async wrappers
in the spirit of [smol-rs/async-io]. Note however that the Async
wrappers needed modifications in order to use the per thread
Reactor model. This means that higher level upstream networking
crates such as [async-net] can not be used with our Async
implementation.
Based on the example benchmark with ts-udpsrc, performances seem on par
with what we achieved using the tokio fork.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/118
Related to https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/604
2021-12-25 11:25:56 +00:00
François Laignel
db9c38aa93
ts/runtime: shuffle some structs to dedicated modules
2021-12-25 11:25:56 +00:00
François Laignel
c5ef83d5b0
ts/runtime: use a directory for executor module
...
This will ease the introduction of other concepts which are required
for our own executor implementation.
2021-12-25 11:25:56 +00:00
François Laignel
cd0773662f
ts: migrate most tests so that they don't use tokio
2021-12-25 11:25:56 +00:00
Guillaume Desmottes
bba26a9cf5
threadshare: remove unused import
2021-12-22 15:43:32 +01:00
Sebastian Dröge
66e987c174
Fix a couple of new clippy warnings
2021-12-02 22:31:52 +02:00
Sebastian Dröge
13923051a0
Fix compilation after gst::Pad::sticky_events_foreach
API changes
2021-12-01 15:33:45 +02:00
Sebastian Dröge
c46901d150
Fix or silence various new 1.57 clippy warnings
2021-11-30 16:31:50 +02:00
Sebastian Dröge
86f422592b
Update for glib::Enum
/ glib::Boxed
/ glib::flags!
macro renames
2021-11-22 11:04:26 +02:00
Sebastian Dröge
c68f6b2631
Update for GLib signal emit_by_name()
API changes
2021-11-21 18:15:04 +02:00
Sebastian Dröge
55aad51141
Update for glib constructor renames
...
See https://github.com/gtk-rs/gtk-rs-core/pull/384
2021-11-20 14:31:06 +02:00
François Laignel
53bfb58751
ts: update tokio fork for RUSTSEC-2021-0124
...
A data race condition was discovered in tokio, which can lead
to memory corruption. This vulnerability affects our fork.
See:
- https://rustsec.org/advisories/RUSTSEC-2021-0124
- https://github.com/tokio-rs/tokio/issues/4225
- https://github.com/tokio-rs/tokio/pull/4226
- https://github.com/fengalin/tokio/pull/1
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/174
2021-11-17 14:51:03 +01:00
Sebastian Dröge
e3fbf2078d
Add new fmp4 plugin with muxers for ISO fragmented MP4, DASH and CMAF containers
2021-11-15 14:04:03 +02:00
Bilal Elmoussaoui
82be7b3ac5
adapt to ObjectExt improvements
2021-11-08 14:43:53 +02:00
Sebastian Dröge
d9bda62a47
Update for GLib/GStreamer API changes
...
And clean up a lot of related property/caps/structure code.
2021-11-06 09:34:10 +02:00
Sebastian Dröge
0a7d1639e7
Update to Rust edition 2021 and minimum supported Rust version to 1.56
2021-10-31 17:40:05 +02:00
Sebastian Dröge
b9541b2ca4
Update for GstObjectImpl API change
2021-10-23 12:31:33 +03:00
François Laignel
27b9f0d868
Improve usability thanks to opt-ops
...
The crate option-operations simplifies usage when dealing with
`Option`s, which is often the case with `ClockTime`.
2021-10-18 15:09:47 +02:00
Sebastian Dröge
6ec98ec5e4
Update to pretty-assertions 1.0
2021-10-14 10:20:19 +03:00
François Laignel
ed90b338f8
ts: runtime: add delay_for_at_least
...
The time driver for the threadshare runtime assigns the timer
entries to the nearest throttling time frame so that the timer
fires as close as possible to the expected instant. This means
that the timer might fire before or after the expected instant
(at most `wait / 2` away).
In some cases, we don't want the timer to fire early. The new
function `delay_for_at_least` ensures that the timer is assigned
to the time frame after the expected instant.
2021-09-30 09:00:05 +02:00
Sebastian Dröge
848b296390
Add capi feature to all plugin crates
...
This fixes the build with cargo-c 0.9.2.
2021-08-11 20:51:36 +03:00
Sebastian Dröge
052365ba1a
Fix various needless-borrow clippy warnings and others
2021-07-30 13:53:35 +03:00
Ruben Gonzalez
54d8c5f6a9
Delete minimum GStremer required version for some plugins
...
Tested building the pluging with cargo-c and running gst-inspect-1.0
in a Ubuntu Xenial 18.04 LTS. It contains GStreamer 1.8.3.
2021-07-20 21:49:24 +02:00
Sebastian Dröge
24ec79cd1a
Update versions to 0.8.0 for the master branch
2021-07-09 13:49:33 +03:00
Sebastian Dröge
1c3ae0f89a
Update versions to 0.7.0
2021-07-09 13:49:21 +03:00
François Laignel
5439f14e57
fix clippy warnings
2021-06-05 10:36:22 +02:00
François Laignel
8f81cb8812
generic: migrate to new ClockTime design
2021-06-05 10:36:21 +02:00
François Laignel
8dfc872544
use gst::glib where applicable
2021-06-03 20:53:16 +02:00
Sebastian Dröge
94f75c29a1
threadshare: Use appsink callbacks instead of signals in the tests
2021-05-31 10:33:50 +03:00
Sebastian Dröge
04a60b8f46
Update repository URL for gtk-rs "core" crates
2021-05-13 09:50:08 +03:00
Sebastian Dröge
97b6a9099f
file: Don't use Url::into_string() anymore but the generic Into trait
...
The former is deprecated now.
2021-05-08 09:41:30 +03:00
Sebastian Dröge
ee0b2e79da
threadshare: Fix compilation after cleanup in the glib bindings
2021-05-07 10:24:45 +03:00
Bilal Elmoussaoui
78d9fb521d
rename ToGlib into IntoGlib
2021-04-27 20:45:47 +02:00
Sebastian Dröge
15cf738616
Update for Value trait refactoring
2021-04-25 15:48:55 +03:00
François Laignel
95cdd43f4f
manual fixes remove get prefix round 2
2021-04-20 18:19:58 +02:00
François Laignel
67c5871957
fix-getters-calls 0.3.0 pass
2021-04-20 18:19:58 +02:00
François Laignel
27bc5c89ca
fix-getters-def 0.3.0 pass
2021-04-20 18:19:58 +02:00
François Laignel
c81213b83c
clippy pass
2021-04-13 17:24:20 +02:00
François Laignel
7d17f88941
post fix-getters manual updates
2021-04-13 17:24:20 +02:00
François Laignel
06accc8d98
fix-getters-{def,calls} pass
2021-04-12 15:57:19 +02:00
Sebastian Dröge
5e89d345d8
sodium: Pass &Path instead of &PathBuf
2021-03-25 20:26:15 +02:00
Sebastian Dröge
b919d226b1
threadshare: Update to socket2 0.4
2021-03-21 12:57:10 +02:00
Sebastian Dröge
2cada57efc
Update for the subclassing glib/gstreamer bindings API changes
2021-03-09 17:07:13 +02:00
Sebastian Dröge
aa354058f5
Update pretty-assertions to 0.7, async-tungstenite to 0.13 and num-rational to 0.4
...
Also get rid of the funty workaround as nom now depends on the right
version.
2021-03-09 11:42:33 +02:00
Sebastian Dröge
39a75632c8
threadshare: Update for glib subclass API cleanups
2021-03-08 12:50:03 +02:00
Sebastian Dröge
dc0c5f7611
Update for new #[glib::object_subclass] attribute macro
2021-03-07 18:27:00 +02:00
Sebastian Dröge
5dd0a23986
threadshare: Update for glib::Type API changes
2021-02-25 13:12:12 +02:00
Sebastian Dröge
0616c18703
Update for changed GLib signals API
2021-02-22 17:20:40 +02:00
Sebastian Dröge
cbda137fbf
Fix various warnings from clippy 1.50
2021-02-09 18:57:34 +02:00
Sebastian Dröge
b649e9b076
Use gst::PARAM_FLAG_MUTABLE_PLAYING and others consistently everywhere
...
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/139
2021-01-31 15:43:00 +02:00
Sebastian Dröge
d4ce1a33f2
Update for glib/gstreamer bindings API changes
2021-01-25 14:43:05 +02:00
Sebastian Dröge
84896e6468
Update to rand 0.8
2021-01-09 12:34:42 +02:00
Guillaume Desmottes
8bc2e5ebb8
use cargo-c to produce cdy and static libs
...
cargo-c will produce a pkg-config file making it easier to statically
link plugins.
Also add 'static' features for plugins depending on < 1.14 as this is the
minimal required version to use static linking because of ABI changes in
core.
2021-01-04 12:26:45 +01:00
Marijn Suijten
1a7c4c14cc
Fix clippy::redundant_pattern_matching
2021-01-02 17:55:06 +01:00
Sebastian Dröge
38ecd43074
Use typed integer literals instead of casting
2020-12-29 17:29:46 +02:00
Sebastian Dröge
7e1181ab84
threadshare: Return a proper error type instead of ()
2020-12-29 17:29:27 +02:00
Sebastian Dröge
3d617371af
Update for macro renames
2020-12-20 20:43:45 +02:00
Sebastian Dröge
ea6c05e16c
Update everything for glib macro renamings
2020-12-18 00:44:49 +02:00
Sebastian Dröge
708c6aa57e
Update for new simplified glib::Object::new() API
2020-12-17 18:15:54 +02:00
Mathieu Duponchelle
09561686b8
jitterbuffer: mark from_glib fn as unsafe
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/446 >
2020-12-08 20:03:20 +01:00
Sebastian Dröge
46651e31c4
sodium: Handle error from Adapter::copy()
2020-12-07 11:42:48 +02:00
Abdul Rehman
87d7b44dd2
ts-udpsink: Post Message on SinkMessage event
2020-11-24 20:01:50 +05:00
Sebastian Dröge
1c9c22df0c
generic: Update to 2018 edition
2020-11-23 10:28:33 +02:00
Sebastian Dröge
d56ae71e0e
Update for ObjectImpl::get_property() being infallible now
2020-11-19 18:25:53 +02:00
Sebastian Dröge
df6a229f58
Fix or silence various clippy warnings
2020-11-19 15:31:50 +00:00
Abdul Rehman
7e64652fa7
threadshare/udpsrc: Fix retrieve-sender-address default value
2020-11-17 09:18:26 +00:00
Guillaume Desmottes
b9f8ce9995
meson: add support for static build
...
There is no way to dynamically ask Cargo to build static or dynamic lib
so we have to build both and pick the one we care when doing the meson
processing.
Fix #88
2020-11-16 15:30:32 +01:00
Sebastian Dröge
af0337c26c
generic: Update for subclassing API changes
2020-11-15 18:25:42 +02:00
Abdul Rehman
178c7155a3
threadshare/udpsrc: SocketAddr to InetSocketAddress direct conversion
2020-11-10 22:31:41 +05:00
Sebastian Dröge
9c48de75d8
Update for glib_wrapper! API changes
2020-11-07 13:14:00 +02:00
Wonchul Lee
469ab53377
threadshare/udpsrc: Fix to update settings
...
It fixes to update settings along with prepared socket and port number
2020-11-06 16:42:38 +09:00
Sebastian Dröge
1f446f6b64
Switch to the combined gtk-rs and gstreamer-rs repositories
2020-11-01 10:24:57 +02:00
François Laignel
4eacce80a5
threadshare: runtime: simplify a function thanks to clippy
2020-10-20 23:45:01 +02:00
François Laignel
7c3e69bb4a
Fix ClockTime comparisons not being Ord and use saturating_sub
...
See:
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/607
2020-10-20 23:45:01 +02:00
Sebastian Dröge
eced2006e3
threadshare: Update pin-project dependency to 1.0
2020-10-17 12:07:30 +03:00
Seungha Yang
5cba2b002b
threadshare/socket: Fix build error on Windows
...
error[E0412]: cannot find type `Error` in this scope
--> generic\threadshare\src\socket.rs:237:56
|
237 | pub fn set_tos(&self, qos_dscp: i32) -> Result<(), Error> {
| ^^^^^ not found in this scope
2020-10-01 01:40:08 +09:00
Sebastian Dröge
eaaf4bcb21
threadshare/jitterbuffer: Remove unused imports
...
Not required anymore after a fix in glib.
2020-09-01 09:54:41 +03:00
Sebastian Dröge
b8f9e0efc8
threadshare/udpsink: Don't hold settings lock while getting clients property
...
Otherwise we can deadlock between this and render().
2020-08-11 12:23:16 +03:00
Sebastian Dröge
e1784ea01b
threadshare/udpsink: Remove host/port properties
...
In combination with the clients property and the add/remove signals this
behaves very inconsistent as there are multiple ways to do the same.
2020-08-11 12:04:36 +03:00
Sebastian Dröge
89346fa945
threadshare/udpsink: Don't hold settings lock while calling into the sink pad handler to clear the clients
...
Otherwise we can deadlock because of a lock order issue:
- render() is called with the sink pad handler lock and takes the
settings lock
- clearing clients takes the sink pad handler lock
2020-08-10 09:39:07 +03:00
Sebastian Dröge
a022bbe260
Fix some new clippy warnings
2020-07-28 18:52:11 +03:00
Sebastian Dröge
0eb777cf5a
Update for removal of ObjectImpl::get_type_data()
2020-07-26 18:46:32 +03:00
Sebastian Dröge
e9b61b733d
Add LICENSE files to each individual crate
2020-07-10 13:06:28 +03:00
Sebastian Dröge
a28455f0ce
Update for Element::post_message() signature change
2020-06-30 21:28:02 +00:00
François Laignel
e2f27e77ce
threadshare: use tokio tag
2020-06-30 09:25:20 +00:00
Sebastian Dröge
f62c11f851
Update for functions returning a Builder being renamed to builder() instead of new()
...
And new video event APIs.
2020-06-25 19:49:07 +03:00
François Laignel
e40267e95d
event,message,query: update instantiation
...
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/532
2020-06-25 11:26:32 +02:00
Sebastian Dröge
9bb3e75fb9
Update to use the new pad builders for safely setting pad functions
...
Only two uses of unsafely setting the pad functions is left:
- fallbacksrc for overriding the chain function of the proxy pad of a
ghost pad
- threadshare for overriding the pad functions after creationg, which
probably needs some fixing at some point
2020-06-22 11:28:19 +03:00
Sebastian Dröge
60321edb8c
Update for new_with_XXX/new_from_XXX function renaming
2020-06-16 11:56:48 +03:00
Guillaume Desmottes
e85799b9d6
use new constructor names
2020-06-11 13:07:01 +02:00
Philippe Normand
737bd459e4
jitterbuffer: Remove un-needed mut qualifiers
2020-06-06 10:26:06 +01:00
Mathieu Duponchelle
3d26d2f27b
sync elements: implement provide_clock
...
Since those are using the clock for sync, they need to also
provide a clock for good measure. The reason is that even if
downstream elements provide a clock, we don't want to have
that clock selected because it might not be running yet.
2020-06-02 19:31:58 +02:00
François Laignel
dfaf59a59b
threadshare: simplify Pad{Src,Sink} implementations
...
Pad{Src,Sink}[Ref] delegate some functions to their respective
Pad{Src,Sink}Inner. Since they act as smart pointers, we can
safely implement the Deref trait to simplify the implementations.
2020-05-30 08:30:27 +00:00
Sebastian Dröge
08da51744b
threadshare: Update from the deprecated net2 to the socket2 crate
2020-05-29 13:07:14 +03:00
François Laignel
04f85f6dbd
threadshare: return false when Flush{Start,Stop} fails
2020-05-25 18:31:49 +02:00
François Laignel
244f6dd6f7
threadshare: fix Transition naming
2020-05-25 18:31:49 +02:00
François Laignel
725eb0a093
threadshare: spawn StateMachine on the futures::executor::ThreadPool
...
StateMachines are spawned on a runtime::Context which uses a tokio
runtime. The StateMachine doesn't need all the features from tokio
such as the IO and timers drivers.
This commit makes use of a light-weight futures executor to spawn
the StateMachines.
2020-05-25 18:31:49 +02:00
François Laignel
f0793587f6
threadshare/TaskImpl: allow transition hooks to fail...
...
... and add error handlers for iterate and transitions hooks with
default implementation.
2020-05-25 18:31:49 +02:00
François Laignel
5c9bbc6818
threadshare: Task: reduce memory usage
...
Using dynamic dispatch instead of monomorphization reduces the lib size
and memory use without affecting CPU nor throughput significantly.
2020-05-25 18:31:49 +02:00
François Laignel
1bea2ad279
threadshare: introduce TaskImpl trait
...
TaskImpl is the trait for specific Task behaviour. It is the basis
of a new Task model. The main motivation for this model is to ease
threadsafe implementations of state transitions.
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/298
2020-05-25 18:31:48 +02:00
François Laignel
4cba9d1e53
threadshare: src elements: don't reset configured_caps
...
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/113
2020-04-29 21:37:22 +02:00
François Laignel
8e38d861b4
threadshare: save upgrade in Pad functions
...
When initializing Pad functions in `Pad{Src,Sink}`, we downgrade the
`Pad{Src,Sink}` and upgrade it when necessary. This was implemented
to avoid reference cycles:
`gst::Pad` -> pad function -> `Pad{Src,Sink}` -> `gst::Pad`.
Since `Pad{Src,Sink}` reset the pad functions when dropping, there is
no cycles, so we can use an `Arc<Pad{Src,Sink}>` in the pad functions,
thus saving an `upgrade`.
2020-04-29 16:10:19 +02:00
François Laignel
26634f591a
threadshare: build Pad{Src,Sink} with handlers
...
Handlers for `Pad{Src,Sink}` are assigned when `prepare` is called
which prevents them from handling pre-prepare queries.
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/247
2020-04-29 16:08:16 +02:00
François Laignel
c414f78248
threadshare: fix race condition in tcpclientsrc test
2020-04-28 20:47:08 +02:00
François Laignel
957aac94ae
threadshare: align some properties with their C counterparts
...
Some ts-elements properties don't match the name, type or default
value of the C elements counterparts.
2020-04-27 11:22:26 +02:00
François Laignel
dae38eb0a3
threadshare: benchmark: add throughput tracking
2020-04-25 23:18:20 +02:00
Sebastian Dröge
36f032ef15
Configure crate-type to cdylib/rlib consistently in Cargo.toml
...
And not in the source code, it's a build decision.
2020-04-24 15:02:12 +03:00