Commit graph

2881 commits

Author SHA1 Message Date
François Laignel
9250c592a7 ndi: don't accumulate meta with audio only streams
Currently, only closed caption metadata are supported. When the next video
frame is received, pending meta are dequeued and parsed. If close captions
are found, they are attached to the video frame.

For audio only streams, it doesn't make sense to enqueue metadata. They would
accumulate in `pending_metadata` and would never be dequeued.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/460

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1392>
2023-11-13 19:26:23 +01:00
Sebastian Dröge
636c76b03b uriplaylistbin: Fix new clippy warning
warning: the borrowed expression implements the required traits
    --> utils/uriplaylistbin/src/uriplaylistbin/imp.rs:1691:32
     |
1691 |         self.obj().remove_many(&children_ref).unwrap();
     |                                ^^^^^^^^^^^^^ help: change this to: `children_ref`

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1391>
2023-11-13 17:41:06 +02:00
Sebastian Dröge
39155ef81c ndisrc: Implement zerocopy handling for the received frames if possible
Also move processing from the capture thread to the streaming thread.
The NDI SDK can cause frame drops if not reading fast enough from it.

All frame processing is now handled inside the ndisrcdemux.

Also use a buffer pool for video if copying is necessary.

Additionally, make sure to use different stream ids in the stream-start
event for the audio and video pad.

This plugin now requires GStreamer 1.16 or newer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1365>
2023-11-13 13:22:48 +02:00
Sebastian Dröge
2afffb39dd ndi: Don't mark private type as public
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1365>
2023-11-13 10:29:25 +02:00
Sebastian Dröge
99d7cce0d6 ndi: Refactor frame structs to have static lifetimes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1365>
2023-11-13 10:29:25 +02:00
Sebastian Dröge
eb137ec6dc ndi: Remove wrong Clone impl on RecvInstance
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1365>
2023-11-13 10:29:25 +02:00
Sebastian Dröge
6c5c09fae9 Update CHANGELOG.md for 0.11.2 2023-11-11 21:00:30 +02:00
Sebastian Dröge
885928ea17 ci: Run cargo update as part of the cargo deny / cargo outdated jobs 2023-11-10 08:55:31 +02:00
Arun Raghavan
771741c10c Revert "s3: tests: Remove emoji-based tests for now"
This reverts commit a49a5dcb11.

Now that hotdoc should work with emoji, let's bring the tests back.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1386>
2023-11-09 11:50:53 -05:00
Sebastian Dröge
63edc84103 Add Cargo.lock to the repository
This makes sure that any broken dependency updates are not breaking our
build, at the cost of requiring us to update the lock file regularly.

See also https://blog.rust-lang.org/2023/08/29/committing-lockfiles.html

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1385>
2023-11-09 10:08:08 +02:00
Sebastian Dröge
8b37d8ec02 deny: Add override for duplicated toml_edit dependency
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1385>
2023-11-09 10:06:55 +02:00
Sebastian Dröge
a8205d5b5d version-helper: Update to toml_edit 0.21
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1382>
2023-11-07 09:28:23 +02:00
Maksym Khomenko
e5fd2c3568 webrtcsrc: add turn-servers property
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1380>
2023-11-04 10:19:45 +00:00
Mathieu Duponchelle
5371eb52ad Port to AWS SDK 0.57/0.35
Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1379>
2023-11-03 15:13:45 +00:00
Sebastian Dröge
f7745a336f aws: Update to test-with 0.12
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1379>
2023-11-03 15:13:45 +00:00
Sebastian Dröge
a33f29365a sccparse: Fix leading spaces between the tab and caption data
CCExtractor is creating files like this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1378>
2023-11-02 21:59:02 +02:00
Sebastian Dröge
16b917abb1 Update for gst::Rank API changes 2023-11-02 14:10:59 +02:00
Piotr Brzeziński
436b6d8efb gstwebrtc-api: Patch webrtc-adapter to fix Safari behaviour
There's currently a Safari-side bug causing webrtc-adapter to be unable to correctly shim the empty-candidate scenario
which we're using. This patch is very much a workaround and should be removed as soon as Safari and/or webrtc-adapter
fixes this on their side.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/439
https://github.com/webrtcHacks/adapter/issues/1140

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1377>
2023-10-30 16:36:11 +00:00
Sebastian Dröge
16c00ae3f5 Set sync=false in rsfilesink / s3sink
BaseSink defaults to sync=true and that doesn't make much sense for
these elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1376>
2023-10-30 17:38:46 +02:00
Sebastian Dröge
855b03a9ea Use let-else instead of match for weak reference upgrades
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1375>
2023-10-30 11:34:35 +02:00
Sebastian Dröge
74c04d79c9 gtk4: Use async-channel instead of the glib MainContext channel
The latter will be removed in favour of using async code in the future,
and async code generally allows for more flexible message handling than the
callback based MainContext channel.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1375>
2023-10-30 11:21:25 +02:00
Sebastian Dröge
b771afe8be deny: Update duplicated dependencies
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1374>
2023-10-27 10:20:54 +03:00
Sebastian Dröge
557b249e11 Update to AWS SDK 0.34 and tracing-log 0.2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1374>
2023-10-27 10:19:15 +03:00
Jan Alexander Steffens (heftig)
e3e58ac0be livesync: Remove the stop from outgoing segments
Our buffer duplication can extend a segment indefinitely.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/452
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1372>
2023-10-25 19:34:47 +02:00
Jan Alexander Steffens (heftig)
f1ba498b52 livesync: Keep existing buffer duration in some cases
Resize a repeat buffer only if caps gave us a duration to use, or we
consider its current duration unreasonable.

In particular, for audio streams we should prefer reusing the buffer
size upstream gave us, as we did before 6633cc4046.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1372>
2023-10-25 19:34:47 +02:00
Jan Alexander Steffens (heftig)
59beade079 livesync: Split fallback_duration into in_ and out_duration
Make it independent of the `latency`; this was inconsistent anyway,
where the default latency of zero got you a fallback duration of 100 ms
and something else got you half the latency.

Maintain a separate duration for the `in` and the `out` side so we
change the duration of repeat buffers after a caps change, not just
before.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1372>
2023-10-25 19:08:16 +02:00
Guillaume Desmottes
f94ecfc7a6 livesync: display jitter when waiting on clock
We already log the result of the clock wait call so may as well log the
returned jitter.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1370>
2023-10-25 14:26:19 +02:00
Guillaume Desmottes
13dae0f0d0 livesync: log new pending segments
The debug print of the event does not display details about the segment:
  Unqueueing Some(Event(Event { ptr: 0x7fa3e0002580, type: "segment", seqnum: Seqnum(479), structure: Some(GstEventSegment { segment: (GstSegment) ((GstSegment*) 0x7fa3e8001d00) }) }))

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1370>
2023-10-25 14:24:35 +02:00
Jan Alexander Steffens (heftig)
ee93448de7 livesync: example: Add identities single-segment=1
These let us change the runtime offset of the test buffers via pad
offsets without pushing new segments into livesync, which is necessary
to demo the late-threshold behavior.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 12:55:06 +02:00
Jan Alexander Steffens (heftig)
6633cc4046 livesync: Use fallback_duration for audio repeat buffers as well
Don't depend on upstream giving us sanely-sized buffers if we want to
repeat.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 12:55:06 +02:00
Jan Alexander Steffens (heftig)
4ac7d0415b livesync: Separate out_buffer duplicate status from GAP flag
Otherwise we might get confused by upstream GAP buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 12:10:40 +02:00
Jan Alexander Steffens (heftig)
2f36bd5d77 livesync: Handle flags and late buffer patching after queueing
This makes the chain function almost independent of the output state. We
still do the early discard check with `buffer_is_backwards` so we don't
try to queue buffers we can't use, allowing us to fast-forward upstream
without blocking on the src task.

Don't accept `LateOverThreshold` buffers when we have `pending_caps` or
a `pending_segment`. We need to apply these first before we can sensibly
patch buffers from the new stream.

Deduplicate most of the output buffer patching code into a new
`patch_output_buffer` method.

For: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/450
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:41 +02:00
Jan Alexander Steffens (heftig)
7c48a299c3 livesync: Simplify num_duplicate counting
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
17a2448237 livesync: Move num_in counting to the src task
This is in preparation for moving more accept/discard logic to the src
task, so we can only count `num_in` here.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
1740a8e363 livesync: Move a notify closer to the interesting state change
Move the `notify_all` to where we pop the buffer. We're moving within a
single state lock so no change in behavior.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
44f2195674 livesync: Replace an if-let with match
No change in behavior, yet. Separate commit to ease reviewing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
62791bfb47 livesync: Clean up state handling
- Separate resetting state more cleanly, introducing `set_flushing`,
  `sink_reset` and `src_reset`.
- Clear the queue early when we flush, in order to unblock waits on
  query responses.
- Return an error when we fail to start, pause or stop the task.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
d663f708ef livesync: Log a category error when we are missing the segment
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
6567041a3d livesync: Improve audio duration fixups
- An entirely missing duration is now only logged at debug level instead
  of pretending the duration was zero and warning about it.
- Silently fix up a duration difference up to one sample.
- Error when we fail to calculate the duration; don't try to apply the
  `fallback_duration` to a non-video stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:52:40 +02:00
Jan Alexander Steffens (heftig)
0a45f776e0 livesync: Simplify start_src_task and src_loop
This should effect no change in behavior.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:03:15 +02:00
Jan Alexander Steffens (heftig)
01386b8451 livesync: Rename activatemode methods to *_activatemode
This matches the other plugins.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
2023-10-25 11:03:14 +02:00
Arun Raghavan
d27a04e067 hlssink3: Close the playlist giostreamsink on stop if possible
This is a property that will be available from GStreamer 1.24, and will
ensure that we are able to flush the playlist during the READY->NULL
transition instead of when the element is freed.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/423
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1360>
2023-10-24 21:03:14 +00:00
Arun Raghavan
a49a5dcb11 s3: tests: Remove emoji-based tests for now
These break hotdoc, which we need to fix first.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1333>
2023-10-24 12:52:12 -04:00
Arun Raghavan
bb26e04a55 aws: s3: Properly percent-decode GstS3Url
We previously only percent-decoded the first fragment. This doesn't
necessarily harm anything, but for consistency we keep the structure
un-encoded, and encode when converting to a string representation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1333>
2023-10-24 12:52:12 -04:00
Arun Raghavan
51129febeb aws: s3sink: Fix handling of special characters in key
Properly URL-encode the string if needed, and add some tests for a
couple of cases.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/431
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1333>
2023-10-24 12:52:12 -04:00
Sebastian Dröge
829469d0fe rtpav1depay: Don't push stale temporal delimiters downstream
Only push them downstream once a complete OBU was assembled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1367>
2023-10-24 11:13:35 +00:00
Sebastian Dröge
1f5e9a9335 rtpav1depay: Skip unexpected leading fragments
If a packet is starting with a leading fragment but we do not expect to
receive one, then skip over it to the next OBU.

Not doing so would cause parsing of the middle of an OBU, which would
most likely fail and cause unnecessary warning messages about a
corrupted stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1367>
2023-10-24 11:13:35 +00:00
Sebastian Dröge
b1894a0acb deny: Remove unnecessary ignore entry
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1368>
2023-10-24 09:55:54 +03:00
Sebastian Dröge
73ff822d24 Update to quick-xml 0.31
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1368>
2023-10-24 09:55:50 +03:00
Jordan Petridis
a2d7f42138 Fix compilation after glib bindings changes
loggable_error! can now expand variables and we no longer need
the format! on our side.

https://github.com/gtk-rs/gtk-rs-core/pull/1210

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1366>
2023-10-22 01:20:56 +03:00