Commit graph

2421 commits

Author SHA1 Message Date
François Laignel
e1afa43aa3 ts/udpsink: handle items in the PadSinkHandler
... instead of forwarding them to a Task via a channel.

This improves CPU usage by 5% according to `udpsrc-benchmark-sender`
with the `tuning` feature using default audio test buffers and
400 streams on the same ts-context.

It is expected to improve latency significantly. This is inferred
from `ts-standalone`: latency shrinks from around 5ms to 1.5µs
using the `task` sink compared to the `async-mutex` sink.

The async Mutex is mandatory here as we need to hold the lock
across await points.
2022-11-09 07:55:04 +00:00
François Laignel
29a490f6dc ts: introduce ts-audiotestsrc
This makes it easy to generate "listenable" signals and to evaluate
discontinuities.

When the `tuning` feature is activated and the `main-elem` property
is set, the element can log the parked duration in %, which is an
image of the CPU usage for the ts-context.

This commit adds a test mode to `udpsrc-benchmark-sender` which
generates default audio buffers from `ts-audiotestsrc`. The `rtp`
mode is modified so that it uses `ts-audiotestsrc`.
2022-11-09 07:55:04 +00:00
François Laignel
9b96cfc452 ts/standalone: add new Sinks
Contrary to the existing Task Sink, the Async and Sync Mutex Sinks
handle buffers in the `PadSinkHandler` directly. The Async Mutex
Sink uses an async Mutex for the `PadSinkHandlerInner` while the
Sync Mutex Sink uses... a sync Mutex.

All Sinks share the same settings and stats manager.

Use the `--sink` command line option to select the sink (default is
`sync-mutex` since it allows evaluating the framework with as little
overhead as possible.

Also apply various fixes:

- Only keep the segment start instead of the full `Segment`. This
  helps with cache locality (`Segment` is a plain struct with many
  fields) and avoids downcasting the generic `Segment` upon each
  buffer handling.
- Box the `Stat`s. This should improve cache locality a bit.
- Fix EOS handling which took ages for no benefits in this
  particular use case.
- Use a macro to raise log level in the main element.
- Move error handling during item processing in `handle_loop_error`.
  This function was precisely designed for this and it should reduce
  the `handle_item`'s Future size.
2022-11-09 07:55:04 +00:00
François Laignel
4616f0a4a4 ts/standalone: move current sink under task_sink 2022-11-09 07:55:04 +00:00
Sebastian Dröge
f22be3a586 deny: Update 2022-11-09 09:15:55 +02:00
Sebastian Dröge
10d8cc21e6 mp4: Update to url 2 2022-11-09 09:15:50 +02:00
Sebastian Dröge
360e4275ed threadshare: Update to concurrent-queue 2 2022-11-09 09:15:38 +02:00
Sebastian Dröge
c2f403f998 gst-plugin-mp4: Add new MP4 plugin with a non-fragmented MP4 muxer 2022-11-08 19:08:47 +02:00
Sebastian Dröge
a5f3197651 Add missing doc features to WebRTC plugins 2022-11-07 18:06:29 +00:00
Sebastian Dröge
f062b7cf0d fmp4mux: Make media/trak timescales configurable
And refactor a bit of code for easier extensibility.
2022-11-07 18:06:29 +00:00
Sebastian Dröge
e87251c7d9 ci: Update to cargo-c 0.9.14 2022-11-05 16:26:23 +00:00
Jan Beich
d01779dc6c meson: optionalize pango dependency used by net/onvif
Similar to -Dpango=<auto|enabled|disabled> in gst-plugins-base.
2022-11-05 08:19:12 +00:00
Jan Beich
9aeaac5a96 ndi: provide Unix fallback after 3fe9e4a207
error[E0425]: cannot find value `LIBRARY_NAME` in this scope
   --> net/ndi/src/ndisys.rs:336:23
    |
336 |             path.push(LIBRARY_NAME);
    |                       ^^^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `LIBRARY_NAME` in this scope
   --> net/ndi/src/ndisys.rs:339:33
    |
339 |             path::PathBuf::from(LIBRARY_NAME)
    |                                 ^^^^^^^^^^^^ not found in this scope
2022-11-05 02:51:28 +00:00
Sebastian Dröge
7ac29827d2 fmp4mux: Don't allow VP9 for CMAF
This would require setting the correct compatible band for VP9 in CMAF,
which is not implemented yet.
2022-11-03 16:53:01 +02:00
Sebastian Dröge
6706f3a4b4 fmp4mux: Add initial Opus support
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/239
2022-11-03 16:53:01 +02:00
Sebastian Dröge
9504e4d540 docs: Remove some stale entries of renamed elements 2022-11-03 15:09:20 +02:00
Arun Raghavan
54c84a7211 aws: Skip s3 test on Windows until we figure out why it times out 2022-11-02 13:14:08 -04:00
Sebastian Dröge
ba20fc735e ci: Only warn about unknown lints instead of denying 2022-11-01 11:27:01 +02:00
Sebastian Dröge
a8250abbf1 Fix various new clippy warnings 2022-11-01 10:27:48 +02:00
Sebastian Dröge
31d4ba2eae fmp4mux: For VP9, write resolution into the tkhd and include a stss box to signal that not all frames are sync samples
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/957>
2022-10-31 15:20:19 +02:00
Sebastian Dröge
976ae5707e webrtc: Update to human_bytes 0.4 2022-10-31 14:11:29 +02:00
Sebastian Dröge
6ceeadc0f0 aws: Update to aws 0.21/0.51 2022-10-31 14:11:29 +02:00
Sebastian Dröge
7106b0484d fmp4mux: Remove unused uuid dependency 2022-10-28 12:45:42 +03:00
Sebastian Dröge
938f4e4f1c fmp4mux: Clip negative PTS to zero/last PTS instead of erroring out
This can happen at the beginning of a stream if upstream is
rtpjitterbuffer and it has problems figuring out timestamps in the
beginning due to resetting / skew.
2022-10-27 14:47:16 +03:00
Sebastian Dröge
627bf756b1 fmp4mux: Send force-keyunit events for now if the ideal position has already passed 2022-10-27 12:53:09 +03:00
Sebastian Dröge
a56435801d fmp4mux: Add debug log when writing the mfra box 2022-10-26 17:22:20 +00:00
Sebastian Dröge
27fac33c44 fmp4mux: Reset timing infos to None if a stream only contained gap events for a whole fragment 2022-10-26 17:22:20 +00:00
Sebastian Dröge
cab4cd3b8c fmp4mux: If a stream is longer than the main stream at EOS, simply include all of its buffers in the last fragment nonetheless 2022-10-26 17:22:20 +00:00
Sebastian Dröge
ce166b4d8f whipsink: Add object to debug logs 2022-10-26 16:20:26 +03:00
Matthew Waters
d067fb2ec8 fmp4mux: don't require dts for predictive-only formats like vp9 2022-10-26 11:42:13 +00:00
Guillaume Desmottes
d46857d3b1 aws: fix title in README
The title was not matching the actual plugin name which was confusing.
2022-10-26 11:13:47 +02:00
Sebastian Dröge
4c7dfceb9a deny: Update 2022-10-25 11:03:32 +03:00
Matthew Waters
8c8384c711 fmp4: add support for muxing VP9 streams in cmaf, dash and iso fmp4
As specified in https://www.webmproject.org/vp9/mp4/
2022-10-25 18:33:42 +11:00
Sebastian Dröge
bf6bdab80c webrtc: Remove version requirement from internal crate dependencies 2022-10-24 19:50:24 +03:00
Sebastian Dröge
f2223cf2cb Update versions to 0.10.0-alpha.1 2022-10-24 19:31:19 +03:00
Sebastian Dröge
b64f951160 Update to async-tungstenite 0.18 2022-10-24 18:03:33 +03:00
Sebastian Dröge
6d21231554 pngenc: Encode every frame individually
Passing multiple frames to the encoder only causes the PNG header to be
written before the very first frame and is meant for writing animated APNG.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/261
2022-10-24 16:35:51 +03:00
François Laignel
5ca033049e ts/pad: use gst::Pad in handlers trait functions...
... instead of the `Pad{Src,Sink}Ref` wrappers:

- In practice, only the `gst::Pad` is useful in these functions.
  Some of these which need a `Pad{Src,Sink}Ref`, but it's the one
  for the opposite stream direction. In those cases, it is accessed
  via the element's implementation.
- It saves a few `clone`s.
- The implementations usually use the `gst::Pad` for logging.
  They no longer need to access it via `pad.gst_pad()`.
2022-10-24 13:15:13 +02:00
François Laignel
554ce7e7d6 ts/pad: don't pass self as ref in remaining handler traits functions
- They are either unit types or `Clone` (in which case they are implemented
  as pointers).
- Internally, we already use an owned version, so there's no need to get a
  reference.
- It facilitates implementation if the handler must be moved into a closure
  or a `Future`.
2022-10-24 12:01:09 +02:00
Sebastian Dröge
43e28e5a6d textwrap: Update to textwrap 0.16 2022-10-24 11:19:52 +03:00
Sebastian Dröge
9a68f6e221 Move from imp.instance() to imp.obj()
It's doing the same thing and is shorter.
2022-10-23 23:08:46 +03:00
François Laignel
86776be58c Remove & for obj in log macros
This is no longer necessary.

See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1137
2022-10-23 21:22:31 +02:00
Sebastian Dröge
fe8e0a8bf8 Update docs 2022-10-23 21:29:14 +03:00
Sebastian Dröge
cb3110df95 Add all missing plugins/elements to the README.md 2022-10-23 20:46:08 +03:00
Sebastian Dröge
f045099fc1 Fix GObject type names, GStreamer debug category names and element factory names
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/198
2022-10-23 20:46:08 +03:00
Sebastian Dröge
211cd095d6 Add new mux subdirectory for container formats
Contains the (incomplete) flavors FLV demuxer and the fragmented MP4
muxer for now.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/173
2022-10-23 20:25:08 +03:00
Sebastian Dröge
5d44e0eb3c rtp: Move GCC bandwidth estimation element from webrtc to rtp plugin 2022-10-23 20:25:08 +03:00
Sebastian Dröge
20ad9175d8 Make GStreamer plugin/crate/library/directory names and descriptions consistent
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/238
2022-10-23 20:25:08 +03:00
Sebastian Dröge
45168639e9 Rename rtpav1 plugin to just rtp
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/243
2022-10-23 20:04:43 +03:00
b97a855a51 videocompare: Update README with reference 2022-10-23 17:16:22 +03:00