Mathieu Duponchelle
ccf076ed1e
webrtcsink: don't panic in twcc-stats callback
...
If webrtcbin was disposed of at this point, simply return
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/345
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1217 >
2023-05-24 13:35:26 +02:00
François Laignel
9a59763df1
webrtcsink: wait for Sessions to end
...
`State::finalize_session()` asynchronously sets the Session pipeline to Null.
In some cases, sessions `webrtcbin` could terminate their transition to Null
after `webrtcsink` had reached Null.
This commit adds a set of `finalizing_sessions`. When the finalization process
starts, the session is added to the set. After `webrtcbin` has reached the Null
state, the session is removed from the set and a condvar is notified.
In `unprepare`, `webrtcsink` loops until the `finalizing_sessions` set is
empty, awaiting for the condvar to be notified when it's not.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1221 >
2023-05-24 10:18:47 +02:00
François Laignel
b68e2a1ed0
webrtcsink: remove unneeded mut
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1221 >
2023-05-24 10:18:43 +02:00
Arun Raghavan
b05c21680d
Revert "fmp4: Return a running time in get_next_time()"
...
This reverts commit 04bb7b4db0
.
As Sebastian points out, the chunk PTS is already in running time, so
this was wrong from the start.
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/363
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1219 >
2023-05-23 09:27:00 -04:00
Thibault Saunier
04e35e86d6
webrtcsrc: Do not pass raw caps in the transceiver
...
That was not making sense.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1214 >
2023-05-18 18:23:56 +03:00
Thibault Saunier
e73d7082a6
webrtcsrc: Fix caps used when creating transceiver
...
We used to pass all media keys and attributes to the caps which
incorrect. Instead we should be using only the keys from the map
and remove all information related to rtcp which is irrelevant
to create the transceiver.
This also simplifies the code.
New caps look like:
```
Caps(
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 96,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "VP8",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 102,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "1",
profile: (gchararray) "baseline",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 104,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "0",
profile: (gchararray) "baseline",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 106,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "1",
profile: (gchararray) "constrained-baseline",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 108,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "0",
profile: (gchararray) "constrained-baseline",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 127,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "1",
profile: (gchararray) "main",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 39,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "H264",
packetization-mode: (gchararray) "0",
profile: (gchararray) "main",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 98,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "VP9",
profile-id: (gchararray) "0",
},
application/x-rtp(memory:SystemMemory) {
media: (gchararray) "video",
payload: (gint) 100,
clock-rate: (gint) 90000,
encoding-name: (gchararray) "VP9",
profile-id: (gchararray) "2",
},
)
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1214 >
2023-05-18 18:23:56 +03:00
Seungha Yang
3406e604cd
fallbacksrc: Don't apply fallback-audio-caps to the main audio stream
...
Intended behavior is configuring audio convert/resample elements
only for the fallback stream and also fallback-audio-caps is set.
Video and image stream are doing it as intended already.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1213 >
2023-05-17 23:49:09 +09:00
Guillaume Desmottes
7ebf2d7a4f
fallbackswitch: document the pad priority ordering
...
I just wasted lots of time trying to figure out why my higher priority
pad wasn't used...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1208 >
2023-05-15 16:13:20 +02:00
Sanchayan Maity
067d47f0ec
videofx: border: Do not advertise I420 for non-zero border radius
...
In certain cases, roundedcorners would negotiate to I420 even when user
supplied a non-zero border radius.
For example, the below pipeline leads to I420 being negotiated even
though a non-zero border radius was given. Ideally, this pipeline
should have failed at the negotiation stage.
```bash
gst-launch-1.0 -v \
videotestsrc num-buffers=1000 pattern=white ! \
video/x-raw,width=320,height=180 ! \
roundedcorners border-radius-px=10 ! videobox border-alpha=0 top=-10 left=-10 right=-10 bottom=-10 fill=yellow ! \
compositor name=comp sink_0::xpos=960 sink_0::ypos=0 sink_0::width=320 sink_0::height=180 sink_0::alpha=1.0 sink_1::xpos=960 sink_1::ypos=180 sink_1::width=320 sink_1::height=180 sink_1::alpha=1.0 \
sink_2::xpos=960 sink_2::ypos=360 sink_2::width=320 sink_2::height=180 sink_2::alpha=1.0 sink_3::xpos=0 sink_3::ypos=0 sink_3::width=960 sink_3::height=720 sink_3::alpha=1.0 ! \
video/x-raw,width=1280,height=720! x264enc ! mp4mux ! filesink location=test.mp4 \
videotestsrc num-buffers=1000 pattern=red ! \
video/x-raw,width=320,height=180 ! roundedcorners border-radius-px=10 ! comp. \
videotestsrc num-buffers=1000 pattern=blue ! \
video/x-raw,width=320,height=180 ! roundedcorners border-radius-px=10 ! comp. \
videotestsrc num-buffers=1000 pattern=green ! \
video/x-raw,width=960,height=720 ! roundedcorners border-radius-px=10 ! comp.
```
If border radius is non-zero, we should not really allow negotiation
to select I420. Fix this by returning only A420 for border-radius > 0
in `transform_caps` instead of returning both like earlier.
Another example of a simpler pipeline like below which would earlier work
```bash
gst-launch-1.0 videotestsrc pattern=red ! videoconvert ! video/x-raw,width=1923,height=1087,format=I420 ! roundedcorners border-radius-px=40 ! video/x-raw,format=I420 ! videoconvert ! gtksink
```
now fails with
```bash
WARNING: erroneous pipeline: could not link roundedcorners0 to videoconvert1, roundedcorners0 can't handle caps video/x-raw, format=(string)I420
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1211 >
2023-05-15 12:19:09 +05:30
François Laignel
7ba0073052
use Pad builders for optional name definition
...
Also, apply auto-naming in the following cases
* When building from a non wildcard-named template, the name of the template is
automatically assigned to the Pad. User can override with a specific name by
calling `name()` on the `PadBuilder`.
* When building with a target and no name was provided via the above, the
GhostPad is named after the target.
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/448
Auto-naming discussion: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1255#note_1891181
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1197 >
2023-05-12 12:55:31 +02:00
François Laignel
8e93d294e5
Update to argumentless {Bin,Pipeline}::new
...
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/449
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1197 >
2023-05-12 12:55:31 +02:00
Sebastian Dröge
32d59c31d8
fmp4: examples: Update to dash-mpd 0.9
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1210 >
2023-05-12 09:45:40 +03:00
Seungha Yang
773fcd0780
transcriberbin: Add "language-code" property
...
Proxy the child transcriber element's property so that transcriberbin
can apply the property with required state management
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1205 >
2023-05-10 19:12:01 +00:00
Antonio Kevo
cf21bfabf2
fmp4: Use updated start_pts when checking stream filled
...
After calculating the earliest pts, the fragment_start_pts and
chunk_start_pts in State are updated. However, when checking if the
stream is filled, the previous start_pts (set to None) is used instead.
This means that chunk_filled and fragment_filled will be false the first
time aggregate() is called, assuming timeout is false, all_eos is false,
and the sinkpad is not EOS. This requires aggregate() having to be
called a second time before the first fragment is sent.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1207 >
2023-05-10 16:09:25 +02:00
Sebastian Dröge
8b2b12e767
Update CHANGELOG.md for 0.10.7
2023-05-09 20:48:43 +03:00
François Laignel
680d5221db
net/webrtc: src: add signal "request-encoded-filter"
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1202 >
2023-05-09 12:02:15 +02:00
François Laignel
092ae1fec8
net/webrtc: sink: add signal "request-encoded-filter"
...
The new "request-encoded-filter" signal is emitted when the encoder and related
elements are added to the pipeline. When defined, the element returned by the
signal is inserted between the encoder and the payloader.
The transformation can be reverted using the [insertable streams API] on the
receiver side.
[insertable streams API]: https://developer.mozilla.org/en-US/docs/Web/API/Insertable_Streams_for_MediaStreamTrack_API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1202 >
2023-05-09 11:17:32 +02:00
François Laignel
dc5ddd3022
net/webrtc: sink: abort stats collection before stopping the Signaller
...
In some rare cases, the webrtc-test entered a deadlock while executing
`WebRTCSink::unprepare`. Attaching gdb to a blocked instance showed:
* `gstrswebrtc::signaller:👿 :Signaller::stop()` parked, waiting for a
`Condvar` in `Signaller::stop()`. This was most likely awaiting for the
receive task to complete while it was locked in `element.end_session()`.
This code path is triggered from `unprepare` with the `State` `Mutex` locked.
* `webrtcsink:👿 :WebRtcSink::process_stats` waiting for a contended `Mutex`,
which is also the `State` `Mutex`. This prevented completion of the signal
`gst_webrtc_bin_get_stats`.
This commit aborts the task in charge of periodically collecting stats and
ensures any remaining iteration completes before requesting the Signaller to
stop.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1202 >
2023-05-09 10:26:11 +02:00
François Laignel
eca269cbf2
net/webrtc: src: don't set stun-server on webrtcbin when our property is None
...
... otherwise an error occurs about the stun-server address being an empty
string which doesn't comply with the expected address format.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1202 >
2023-05-09 10:26:07 +02:00
Sebastian Dröge
de1c8ece43
deny: Update
2023-05-08 18:44:12 +03:00
Sebastian Dröge
cb5b527d74
Update to AWS SDK 0.27 and async-tungstenite 0.22
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1199 >
2023-05-02 15:30:00 +03:00
Guillaume Desmottes
76c8279101
fmp4: define minBufferTime in example mpd
...
Required to validate the manifest with https://beta.conformance.dashif.org/
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1196 >
2023-04-27 14:16:40 +02:00
Sebastian Dröge
05ee55d617
fmp4: Update example to dash-mpd 0.8
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1193 >
2023-04-25 08:54:48 +03:00
Nick Steel
3d01c9b363
spotify: check cached creds username before use
...
If a username was specified, only use cached credentials that match
that username.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1192 >
2023-04-24 15:29:22 +01:00
Jan Beich
8d6751c88d
gtk4: unbreak wayland, x11egl, x11glx features on non-Linux
...
As the features are non-default leave the responsibility to filter by
platform to consumers.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1191 >
2023-04-22 12:58:29 +00:00
Lily Foster
8e4fd2c167
meson: support rust cross-compiling with cargo wrapper
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1188 >
2023-04-21 16:55:37 +00:00
Sebastian Dröge
41ba4b2bc3
deny: Update
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1187 >
2023-04-21 10:48:10 +00:00
Sebastian Dröge
5451035215
Update async-tungstenite and AWS SDK dependencies
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1187 >
2023-04-21 10:48:10 +00:00
John King
2bd2e501d9
spotify: fix credentials cache
...
Cache Spotify response instead of username and password.
This should resolve frequent "New login to Spotify" emails.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1183 >
2023-04-21 09:12:47 +02:00
Sebastian Dröge
cc3646640e
Fix a couple of new Rust 1.69 clippy warnings
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1186 >
2023-04-20 16:47:45 +03:00
Lily Foster
760e97c7e7
meson: avoid passing the --features flag to wrapper when empty
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1184 >
2023-04-18 16:26:11 -04:00
Edward Hervey
721d17e181
rtpgccbwe: Don't process empty lists
...
The structure parsing could result in an empty vector. Don't do any processing
since the loss code assumes it's non-empty for average estimates which would
result in weird/invalid results.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1181 >
2023-04-15 19:35:27 +02:00
Mathieu Duponchelle
dbdb9bc164
webrtcsink: fix navigation data channel
...
At some point, presumably recently, the data channel stopped being
requested in Ready, making webrtcbin refuse to create it.
There was quite a lot of churn recently so I couldn't pinpoint the
breaking commit easily.
Fix by simply restoring the correct behavior of requesting the channel
after going to the Ready state
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/341
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1180 >
2023-04-14 14:26:22 +02:00
Sebastian Dröge
47159ad3c2
Make sure to keep around and drop bus watches after usage in all the examples
2023-04-14 12:46:43 +03:00
Arun Raghavan
aabfb61834
ffv1dec: Drop rank for now
...
We'll keep the rank lower than avdec_ffv1, at least until we're
comfortable with support for the entire range of possible inputs working
well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1174 >
2023-04-13 15:58:49 +00:00
Mathieu Duponchelle
f1fd8d84c3
webrtc: extract a BaseWebRTCSink
...
For documentation purposes, AwsKVSWebRTCSink should not inherit from
another element.
+ Mark base class as plugin API and update plugin cache
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1178 >
2023-04-13 15:06:59 +00:00
Guillaume Desmottes
367b98bfcb
fmp4: dash_vod example: reformat
...
Not sure why rustfmt updated those because of my previous change.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1177 >
2023-04-13 09:50:15 +02:00
Guillaume Desmottes
371ac83169
fmp4: dash_vod example: use dash-mpd to generate the manifest
...
Maybe a bit overkill for such simple example but more exemplary for
actual applications.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1177 >
2023-04-13 09:50:11 +02:00
Loïc Le Page
dba91bceca
webrtc: fix documentation after signaller interface changes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1175 >
2023-04-12 20:19:22 +02:00
Thibault Saunier
8f2273328b
webrtcsrc: Return bool en 'end-session' as required
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1172 >
2023-04-12 12:17:56 +00:00
Sebastian Dröge
5dcdf645d6
net: ndi: Update to libloading 0.8
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1173 >
2023-04-12 11:03:05 +03:00
Sebastian Dröge
011f0d5fee
deny: Update for miniz_oxide dependency duplication
2023-04-11 11:14:08 +03:00
Mathieu Duponchelle
355f925954
tttocea608: specify raw 608 field
...
The element can only output field=0 raw 608 data.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1166 >
2023-04-11 09:26:24 +10:00
Mathieu Duponchelle
f366c20869
awstranscriber: fix what we send over for translations
...
Prior to this commit, we were sending over words concatenated together
with no separators, for instance "Idon'twanttobeanemperor".
The translation service seems clever enough to translate the contents
anyway, but there is no reason to make its task harder than necessary,
and it didn't re-add separators when the target language was the same as
the source language, which resulted in less than ideal output.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1171 >
2023-04-10 20:47:12 +00:00
Mathieu Duponchelle
408fd2030c
awstranscriber: slight debug improvement
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1171 >
2023-04-10 20:47:12 +00:00
Mathieu Duponchelle
4fcbb6ae61
textwrap: add some logs
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1171 >
2023-04-10 20:47:12 +00:00
Guillaume Desmottes
3eca8c60e3
ci: check for typos
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1170 >
2023-04-10 13:35:32 +02:00
Guillaume Desmottes
403004a85e
fix typos
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1170 >
2023-04-10 13:35:32 +02:00
Mathieu Duponchelle
a455819871
webrtcsink: fix tracking of signaller state
...
For the signaller to get stopped, we need to remember that we started it
in the first place.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1167 >
2023-04-10 07:58:10 +03:00
Mathieu Duponchelle
3368f55a88
webrtcsink: don't return value from error closure
...
the signal doesn't expect a return value, which meant we were panicking
as soon as the signaller tried to report an error.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1167 >
2023-04-10 07:58:10 +03:00