summaryrefslogtreecommitdiff
path: root/ext
Commit message (Collapse)AuthorAgeFilesLines
...
* webrtc: Remove reundundant context object in transportsendbinOlivier Crête2021-05-182-93/+55
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260>
* webrtc: Wait until ICE is connected to start DTLS handshake processOlivier Crête2021-05-182-8/+44
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260>
* webrtcbin: Remove pad probe on nicesinkOlivier Crête2021-05-182-35/+0
| | | | | | | | This pad probe is no longer necessary, libnice now drops all buffers before the stream is connected. This pad problem also caused deadlocks in some situations. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260>
* kate: Initialize debug categoriesOlivier Crête2021-05-185-10/+10
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2258>
* openh264: Don't use GOnce for ABI checkOlivier Crête2021-05-131-16/+8
| | | | | | | It turns out the value used for g_once_* APIs can't be zero. And this is a very cheap check, so let's just do it every time. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2240>
* webrtcbin: Intersect answer with codec prefs & capabilitiesOlivier Crête2021-05-131-4/+19
| | | | | | | In case the local capabilities changed since the last negotiaton, we need to re-intersect and see if the result would be different. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Ignore current caps for codec negotiationOlivier Crête2021-05-131-2/+0
| | | | | | | | | | On the sink pad, we want the caps of the current stream, those are the "received_caps" field. If we haven't received caps yet, then we only care about the caps that the next element can accept, that is the caps from the peer pad (and the preferences). Otherwise, we prevent re-negotiation to a better codec when possible. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Remove dead codeOlivier Crête2021-05-131-13/+8
| | | | | | | The function is only called to create an offer, so no need to pass the offer parameter and then check it. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Refactor codec preference retrievalOlivier Crête2021-05-132-45/+103
| | | | | | | | | Now intersect against pads on both sides if they are available. If the intersection fails, we now just reject the creation of the offer or answer as it means that the codec_preferences are too restrictive or that the caps on both sides the webrtcbin are not compatible. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Intersect codec preferences with caps from padsOlivier Crête2021-05-131-9/+29
| | | | | | | When creating an offer or an answer, also take into account the caps on the pads as well as the codec preferences when both are set. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Implement caps queries on sinkpad based on codec preferencesOlivier Crête2021-05-131-0/+75
| | | | | | Also includes a unit test. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Hold transceiver lock when accessing codec_preferencesOlivier Crête2021-05-131-52/+65
| | | | | | This is required to allow the applications to modify the preferences. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
* webrtcbin: Fix deadlock when receiving new sctp streamJohan Sternerup2021-05-122-30/+49
| | | | | | | | | | | | | | | | | | | | When receiving an sctp message for a stream that not yet has an sctpdec pad associated with it means we end up in _on_sctpdec_pad_added. At this point we're holding the sctpassocation lock. Then it's not possible to take the pc_lock because then code executing under the pc_lock (which means anything in the webrtc thread) may not take the sctpassociation lock. For example, running the data channel close procedure from the webrtc thread means we eventually end up sending a SCTP_RESET_STREAMS packet which needs to grab the sctpassociation lock. This means _on_sctpdec_pad_added simply cannot take the pc_lock and also it is not possible to postpone the channel creation as we need to link the pads right there. The solution is to introduce a more granular dc_lock that protects only the things that needs to be done to create the datachannel. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2186>
* webrtcbin: Support closing of data channelsJohan Sternerup2021-05-125-36/+63
| | | | | | | | | | | | | | | | | | | | | | | Support for closing WebRTC data channels as described in RFC 8831 (section 6.7) now fully supported. This means that we can now reuse data channels that have been closed properly. Previously, an application that created a lot of short-lived on-demand data channels would quickly exhaust resources held by lingering non-closed data channels. We now use a one-to-one style socket interface to SCTP just like the Google implementation (i.e. SOCK_STREAM instead of SOCK_SEQPACKET, see RFC 6458). For some reason the socket interface to use was made optional through a property "use-sock-stream" even though code wasn't written to handle the SOCK_SEQPACKET style. Specifically the SCTP_RESET_STREAMS command wouldn't work without passing the correct assocation id. Changing the default interface to use from SOCK_SEQPACKET to SOCK_STREAM now means we don't have to bother about the association id as there is only one association per socket. For the SCTP_RESET_STREAMS command we set it to SCTP_ALL_ASSOC just to match the Google implementation. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2186>
* openaptx: Fix to v0.2.0 due to license changeDaniel Stone2021-05-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | openaptx has recently changed its license to explicitly exclude 'Freedesktop projects' from using it, which would include GStreamer, as well as shifting to base terms of GPLv3: https://github.com/pali/libopenaptx/commit/811bc18586d634042618d633727ac0281d4170b8 This unilateral license change is legally dubious in many ways. The original work came from ffmpeg under the LGPL v2.1, to which third parties may not add additional restrictions (per sections 2 and 7 of the LGPL v2.1), so LGPLv2.1 + may-not-use restrictions are not permissible without the explicit consent of the original copyright holder. The upgrade to LGPL v3.0 without explicit consent from the original copyright holder is in itself permissible through the upgrade terms of the LGPL, however the additional restrictions imposed again conflict with sections 7 and 10 of the GPLv3 (as the base of the LGPLv3, with those sections not being invalidated by the additional LGPLv3 text). Though it does not impact the legal validity of the redeclaration of licensing, the claims that freedesktop.org has violated the terms of the openaptx license in the past are false; the work was contributed to the PulseAudio project with an explicit open license, with the original contributor later attempting to revoke permission for its use, despite the explicit terms of the license giving no ability to do so as they lack a change-of-heart provision. The claims that Collabora violated the license are even more baseless; they are based on an assertion that when I (acting on behalf of freedesktop.org rather than Collabora, in my own unpaid time) banned users from freedesktop.org's GitLab instance due to sustained violations of the Code of Conduct users agree to when creating an account on that platform, this somehow constituted a violation of the license. Even if Collabora were somehow involved in this - which they were not at all - there is no requirement under open licenses that users be given unlimited access under all terms to any platform on the internet. Such terms would mean that open development could only be conducted on completely unmoderated platforms, which does not stand up to any scrutiny. Regardless of the declared license having no legal validity, the LGPL's explicit provision in both v2.1 and v3.0 for such additional restrictions to be stripped, and the low likelihood of it ever being used together with GStreamer as its licensing terms would not be acceptable to any distribution, enforcing a version check seems like the safest way to ensure complete legal clarity, not put users or downstreams in any jeopardy, and comply with the author's stated wishes for v0.2.1 and above to not be used by GStreamer. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2235>
* wpe: Properly free property fieldsJan Alexander Steffens (heftig)2021-05-072-2/+6
| | | | | | | The set location (in two places) and loaded bytes were not freed when the element is destroyed. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2222>
* wpe: Properly lock property fieldsJan Alexander Steffens (heftig)2021-05-071-7/+30
| | | | | | | | | | | | Use the object lock for the following fields: - `bytes`: Written by the `load-bytes` signal unless running; consumed on start. - `draw_background`: Read and written by the `draw-background` property. - `location`: Read and written by the `location` property and the URI handler. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2222>
* webrtc: only add nack pli by default if kind is videoMatthew Waters2021-05-062-2/+4
| | | | | | | Sending/receiving PLI's (Picture Loss Indication) for non-video doesn't really make sense. This also matches what the browsers do. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2220>
* webrtc: move webrtc_kind_from_caps() to utilsMatthew Waters2021-05-063-29/+33
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2220>
* hlssink(2): Don't write deprecated EXT-X-ALLOW-CACHE metadataSebastian Dröge2021-05-064-13/+5
| | | | | | | | It's deprecated since quite a few versions and various validators complain about it. Instead of the in-manifest metadata this should be handled by the normal HTTP caching headers. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2221>
* Use gst_element_request_pad_simple...François Laignel2021-05-057-12/+13
| | | | | | Instead of the deprecated gst_element_get_request_pad. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2180>
* Fix build with OpenEXR 3Antonio Rojas2021-05-041-0/+1
| | | | | | Add a header that is no longer transitively included Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2195>
* webrtc: advertise support for transport-cc rtcp-fb by defaultMatthew Waters2021-04-291-3/+2
| | | | | | | Still requires explicit enabling by the application through the header extension on all the relevant payloaders. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2207>
* webrtc/stats: provide the twcc stats when availableMatthew Waters2021-04-291-5/+25
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2207>
* avtp: crf: Remove superfluous sink_event variableTimo Wischer2021-04-281-2/+0
| | | | | | | | | This variable was introduced by commit 12ad2a4bcd6c ("avtp: Introduce the CRF Sync Element") but it was never used: $ git log -G "sink_event" -- ext/avtp Signed-off-by: Timo Wischer <timo.wischer@de.bosch.com> Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2201>
* onnx: add plugin to apply ONNX neural network models to videoAaron Boxer2021-04-279-0/+1544
| | | | | | | | | | | | | | This MR provides a transform element that leverage ONNX runtime to run AI inference on a broad range of neural network toolkits, running on either CPU or GPU. ONNX supports 16 different providers at the moment, so with ONNX we immediately get support for Nvidia, AMD, Xilinx and many others. For the first release, this plugin adds a gstonnxobjectdetector element to detect objects in video frames. Meta data generated by the model is attached to the video buffer as a custom GstObjectDetectorMeta meta. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1997>
* webrtcbin: downgrade "dropping ICE candidates from SDP" from warning to ↵Nazar Mokrynskyi2021-04-231-1/+1
| | | | | | debug level Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2187>
* webrtcbin: Attach rtpbin even for data channelsOlivier Crête2021-04-221-25/+19
| | | | | | | This is required because the same transport may later be used for RTP. In which case the RTCP needs to flow bi-directionnally already. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2172>
* Fix missing unref of nice-agent causing sockets to never close.Frederich Munch2021-04-221-0/+1
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1960>
* webrtc: Fix sctp task's return type.Doug Nazar2021-04-221-1/+2
| | | | | | | | GstWebRTCBinFunc expects a GstStructure* return type. Fixes segfault on PowerPC. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2188>
* webrtcbin: Filter caps isn't fixedOlivier Crête2021-04-191-1/+1
| | | | | | | | Fix an assertion because the filter paramter passed to gst_caps_is_equal_fixed() wasn't fixed. So use the regular gst_caps_is_equal() instead. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2175>
* webrtcdsp: Propagate VAD to audio level metaPhilippe Normand2021-04-191-2/+15
| | | | | | | | | Whenever the voice activity changed on the stream, update or create an AudioLevelMeta and associate it to the corresponding buffer. Fixes #1073 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2170>
* cccombiner: Use correct enum when registering the max-scheduled propertySebastian Dröge2021-04-191-1/+1
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2171>
* wpe: Remove code targeting WebKit < 2.24Thibault Saunier2021-04-151-4/+0
| | | | | | We already depend on wk >= 2.24 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2165>
* wpe: Make threaded view singleton creation thread safeThibault Saunier2021-04-151-1/+6
| | | | | | It was leading to interesting failures. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2165>
* webrtcbin: Simplify answer_caps intersection code a littleOlivier Crête2021-04-121-16/+10
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Move GstPromise reply to operation frameworkOlivier Crête2021-04-123-43/+47
| | | | | | | This makes it possible to reply to all promises in a consistent way without having to do a unlock/relock that is always risky. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Make sure PC_LOCK is release when replying to promiseOlivier Crête2021-04-121-3/+11
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Take PC lock around all entry pointsOlivier Crête2021-04-121-1/+17
| | | | | | | All of those action signals change the internal state, so protect it by using the PC_LOCK Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Take PC_LOCK when requesting new padOlivier Crête2021-04-121-7/+14
| | | | | | This is needed to avoid having the state change under us. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Ensure that query caps method returns valid capsOlivier Crête2021-04-121-3/+25
| | | | | | | This means rejecting any caps that aren't fixed. Also, use a filter that will create unfixed caps if the other side just returns ANY. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Associate the stream with a new transceiverOlivier Crête2021-04-121-3/+4
| | | | | | | Otherwise, this newly created transceiver has no stream and it aborts later when it tries to connect the input pad. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Match unassociated transceiver by kind tooOlivier Crête2021-04-121-1/+12
| | | | | | | When a new m-line comes in that doesn't have a transceiver, only match existing transceivers of the same kind. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Fix typoe in name of error GstStructureOlivier Crête2021-04-121-1/+1
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Enforce direction on request sink pad with a specific nameOlivier Crête2021-04-121-1/+15
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Try to match an existing transceiver on pad requestOlivier Crête2021-04-121-0/+46
| | | | | | This should avoid creating extra transceivers that are duplicated. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Validate locked m-lines in set*DescriptionOlivier Crête2021-04-121-0/+58
| | | | | | | Verify that the remote description match the locked m-lines, otherwise just reject the SDP. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Remove unused session_mid_mapOlivier Crête2021-04-122-22/+0
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Enforce m-line restrictions when creating offerOlivier Crête2021-04-122-26/+94
| | | | | | | | | | | First fail the offer creation if the mid of an existing offer doesn't match a forced m-mline. Then, for all newly added mlines, first look for a transceiver that forces this m-line, then add a "floating" one, then the data channel. And repeat this until we're out of transceivers. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
* webrtcbin: Remember if a transceiver had a forced m-lineOlivier Crête2021-04-122-0/+8
| | | | Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>