2018-03-06 09:38:27 +00:00
|
|
|
[package]
|
|
|
|
name = "gst-plugin-threadshare"
|
2022-10-24 16:31:19 +00:00
|
|
|
version = "0.10.0-alpha.1"
|
2018-03-06 09:38:27 +00:00
|
|
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
2020-04-16 11:06:34 +00:00
|
|
|
license = "LGPL-2.1-or-later"
|
2022-10-23 09:13:23 +00:00
|
|
|
description = "GStreamer Threadshare Plugin"
|
2019-06-03 10:53:58 +00:00
|
|
|
repository = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs"
|
2021-10-31 10:54:12 +00:00
|
|
|
edition = "2021"
|
2022-09-04 18:31:55 +00:00
|
|
|
rust-version = "1.63"
|
2018-03-06 09:38:27 +00:00
|
|
|
|
|
|
|
[dependencies]
|
2022-07-26 07:23:52 +00:00
|
|
|
async-task = "4.3.0"
|
2022-11-09 07:15:38 +00:00
|
|
|
concurrent-queue = "2"
|
ts/udpsink: reduce sync primitives in async hot path
The way the runtime::Task is implemented, UdpSinkTask is available
as a mutable ref in all the TaskImpl functions, which offers the
opportunity to avoid using Mutexes.
Main higlights:
- Removed the back and forth calls between UdpSinkPadHandler
and UdpSinkTask.
- Udp sockets are now part of UdpSinkTask, which is also in
charge of preparing them instead of leaving this to UdpSink.
This removed the need for Context::enter since
TaskImpl::prepare already operates under the target Context.
- In order for the clients list to be visible from the UdpSink,
this list was maintained by UdpSinkPadHandler which was also
in charge of (un)configuring the Udp sockets. The sockets are
now part of UdpSinkTask, which is also in charge of the
(un)configuration. Add/remove/replace requests are passed as
commands to the UdpSinkTask via a channel.
- The clients list visible to the UdpSink is now part of the
Settings (it is also a read/write property). Since the actual
socket (un)configuration is asynchronously handled by the Task,
the clients list is updated by the add/remove/replace signals
and set_property("clients", ..). Should a problem occur during
the async (un)configuration, and only in this case, the
UdpSinkTask would update the clients lists in Settings
accordingly so that it stays consistent with the internal state.
- The function clear_clients was renamed as replace_with_clients.
- clients is now based on a BTreeSet instead of a Vec. All the
managing functions perform some sort of lookup prior to updating
the collection. It also ease implementation.
- Removed the UdpSinkPadHandler RwLock. Using flume channels, we
are able to clone the Receiver so it can be stored in UdpSink
and reused when preparing the UdpSinkTask.
2022-06-23 16:50:11 +00:00
|
|
|
flume = "0.10.13"
|
2022-07-26 07:23:52 +00:00
|
|
|
futures = "0.3.21"
|
2018-11-30 17:38:25 +00:00
|
|
|
libc = "0.2"
|
2021-05-13 06:50:08 +00:00
|
|
|
gio = { git = "https://github.com/gtk-rs/gtk-rs-core" }
|
2021-07-20 19:49:24 +00:00
|
|
|
gst = { package = "gstreamer", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" }
|
2019-11-24 20:12:40 +00:00
|
|
|
gst-net = { package = "gstreamer-net", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" }
|
|
|
|
gst-rtp = { package = "gstreamer-rtp", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" }
|
2020-05-15 21:37:56 +00:00
|
|
|
once_cell = "1"
|
2021-12-14 18:40:27 +00:00
|
|
|
pin-project-lite = "0.2.0"
|
2022-06-14 18:38:25 +00:00
|
|
|
polling = "2.2.0"
|
2021-01-09 10:24:28 +00:00
|
|
|
rand = "0.8"
|
2022-07-26 07:23:52 +00:00
|
|
|
slab = "0.4.7"
|
2021-03-21 10:57:10 +00:00
|
|
|
socket2 = {features = ["all"], version = "0.4"}
|
2021-12-14 18:40:27 +00:00
|
|
|
waker-fn = "1.1"
|
2018-03-06 09:38:27 +00:00
|
|
|
|
2022-08-16 12:26:24 +00:00
|
|
|
# Used by examples
|
2022-09-29 06:48:53 +00:00
|
|
|
clap = { version = "4", features = ["derive"], optional = true }
|
2022-08-16 12:26:24 +00:00
|
|
|
|
2018-11-30 17:38:25 +00:00
|
|
|
[target.'cfg(windows)'.dependencies]
|
2021-12-14 18:40:27 +00:00
|
|
|
winapi = { version = "0.3.9", features = ["winsock2", "processthreadsapi"] }
|
2018-11-30 17:38:25 +00:00
|
|
|
|
2020-11-22 14:24:55 +00:00
|
|
|
[dev-dependencies]
|
|
|
|
gst-check = { package = "gstreamer-check", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" }
|
|
|
|
gst-app = { package = "gstreamer-app", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs" }
|
|
|
|
|
2018-03-06 09:38:27 +00:00
|
|
|
[lib]
|
|
|
|
name = "gstthreadshare"
|
2020-11-26 15:07:41 +00:00
|
|
|
crate-type = ["cdylib", "rlib"]
|
2018-03-06 09:38:27 +00:00
|
|
|
path = "src/lib.rs"
|
2018-03-15 18:52:38 +00:00
|
|
|
|
2018-04-05 13:00:43 +00:00
|
|
|
[[example]]
|
2018-07-06 07:35:16 +00:00
|
|
|
name = "benchmark"
|
|
|
|
path = "examples/benchmark.rs"
|
2018-04-05 13:00:43 +00:00
|
|
|
|
2018-04-05 17:28:20 +00:00
|
|
|
[[example]]
|
|
|
|
name = "udpsrc-benchmark-sender"
|
|
|
|
path = "examples/udpsrc_benchmark_sender.rs"
|
2018-07-06 07:32:24 +00:00
|
|
|
|
|
|
|
[[example]]
|
|
|
|
name = "tcpclientsrc-benchmark-sender"
|
|
|
|
path = "examples/tcpclientsrc_benchmark_sender.rs"
|
2019-06-03 10:53:58 +00:00
|
|
|
|
2022-08-16 12:26:24 +00:00
|
|
|
[[example]]
|
2022-08-19 17:40:05 +00:00
|
|
|
name = "ts-standalone"
|
2022-08-16 12:26:24 +00:00
|
|
|
path = "examples/standalone/main.rs"
|
|
|
|
|
2019-06-03 10:53:58 +00:00
|
|
|
[build-dependencies]
|
2020-04-05 14:38:52 +00:00
|
|
|
gst-plugin-version-helper = { path="../../version-helper" }
|
2019-08-05 13:19:06 +00:00
|
|
|
cc = "1.0.38"
|
|
|
|
pkg-config = "0.3.15"
|
2020-11-26 15:07:41 +00:00
|
|
|
|
|
|
|
[features]
|
2022-04-07 09:41:54 +00:00
|
|
|
static = []
|
2021-08-11 17:51:36 +00:00
|
|
|
capi = []
|
2022-09-07 21:10:29 +00:00
|
|
|
# Adds performance counters used by benchmarking tools.
|
|
|
|
tuning = []
|
2022-08-25 22:30:08 +00:00
|
|
|
doc = ["gst/v1_18"]
|
2020-11-26 15:07:41 +00:00
|
|
|
|
|
|
|
[package.metadata.capi]
|
2021-07-09 10:49:33 +00:00
|
|
|
min_version = "0.8.0"
|
2020-11-26 15:07:41 +00:00
|
|
|
|
|
|
|
[package.metadata.capi.header]
|
|
|
|
enabled = false
|
|
|
|
|
|
|
|
[package.metadata.capi.library]
|
|
|
|
install_subdir = "gstreamer-1.0"
|
|
|
|
versioning = false
|
|
|
|
|
|
|
|
[package.metadata.capi.pkg_config]
|
|
|
|
requires_private = "gstreamer-1.0, gstreamer-net-1.0, gstreamer-rtp-1.0, gobject-2.0, glib-2.0, gmodule-2.0"
|