Mathieu Duponchelle
53e948b8da
proxy: fix blocking upwards state change
...
ProxySink previously blocked on receiving the source pad
of ProxySrc in its ReadyToPaused transition, which meant
ProxySrc had to transition to Ready at the same time.
The usual use case is for the source and sink to reside in
two separate pipelines, and such an arrangement easily led
to deadlocks, as examplified by the new test case.
Instead we now maintain two more global hash maps holding
per-context sink pads and src pads weak references, and
forward events to those when needed.
As ProxySink may not have a source pad context to run
a future on when receiving FlushStart, gst::Element::call_async
is used instead, with a simple oneshot channel used to synchronize
flush start and flush stop handling.
2020-02-05 21:35:11 +01:00
Mathieu Duponchelle
4abb389269
socket based sources: close socket stream on unprepare
...
the socket was otherwise leaked
2020-02-04 20:09:27 +01:00
Sebastian Dröge
1e778e9827
Update for Seqnum/GroupId API changes
2020-01-25 01:21:22 +02:00
François Laignel
e2add3f2c8
ts-jitterbuffer: add dedicated functions for state transitions + tests
...
fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/issues/95
2020-01-23 19:10:21 +01:00
Mathieu Duponchelle
c50aa09034
threadshare: fix latency query handlers
...
Returning 0 as the max latency in those sources is incorrect,
and may lead to sinks incorrectly complaining about insufficient
buffering elements.
Reproduce with:
gst-launch-1.0 ts-udpsrc port=50000 address=127.0.0.1 \
caps="application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string)PCMA, payload=(int)8" ! \
rtppcmadepay ! alawdec ! autoaudiosink
gst-launch-1.0 audiotestsrc do-timestamp=true samplesperbuffer=400 ! \
alawenc ! rtppcmapay max-ptime=50000000 min-ptime=50000000 ! \
udpsink host=127.0.0.1 port=50000
Logs:
Not enough buffering available for the processing deadline of 0:00:00.020000000,
add enough queues to buffer 0:00:00.020000000 additional data.
Shortening processing latency to 0:00:00.000000000.
This then causes glitches, there are many other ways for the problems
to manifest.
2020-01-23 15:36:22 +00:00
Mathieu Duponchelle
decc1e2029
threadshare: make live sources return NoPreroll from PlayingToPaused
...
Not returning NoPreroll in that transition causes downstream sinks
to wait for preroll forever.
Reproduce with:
gst-launch-1.0 audiotestsrc ! udpsink host=127.0.0.1 port=50000
gst-launch-1.0 ts-udpsrc address=127.0.0.1 port=50000 ! fakesink
ctrl + C in the receiver pipeline -> hangs forever
2020-01-23 15:56:11 +01:00
François Laignel
d1cc8eaec8
ts: don't panic when operating on a Context without a valid PadContext
...
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/issues/94
2020-01-22 06:16:17 +00:00
Mathieu Duponchelle
0aa5b15564
jitterbuffer: return NoPreroll when going from READY to PAUSED
...
This is useful when upstream is not a live source
Fixes potential issue discussed in:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/issues/93#note_388528
2020-01-21 22:14:33 +01:00
Mathieu Duponchelle
1823ca525e
jitterbuffer: don't try to lock in query handlers
...
Instead, add position and latency fields to the PadSrcHandler
Fixes #93
2020-01-21 22:14:06 +01:00
François Laignel
676ae87aed
ts: queue & proxy: spawn on src_pad in PadSinkHandlers...
...
... instead of copying the src_pad's Context
2020-01-17 15:37:54 +01:00
François Laignel
7a4fea8669
ts-udpsrc: prepare socket immediately
...
Now that we can `Context::enter`, it is no longer necessary to spawn
a `Future` to prepare the `UdpSocket` and beneficiate from the
`Context`'s IO driver.
2020-01-16 00:44:48 +01:00
François Laignel
a15d60105b
ts: fix FlushStart / FlushStop events handling
2020-01-16 00:44:45 +01:00
François Laignel
3eed2f69d9
ts: have block_on panic if running on a Context thread
2020-01-16 00:18:16 +01:00
Guillaume Desmottes
db8b2ad08b
threadshare: fix coding style
...
Just ran 'gst-indent'.
2020-01-02 11:49:39 +05:30
Sebastian Dröge
9772adbfbf
Fix various new clippy warnings from 1.40
2019-12-22 11:35:01 +02:00
François Laignel
688357a474
Update jitterbuffer.rs + clippy pass
2019-12-21 10:58:14 +01:00
François Laignel
dfbc0d3975
Move jitterbuffer to its own directory module
2019-12-21 10:45:43 +01:00
François Laignel
0221524a10
Update to tokio release 0.2.5 + throttling
2019-12-21 08:56:43 +01:00
François Laignel
e8f5191ee7
ts: Pad wrapper for async processing
...
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/170#note_276334
and https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/204
2019-12-21 08:56:43 +01:00
François Laignel
ff470e9799
ts: move iocontext.rs to runtime/executor.rs
...
Part of: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/170
2019-12-19 20:44:00 +01:00
François Laignel
8eec141517
threadsharing: migrate to async/await and tokio 0.2.0-alpha.6
...
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/merge_requests/164
2019-12-19 20:44:00 +01:00
Sebastian Dröge
ccfb8246be
Fix compilation after gstreamer-rs!383
2019-12-18 08:17:42 +02:00
Sebastian Dröge
1ae57967ae
Move debug categories from an instance member to lazy_static
...
Simplifies the code a bit and less state to carry around.
2019-10-31 23:35:11 +01:00
Sebastian Dröge
04bc1a6b65
ts-udpsrc: Remove redundant semicolons
2019-10-04 12:06:47 +03:00
Mathieu Duponchelle
9897336896
jitterbuffer: flush RTPJitterBuffer when going to NULL
...
and cancel our timer
2019-10-03 15:56:07 +00:00
Mathieu Duponchelle
8a4d517dec
jitterbuffer: fix tear down
...
- Release pending future id in READY -> NULL
- Verify that we still have an io_context in the timeout's closure
2019-10-03 15:56:07 +00:00
Sebastian Dröge
b84388b0f3
threadshare: Fix shutdown race condition
...
We might've already handled the shutdown unparking while doing the
previous turn(s), so we have to check the atomic bool afterwards again
and before waiting (potentially) forever.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/issues/75
2019-10-02 12:02:09 +03:00
Mathieu Duponchelle
5976c9c1e4
jitterbuffer: timeouts may be called context_wait / 2 too early
...
Take this into account to determine what packets need sending out.
2019-09-24 15:17:27 +02:00
Mathieu Duponchelle
c5d5cdcd9d
jitterbuffer: discard packets with invalid pts
...
When RTPJitterBuffer resets itself in caluclate_pts(), it returns
GST_CLOCK_TIME_NONE and the packet should be discarded, according
to the behaviour of the standard jitterbuffer.
2019-09-24 15:17:22 +02:00
Mathieu Duponchelle
ec56fee368
jitterbuffer: fix packet_spacing calculation
...
When encountering an unexpected gap in received seqnums, ips_pts
and ips_rtptime must be reset to avoid calculating a potentially
invalid packet spacing the next time sequential packets are
received.
2019-09-12 15:29:18 +02:00
Sebastian Dröge
e7053bc046
threadshare: Don't keep timers locked while waiting for IO
2019-09-09 13:55:56 +03:00
Sebastian Dröge
5f9d649021
threadshare: Handle context-wait==0 by waiting on IO
2019-09-09 12:37:18 +03:00
Sebastian Dröge
b05fb902f9
Remove usage of subclassing feature, it's the default now
2019-09-09 10:45:06 +03:00
Sebastian Dröge
1084178e95
jitterbuffer: Minor code cleanup
2019-09-07 10:53:11 +03:00
Sebastian Dröge
83cc8104a1
Fix or silence all remaining clippy warnings
...
Also ignore common errors we don't care about when running clippy and
make clippy errors fail the CI.
2019-09-07 10:42:07 +03:00
Mathieu Duponchelle
2c7775125a
tests/appsrc: remove unrelated jitterbuffer "tests"
...
This was mistakenly staged during development for !161
2019-09-06 21:13:37 +02:00
Mathieu Duponchelle
9d7e304fc6
threadshare: address clippy errors
2019-09-06 19:21:07 +02:00
Mathieu Duponchelle
202ff408e7
jitterbuffer: share context downstream
...
.. and execute pending futures after pushing buffers
2019-09-06 14:33:39 +00:00
Mathieu Duponchelle
5496067925
jitterbuffer: initial thread sharing support
2019-09-06 14:33:39 +00:00
Sebastian Dröge
33cb599464
threadshare/iocontext: Add custom interval timer implementation
...
This knows about our throttled event loop and ensures that timers are
triggered at most 1 throttle time later instead of 2.
2019-09-06 14:33:39 +00:00
Mathieu Duponchelle
b7e55836c1
WIP: thread-sharing jitterbuffer
...
Actual thread-sharing will follow!
2019-09-06 14:33:39 +00:00
François Laignel
0e11ac87d3
Update for new {Value, StructureRef}::get
signature
...
See https://github.com/gtk-rs/glib/pull/513
and https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/310
2019-08-13 15:29:28 +02:00
Mathieu Duponchelle
da2332d814
ts-queue: Make PendingQueue a proper struct
2019-08-09 11:44:47 +00:00
Mathieu Duponchelle
892c812669
ts-queue: split up enqueue_item
...
This is far from a full refactoring, but it makes the current
implementation slightly easier to understand
2019-08-09 11:44:47 +00:00
Ray Tiley
ccd607707d
threadsharing/udpsrc: Fix build on Windows
2019-08-08 10:32:19 -04:00
Sebastian Dröge
f149f8f1b5
Don't use ONCE_INIT anymore now that Once::new() is const
2019-07-11 16:41:42 +03:00
Sebastian Dröge
fbbd70950a
Fix a few more clippy warnings
2019-07-11 11:20:39 +03:00
Sebastian Dröge
caeff6f968
threadshare/udpsrc: Use MaybeUninit instead of mem::zeroed()
2019-07-10 17:20:45 +03:00
Sebastian Dröge
acc4b6a7e2
Update versions to 0.6.0
2019-07-07 13:20:15 +03:00
Sebastian Dröge
b4efa42d8f
Fix various clippy warnings
2019-07-04 18:56:33 +03:00
Sebastian Dröge
11bd909bf1
Update rand to 0.7 and rusoto to 0.40
2019-07-02 18:16:23 +03:00
Sebastian Dröge
50037325ff
Explicitly add dyn
keyword to trait objects
...
Trait objects without are deprecated with the latest nightly and this
makes it more clear that we're doing dynamic dispatch anyway.
2019-06-06 09:26:02 +03:00
Guillaume Desmottes
53e530f7db
port all plugins to new register API
...
Rank is now an enum rather than a u32
2019-06-04 14:35:10 +05:30
ahamedsajeer.15
dc45b7f8ac
Add build.rs that provides a version number, release date and other details
2019-06-03 11:11:29 +00:00
Sebastian Dröge
2fc89ced15
Fix various compiler warnings
2019-05-28 04:43:54 +02:00
Sebastian Dröge
fbee00caab
Update for gstreamer gst_plugin_define! API changes
2019-05-27 20:31:39 +00:00
Sebastian Dröge
9bccc50add
Update for gstreamer-rs API changes
2019-05-24 13:09:32 +02:00
Sebastian Dröge
8486fb0b41
threadshare/tcpclientsrc: Fix build of test with changes gst::Sample API
2019-04-23 21:35:51 +03:00
Sebastian Dröge
129f6a28b0
Update for gstreamer-rs/glib/etc API changes and add more explicit Some()
2019-04-16 10:10:16 +03:00
Sebastian Dröge
f5b88d37c5
threadshare: Don't drift slowly when throttling the main context
...
Instead of taking a new time every iteration, take it once in the
beginning and add our wait time on every iteration. This prevents
accumulating errors and slowly drifting.
2019-04-15 18:43:01 +03:00
Abdul Rehman
2f3139dea2
ts-udpsrc: Add retrieve-sender-address property
...
Fixes #41
2019-03-13 21:07:53 +05:00
Sebastian Dröge
aa325ea98d
Fix various clippy warnings
2019-02-21 20:12:09 +02:00
Sebastian Dröge
01911b0ca7
ts-udpsrc: Fix build on Windows
2019-02-07 10:31:47 +02:00
Sebastian Dröge
a2582afed3
ts-udpsrc: Fix build on Windows
...
By disabling socket sharing there. This is blocked by PRs to mio/tokio
currently.
2019-02-07 10:31:47 +02:00
Sebastian Dröge
6286e496ba
Fix build with GLib and GTK changes
2019-02-07 09:54:03 +02:00
Sebastian Dröge
9db02cb55e
Fixes for gstreamer-rs API changes
...
Creating pad templates can return None now.
2019-01-29 17:33:06 +02:00
Sebastian Dröge
d7fc5ca272
Set caps on the harness in tests before pushing the first buffer
...
Otherwise there will be warnings about data flow before segment events,
as harness is only sending the segment event together with the caps.
2019-01-21 17:34:44 +02:00
François Laignel
f5a398b21e
Update gstreamer-rs/gstreamer bool to Result changes
2019-01-18 10:00:45 +02:00
Sebastian Dröge
873d177322
threadshare: Update for GLib API changes
2019-01-16 17:30:26 +02:00
François Laignel
e930133bdf
Update for gstreamer-rs MR 200
...
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/merge_requests/200
2019-01-12 18:00:04 +01:00
Sebastian Dröge
04955f61d7
Update to reqwest 0.9, rand 0.6 and parking_lot 0.7
2018-12-19 14:32:03 +02:00
Sebastian Dröge
f374d7fedf
Remove unneeded ObjectSubclass::new() functions where not needed
2018-12-19 13:23:02 +02:00
Sebastian Dröge
fb741f26f3
Update for glib property API changes
2018-12-18 11:23:45 +02:00
Sebastian Dröge
0792fe4f1a
ts-appsrc: Fix deadlock during shutdown
...
The IO Context has to be alive longer than the other parts
of the state. Otherwise a deadlock can happen between shutting down
the IO context (thread join while the state lock is held) and stuff
happening on the IO context (which might take the state lock).
2018-12-13 17:13:40 +02:00
Sebastian Dröge
e64a9b4a1a
Port threadshare plugin to new subclassing API
2018-12-06 13:03:04 +02:00
Sebastian Dröge
4d87c11293
Run everything through latest rustfmt again
2018-12-04 19:01:40 +02:00
Sebastian Dröge
3026e56cfb
ts-udpsrc: Creating a gio::Socket from a raw fd/socket is unsafe
...
So put it into an unsafe block.
2018-12-03 13:02:35 +02:00
Sebastian Dröge
9750195caa
ts-udpsrc: Dup the socket so that both tokio and GIO can take ownership of it
...
Otherwise both would be closing the same socket, which a) breaks the
second user of the socket if any and b) could on the second close cause
a completely unrelated socket to be closed.
Windows part of the code is untested.
2018-11-30 19:39:39 +02:00
Sebastian Dröge
40426a2cf6
Use new boxed type support from the GLib bindings
2018-11-29 21:01:02 +02:00
Sebastian Dröge
32265412f3
Change all links/mentions from gst-plugin-rs to gst-plugins-rs
2018-11-26 11:52:09 +01:00
Sebastian Dröge
8b7f0b40ea
ts-appsrc: Rewrite test around Harness
2018-11-13 18:58:06 +02:00
Sebastian Dröge
bcc0bb0d7d
ts-udpsrc: Add unit test for socket re-use and the socket/used-socket properties
2018-11-13 18:58:06 +02:00
Sebastian Dröge
941b83a1d6
ts-udpsrc: Rewrite unit test around gst_check::Harness
2018-11-13 18:50:54 +02:00
Sebastian Dröge
ab08cbd412
ts-udpsrc: Implement socket and used-socket properties like in udpsrc
2018-11-13 14:13:23 +02:00
Sebastian Dröge
4fb18382c2
threadshare: register plugin static in integration test
...
After a `cargo clean` the shared library is not yet present if the test is started with `cargo test`.
2018-11-05 13:47:34 +02:00
Sebastian Dröge
73a7be5ef5
Run gst-plugin-threadshare through cargo fmt
2018-11-05 13:43:38 +02:00
Sebastian Dröge
6c32b702f0
Fix build with gst-plugin-rs API changes
2018-11-05 13:43:11 +02:00
Sebastian Dröge
20bec35c68
Merge gst-plugin-threadshare into gst-plugin-rs
2018-11-05 13:40:43 +02:00
Sebastian Dröge
132986cf71
threadshare: Fix deprecation warnings and move to released versions of tokio
2018-11-05 13:36:47 +02:00
Sebastian Dröge
4e8c6fd293
threadshare: Change gobject-subclass repository URI
2018-11-05 13:36:47 +02:00
Sebastian Dröge
fbc0a04cff
threadshare: Run everything through rustfmt again
2018-11-05 13:36:47 +02:00
Sebastian Dröge
55f9b84008
threadshare: Drop support for multi-threaded runtime as it is consistently slower
...
And switch to the new built-in spawning support of CurrentThread
2018-11-05 13:36:47 +02:00
LEE Dongjun
20149c7293
threadshare: Rename udpsrc_benchmark.rs to benchmark.rs.
2018-11-05 13:36:47 +02:00
LEE Dongjun
6827b9509e
threadshare: Add TcpClient elements and unit test.
2018-11-05 13:36:47 +02:00
LEE Dongjun
df86b67117
threadshare: Rename udpsocket file to socket file
2018-11-05 13:36:47 +02:00
LEE Dongjun
1ac85c91e5
threadshare: Generalize UdpSocket to Socket.
2018-11-05 13:36:47 +02:00
Sebastian Dröge
ec3e0875a1
threadshare: Use downcast_ref() instead of downcast()
2018-11-05 13:36:47 +02:00
Sebastian Dröge
987f78de42
threadshare: Move to tokio_threadpool and tokio_current_thread crates
2018-11-05 13:36:47 +02:00
Sebastian Dröge
23b25b210b
threadshare: Update to rand 0.5
2018-11-05 13:36:47 +02:00
Sebastian Dröge
8cdb47e61e
threadshare: Also set reuse address/port settings for non-multicast sockets
...
And share more code between unicast/multicast socket creation
2018-11-05 13:36:47 +02:00