He Junyan [Tue, 18 May 2021 06:09:01 +0000 (14:09 +0800)]
va: h265dec: Set LastSliceOfPic for multi sliced frames.
VA-API HEVC decoding needs to known which is the last slice of a
picture, but slices are processed sequencially, so we know the
last slice until all the slices are already pushed into the
VABuffer array.
In order to mark the last slice, they are pushed into the
VABuffer array with a delay of one slice: the first slice is
hold, and when the second slice come, the first one is pushed
while holding the second, and so on. Finally, at end_picture(),
the last slice is marked and pushed into the array.
Co-author: Victor Jaquez <vjaquez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2246>
Seungha Yang [Thu, 20 May 2021 08:03:15 +0000 (17:03 +0900)]
d3d11desktopdupsrc: Add support for desktop size/rotation mode change
Re-negotiates with updated size on desktop size
(i.e., resolution, scaling factor), and rotation mode change
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2268>
Jan Alexander Steffens (heftig) [Thu, 20 May 2021 08:09:57 +0000 (10:09 +0200)]
mpegtsmux: Fixup program array indices after stream removal
Each stream stores the `program_array_index` of its position in its
program's `streams` array. When we remove a stream from this array, we
need to correct the `program_array_index` of all streams that were
backshifted by the removal.
Also extract the removal into a new function and add some more safety
checks.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2266>
Seungha Yang [Thu, 20 May 2021 09:49:01 +0000 (18:49 +0900)]
d3d11memory: Protect map and unmap with device lock
We should lock memory object with gst_d3d11_device_lock() first
then GST_D3D11_MEMORY_LOCK() need to be used.
One observed deadlock case is that:
- Thread A takes d3d11 device lock
- At the same time, Thread B tries CPU map to d3d11memory which requires
d3d11 device lock as well, but it's already taken by Thread A.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2267>
Seungha Yang [Thu, 20 May 2021 09:38:17 +0000 (18:38 +0900)]
d3d11memory: Add trace log for debugging locking thread
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2267>
Seungha Yang [Thu, 20 May 2021 06:39:39 +0000 (15:39 +0900)]
audiolatency: Drop incoming downstream stick events
stream-start, caps, and segment events will be pushed by internal
audiotestsrc element.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2265>
Seungha Yang [Thu, 20 May 2021 06:28:13 +0000 (15:28 +0900)]
audiolatency: Use live mode audiotestsrc
Expected use case of audiolatency element is that mimic audio capture
device which is most likely live source. So audiolatency element
should use live mode as well.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2265>
Thibault Saunier [Wed, 19 May 2021 22:48:29 +0000 (18:48 -0400)]
wpe: Bump WPE dependency to 2.28
The new audio feature depends on WPE 2.28 so we should just bump our
requirement to that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2264>
Seungha Yang [Wed, 19 May 2021 15:51:08 +0000 (00:51 +0900)]
d3d11compositor: Fix missing D3D11 prefix
Fix typo, no functional change
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2262>
Thibault Saunier [Tue, 18 May 2021 21:49:23 +0000 (17:49 -0400)]
wpe: Update doc cache
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Thibault Saunier [Thu, 22 Apr 2021 03:14:13 +0000 (23:14 -0400)]
wpe: Properly respect LIBGL_ALWAYS_SOFTWARE
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Thibault Saunier [Sun, 2 May 2021 01:48:23 +0000 (21:48 -0400)]
wpe: Relay messages from WPE internal pipelines
It is based on a tracer as it allows us to very easily get
every message that are posted on any bus inside the process.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Thibault Saunier [Tue, 20 Apr 2021 00:46:46 +0000 (20:46 -0400)]
wpe: Base wpe audio implementation on a web extension
This makes the implementation simpler and enable us to map
webviews and audio stream much more easily
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Philippe Normand [Sun, 8 Dec 2019 13:16:38 +0000 (13:16 +0000)]
wpe: Enable WebAudio
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Philippe Normand [Sun, 8 Dec 2019 11:49:20 +0000 (11:49 +0000)]
wpe: Implement audio support
The wpesrc bin now exposes "sometimes" audio src pads, one for every PCM audio
stream created by WPEWebKit.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Thibault Saunier [Wed, 10 Mar 2021 20:27:52 +0000 (17:27 -0300)]
wpe: Move wpesrc to wpevideosrc and add a wrapper bin `wpesrc`
Currently the bin contains a single element but we are going
to implement audio support and expose extra pads for audio
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2252>
Doug Nazar [Tue, 18 May 2021 04:43:23 +0000 (00:43 -0400)]
sctp: Ensure pad is still a child of element before removal
During pipeline shutdown there are several competing paths to remove
pads. Avoids tests failing due to:
Unexpected critical/warning: Padname '':sink_1 does not belong to element sctpenc1 when removing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2256>
Doug Nazar [Mon, 17 May 2021 13:13:28 +0000 (09:13 -0400)]
sctp: Fix race of pad removal during reset/stop
Both reset & stop remove existing pads. Can result in warning from
gst_element_remove_pad().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2256>
Doug Nazar [Mon, 17 May 2021 13:11:54 +0000 (09:11 -0400)]
webrtcbin: Fix race bringing up sctp data channel
Notifying before pads are linked can cause the stream to fail to start.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2256>
Matthew Waters [Thu, 13 May 2021 11:11:30 +0000 (21:11 +1000)]
webrtcbin: advertise harder the rtcp-mux-only requirement
And ignore rtcp ICE candidates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2239>
Sid Sethupathi [Fri, 14 May 2021 15:47:05 +0000 (10:47 -0500)]
webrtcbin: update default jb latency docs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2242>
Doug Nazar [Tue, 18 May 2021 20:38:04 +0000 (16:38 -0400)]
dtls: Let sender know when we are flushing
Prevents endless loop during shutdown where we end up sending 0 bytes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2229>
Doug Nazar [Tue, 18 May 2021 20:31:47 +0000 (16:31 -0400)]
dtls: Add ability to set custom GstFlowReturn on callback error
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2229>
Olivier Crête [Wed, 19 May 2021 00:26:38 +0000 (20:26 -0400)]
webrtc: Remove reundundant context object in transportsendbin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260>
Olivier Crête [Wed, 19 May 2021 00:18:28 +0000 (20:18 -0400)]
webrtc: Wait until ICE is connected to start DTLS handshake process
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2260>
Olivier Crête [Tue, 18 May 2021 22:29:16 +0000 (18:29 -0400)]
webrtcbin: Remove pad probe on nicesink
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>
Olivier Crête [Tue, 18 May 2021 00:59:19 +0000 (20:59 -0400)]
kate: Initialize debug categories
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2258>
Víctor Manuel Jáquez Leal [Thu, 13 May 2021 08:27:49 +0000 (10:27 +0200)]
libs: va: Documentation and annotations.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2196>
He Junyan [Fri, 7 May 2021 09:05:38 +0000 (17:05 +0800)]
examples: va: Update the VA examples because of the new va lib.
Because we introduce the new va lib, the va examples need to include
new header files and add more library linkage.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2196>
Víctor Manuel Jáquez Leal [Thu, 13 May 2021 16:46:21 +0000 (18:46 +0200)]
libs: va: display_wrapper: Use gpointer for VADisplay.
In order to be coherent along all the implementation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2196>
He Junyan [Thu, 6 May 2021 10:23:23 +0000 (18:23 +0800)]
libs: va: Move the VA common logic as a lib.
The VA acceleration now has more usages in linux-like platforms,
such as the MSDK. The different plugins based on the VA acceleration
need to share some common logic and types. We now move the display
related functions and types into a common va lib.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2196>
mkba [Mon, 17 May 2021 03:42:07 +0000 (11:42 +0800)]
msdk: add profile main-still-picture for hevc encoder
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2253>
Seungha Yang [Fri, 14 May 2021 15:39:57 +0000 (00:39 +0900)]
interlace: Fix too small buffer size error
Even though input/output resolutions are identical there, default
buffer size of progressive and interleaved formats could be different
because we are rounding up height of all plane of interlaced frame
to be multiple of two.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2244>
Haihao Xiang [Mon, 1 Mar 2021 04:09:43 +0000 (12:09 +0800)]
msdk: use MFXJoinSession() to join the parent and child sessions
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Haihao Xiang [Thu, 4 Feb 2021 07:27:13 +0000 (15:27 +0800)]
msdk: use a new method to create mfx session when using oneVPL dispatcher
In oneVPL, MFXLoad() and MFXCreateSession() are required to create a
workable mfx session[1]
[1] https://spec.oneapi.com/versions/latest/elements/oneVPL/source/programming_guide/VPL_prg_session.html#onevpl-dispatcher
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Haihao Xiang [Thu, 18 Feb 2021 05:38:25 +0000 (13:38 +0800)]
msdk: allow user build this plugin against MFX version 2.2+ (oneVPL)
Intel oneVPL SDK (oneVPL) is a successor to Intel Media SDK (MSDK)[1].
User may use -Dmfx_api=MSDK or -Dmfx_api=oneVPL to specify the required
SDK when building this plugin. If the SDK is not specified, meson will
try MSDK firstly, then oneVPL if MSDK is not available
Version 2.2+ is required in this patch because pkg-config file was not
provided officially before version 2.2
[1]https://spec.oneapi.com/versions/latest/elements/oneVPL/source/appendix/VPL_intel_media_sdk.html
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Haihao Xiang [Fri, 14 May 2021 03:56:49 +0000 (11:56 +0800)]
msdkvp9dec: do not include mfxvp9.h
The VP9 related definitions in mfxvp9.h are available under the
condition of 'MFX_VERSION >= MFX_VERSION_NEXT', which implies that these
definitions are never used in a public release.
This is in preparation for oneVPL support because mfxvp9.h was
removed from oneVPL
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Haihao Xiang [Tue, 4 Aug 2020 04:53:35 +0000 (12:53 +0800)]
msdk: don't load user plugins for MFX version 2.0+
MFX version 2.0+ no longer supports user plugins, please refer to the
links for details
https://spec.oneapi.com/versions/latest/elements/oneVPL/source/appendix/VPL_intel_media_sdk.html#msdk-full-name-feature-removals
https://github.com/oneapi-src/oneVPL
This is in preparation for oneVPL support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Haihao Xiang [Tue, 4 Aug 2020 04:55:35 +0000 (12:55 +0800)]
msdk: exclude the audio code for MFX version 2.0+
MFX version 2.0+ no longer supports audio functions, please refer to the
links below for details
https://spec.oneapi.com/versions/latest/elements/oneVPL/source/appendix/VPL_intel_media_sdk.html#msdk-full-name-feature-removals
https://github.com/oneapi-src/oneVPL
This is in preparation for oneVPL support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1503>
Nicolas Dufresne [Fri, 14 May 2021 18:08:17 +0000 (14:08 -0400)]
alphacombine: Ignore all events coming from the alpha_pad
As per usage of this element, everything from this pad is a
duplicate. Instead of implemented needless aggregation, simply
drop all events from this pad and let the one from the main stream
passthrough. Also stop proxying some queries from the alpha pad_too.
This fixes racy test failure:
- validate.file.playback.scrub_forward_seeking.opus_vp9-alpha_webm
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2247>
Nicolas Dufresne [Fri, 14 May 2021 18:05:59 +0000 (14:05 -0400)]
codecalphademux: Do not set a GstFlowReturn from a boolean
This was a small overlook, gst_pad_send_event() returns a boolean,
so setting it into ret could confuse the flow combiner. Though,
it didn't bug, since both 0 and 1 are success (though 1 being
undefined).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2247>
Nicolas Dufresne [Fri, 14 May 2021 18:04:00 +0000 (14:04 -0400)]
codecalphademux: Remove eos flow return workaround
It turns out that downstream returning OK after EOS is a bug in
multiqueue. As we moved to queue, we no longer have this issue.
Let's keep the code clean and just assuming that downstream will
keep returning EOS and allow convergence of flow.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2247>
Olivier Crête [Thu, 13 May 2021 19:18:34 +0000 (15:18 -0400)]
openh264: Don't use GOnce for ABI check
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>
Olivier Crête [Thu, 13 May 2021 19:25:57 +0000 (15:25 -0400)]
webrtc test: Print content of error GstMessage
Makes it easier to interpret the result of the CI!
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Thu, 6 May 2021 17:52:32 +0000 (13:52 -0400)]
webrtcbin tests: Add test for intersection src pad caps
This checks that the codec preferences are intersected also with what
the src pad can handle.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 14 Apr 2021 23:46:56 +0000 (19:46 -0400)]
webrtc test: Add explicit test clock
This way the test clock is not linked to the multiple harnesses
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Thu, 6 May 2021 21:58:15 +0000 (17:58 -0400)]
webrtcbin: Intersect answer with codec prefs & capabilities
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>
Olivier Crête [Thu, 6 May 2021 21:50:38 +0000 (17:50 -0400)]
webrtcbin: Ignore current caps for codec negotiation
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>
Olivier Crête [Wed, 5 May 2021 23:21:18 +0000 (19:21 -0400)]
webrtcbin: Remove dead code
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>
Olivier Crête [Wed, 5 May 2021 23:18:02 +0000 (19:18 -0400)]
webrtc test: Add test for codec preferences negotiation
Validate that it does the intersection with the caps from
the sink pad and rejects the offer creation otherwise.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 5 May 2021 23:00:11 +0000 (19:00 -0400)]
webrtcbin: Refactor codec preference retrieval
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>
Olivier Crête [Fri, 30 Apr 2021 21:04:12 +0000 (17:04 -0400)]
webrtcbin: Intersect codec preferences with caps from pads
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>
Olivier Crête [Fri, 30 Apr 2021 20:21:14 +0000 (16:21 -0400)]
webrtcbin: Implement caps queries on sinkpad based on codec preferences
Also includes a unit test.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Fri, 30 Apr 2021 19:04:33 +0000 (15:04 -0400)]
webrtcbin: Hold transceiver lock when accessing codec_preferences
This is required to allow the applications to modify the preferences.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Fri, 30 Apr 2021 18:55:41 +0000 (14:55 -0400)]
webrtcbin: Hold lock while accessing the codec preferences
They could be changed at runtime by the application, so take the lock
when modifying them.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 21 Apr 2021 19:55:00 +0000 (15:55 -0400)]
webrtcbin tests: Use properties to access the inside of the transceiver object
This will allow hiding the insides from unsafe application access.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 21 Apr 2021 19:54:14 +0000 (15:54 -0400)]
webrtc rtptransceiver: Implement "codec-preferences" property
This allows safer access to the internals of the codec-preferences
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 21 Apr 2021 19:38:00 +0000 (15:38 -0400)]
webrtc rtptransceiver: Implement "kind" property
Implement the property as read-only to follow the WebRTC spec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 21 Apr 2021 19:34:07 +0000 (15:34 -0400)]
webrtc rtptransceiver: Implement "current-direction" property
Implement the property as read-only to follow the WebRTC spec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Olivier Crête [Wed, 21 Apr 2021 19:29:18 +0000 (15:29 -0400)]
webrtc rtptransceiver: Implement "mid" property
Implement the property as read-only to follow the WebRTC spec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2183>
Nicolas Dufresne [Wed, 12 May 2021 21:32:20 +0000 (17:32 -0400)]
alphadecodebin: Use normal queues instead of multiqueue
The multiqueue was too flexible for our need, allowing to queue passed
the configured threshold. It also didn't work well when trying to
propagate EOS flow return.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2238>
Nicolas Dufresne [Wed, 12 May 2021 21:29:02 +0000 (17:29 -0400)]
alphacombine: Implement flow return propagation
The EOS handling was not the problem way. Instead of this, implement
proper prorogation of the flow return for the alpha chain function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2238>
Nicolas Dufresne [Wed, 12 May 2021 19:13:11 +0000 (15:13 -0400)]
codecalphademux: Fix handling of flow combine
As the alphacombine is simplified to received matching pair of buffers,
we can't just stop streaming when we receive EOS from downstream. Due
to usage of queue, the moment we get this return value may differ.
Though, by continuing pushing, we override the last_flowret on the pad
which can make us miss that we effectively can combine all flow into
EOS.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2238>
Thibault Saunier [Thu, 29 Apr 2021 21:14:43 +0000 (17:14 -0400)]
testbinsrc: Handle setting URI on the fly
Reusing existing streams when possible
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2210>
Bing Song [Wed, 20 Jan 2021 06:55:09 +0000 (14:55 +0800)]
transcoding: add encoding target for TS.
Add encoding target for streamming.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1965>
Johan Sternerup [Thu, 29 Apr 2021 14:51:27 +0000 (16:51 +0200)]
webrtcbin: Add unit test for closing of data channels
Add test for verifying that the data channel "close" action signal
triggers an SCTP_RESET_STREAMS request that is propagated to the other
side and eventually leads to both sides closing properly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2186>
Johan Sternerup [Thu, 22 Apr 2021 08:43:55 +0000 (10:43 +0200)]
webrtcbin: Fix deadlock when receiving new sctp stream
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>
Johan Sternerup [Tue, 20 Apr 2021 08:45:46 +0000 (10:45 +0200)]
webrtcbin: Support closing of data channels
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>
Nicolas Dufresne [Fri, 7 May 2021 20:30:49 +0000 (16:30 -0400)]
vp9parse: Manually fixate codec-alpha field
This is a newly introduced field, and we interpret it as false when missing in
the caps. Otherwise, a simple capsfilter will just add the missing field and
keep going, despite the upstream caps being a superset.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Fri, 7 May 2021 15:28:21 +0000 (11:28 -0400)]
doc: codecalpha: Add plugin documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Thu, 6 May 2021 13:12:34 +0000 (09:12 -0400)]
doc: Add codecalpha plugin to the plugins cache
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Thu, 22 Apr 2021 20:50:17 +0000 (16:50 -0400)]
alphadecodebin: Add wrappers to decode VP8/VP9 alpha
This includes base class with wrappers bin that will create a static
pipeline capable of handling the VP8/VP9 alpha channel decoding
using two instances of vp8/vp9dec element each.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Fri, 2 Apr 2021 19:07:22 +0000 (15:07 -0400)]
codecalpha: Implement alphacombine element
This element will merge video buffers in order to use the alpha stream
luma plane as the alpha of the video stream. The implementation is zero-copy
and currently only support merging I420 stream with an I420, NV12 or GRAY8
alpha stream.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Tue, 30 Mar 2021 19:34:11 +0000 (15:34 -0400)]
alphacodecdemux: Implement meta demuxing
Produce two streams from a buffer that has GstVideoCodecAlphaMeta
attached.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Nicolas Dufresne [Wed, 24 Mar 2021 20:48:35 +0000 (16:48 -0400)]
Introduce CODEC Alpha plugin
This plugin contains a set of utility elements allowing to extract,
decode and combine CODEC (typically VP8/VP9) alpha stream.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
Daniel Stone [Tue, 11 May 2021 12:57:59 +0000 (13:57 +0100)]
openaptx: Fix to v0.2.0 due to license change
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>
Nicolas Dufresne [Tue, 11 May 2021 14:21:27 +0000 (10:21 -0400)]
doc: Update cache after RGBP pixel format addition
Related to https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1141
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2236>
He Junyan [Sun, 9 May 2021 15:42:46 +0000 (23:42 +0800)]
va: Do not use a common parent_class in vabasedec.
We have only one copy of gst_va_base_dec_parent_class inside the
vabasedec, so it can not handle the case when there are multi va
decoders inside one pipeline. The pipeline:
gst-launch-1.0 filesrc location=xxx.h264 ! h264parse \
! vah264dec ! msdkh265enc ! vah265dec ! fakesink
generates a assertion of
"invalid cast from 'GstVaH264Dec' to 'GstH265Decoder"
and gets a crash.
We should keep the parent_class for each decoder type.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2231>
Víctor Manuel Jáquez Leal [Fri, 7 May 2021 14:02:04 +0000 (16:02 +0200)]
libs: codecs: h264decoder: Assert output_picture virtual method.
For new code it's nice to assert if the derived class implemented the
output_picture virtual method. Otherwise a segmentation fault
occurs. All other decoders assert this method.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2228>
Jan Alexander Steffens (heftig) [Thu, 6 May 2021 16:37:45 +0000 (18:37 +0200)]
wpe: Properly free property fields
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>
Jan Alexander Steffens (heftig) [Thu, 6 May 2021 17:17:29 +0000 (19:17 +0200)]
wpe: Properly lock property fields
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>
Jan Alexander Steffens (heftig) [Fri, 7 May 2021 09:13:06 +0000 (11:13 +0200)]
rtpsrc: Plug leak of rtcp_send_addr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2226>
Jan Alexander Steffens (heftig) [Fri, 7 May 2021 09:13:46 +0000 (11:13 +0200)]
rtpsink: Return proper pad from _request_new_pad
Bizarrely, it returned a pad from the child rtpbin. I noticed because
our application leaked the implicitly created ghost pad. Make an
explicit ghost pad so this works properly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2227>
Jan Alexander Steffens (heftig) [Fri, 7 May 2021 09:12:39 +0000 (11:12 +0200)]
rist: Plug leak of rtcp_send_addr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2225>
Víctor Manuel Jáquez Leal [Fri, 7 May 2021 09:10:17 +0000 (11:10 +0200)]
va: av1dec: Avoid structure overwrite.
VADecPictureParameterBufferAV1.mode_control_fields.bits were filled
twice, overwriting to zeros the first assignation. This patch unifies
both assignations.
Also it makes explicit an enum casting between libva and gstreamer; it
removes the assignation to zero a deprecated parameter; and use an
appropriate assertion.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2223>
Matthew Waters [Thu, 6 May 2021 07:07:51 +0000 (17:07 +1000)]
webrtc: only add nack pli by default if kind is video
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>
Matthew Waters [Thu, 6 May 2021 07:06:44 +0000 (17:06 +1000)]
webrtc: move webrtc_kind_from_caps() to utils
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2220>
Seungha Yang [Wed, 21 Apr 2021 08:34:26 +0000 (17:34 +0900)]
wasapi2: Propagate HRESULT error code everywhere
... instead of boolean value which cannot notify the reason
of the operation failure.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2219>
Sebastian Dröge [Thu, 6 May 2021 07:46:15 +0000 (10:46 +0300)]
hlssink(2): Don't write deprecated EXT-X-ALLOW-CACHE metadata
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>
Seungha Yang [Wed, 5 May 2021 16:35:04 +0000 (01:35 +0900)]
decklinkvideosrc: Fix crash when mode is not specified
In that case, we will get "VideoInputFrameArrived" callback
without "VideoInputFormatChanged"
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2218>
Nirbheek Chauhan [Wed, 5 May 2021 07:04:38 +0000 (12:34 +0530)]
h265parse: don't invalidate the last PPS when parsing a new SPS
This is a port of https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2019
to h265parse.
When a SPS is received then any previous PPS remains valid. So don't clear
the PPS flag from the parser state.
This is important because there are encoders that don't generated a PPS after
every SPS.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2217>
François Laignel [Tue, 20 Apr 2021 20:18:09 +0000 (22:18 +0200)]
Use gst_element_request_pad_simple...
Instead of the deprecated gst_element_get_request_pad.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2180>
Stéphane Cerveau [Tue, 4 May 2021 10:29:14 +0000 (12:29 +0200)]
mxf: check EOS cond with any segment's flag
The previous test was preventing the pad to be in EOS
when the segment position was greater than segment stop.
It ended up consuming all the data before getting in EOS.
Regarding GST_SEEK_FLAG_SEGMENT it seems to be
correctly handled later in the method.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2173>
Stéphane Cerveau [Mon, 19 Apr 2021 16:25:06 +0000 (18:25 +0200)]
mxfdemux: fix keyframe detection in index
An index entry should be considered as a keyframe
if the flags allow a random access only.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2173>
Antonio Rojas [Sat, 24 Apr 2021 10:43:47 +0000 (10:43 +0000)]
Fix build with OpenEXR 3
Add a header that is no longer transitively included
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2195>
Daniel Almeida [Thu, 22 Apr 2021 22:21:01 +0000 (19:21 -0300)]
codecs: gstvp9statefulparser: do not carry over segmentation flags
Do not carry over segmentation flags from previous frames. The spec
says in 7.2.10 that the feature data carry over from previous frames
if not updated, but the flags do not.
Consider what would happen if a flag B is to depend on a flag A, and
B carries over as set from another frame. Further consider that A is
now not set in this particular frame. This leads to the invalid state
in which flag B is set but flag A isn't.
This might cause the bitstream to be rejected by accelerators down
the line.
Fix it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2203>
Seungha Yang [Thu, 29 Apr 2021 12:44:07 +0000 (21:44 +0900)]
d3d11desktopdup: Don't ignore error DXGI_ERROR_UNSUPPORTED
Although Microsoft's DXGIDesktopDuplication example is considering
the DXGI_ERROR_UNSUPPORTED as an expected error
(See https://github.com/microsoft/Windows-classic-samples/tree/master/Samples/DXGIDesktopDuplication)
it might not be recoverable error if application is
run against a discrete GPU
(See https://docs.microsoft.com/en-US/troubleshoot/windows-client/shell-experience/error-when-dda-capable-app-is-against-gpu)
Do early error out if the error happens while opening device,
instead of retrying it forever.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2208>
Jakub Adam [Thu, 29 Apr 2021 20:10:15 +0000 (22:10 +0200)]
d3d11desktopdup: Support desktop switches
Before creating output duplication interface, call SetThreadDesktop()
with HDESK of the current input desktop in case a desktop switch has
occurred.
This allows d3d11desktopdupsrc to capture Windows User Account Control
(UAC) prompts, which appear on a separate secure desktop. Otherwise
IDXGIOutput1::DuplicateOutput() will return E_ACCESSDENIED and the
element won't produce any frames as long as the UAC screen is active.
Note that in order to access secure desktop the application still has to
run at LOCAL_SYSTEM privileges. For GStreamer applications running with
regular user privileges this change has no effect.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2209>
Jakub Adam [Tue, 27 Apr 2021 18:08:30 +0000 (18:08 +0000)]
dxgicapture: reinitialize duplication interface on ERROR_ACCESS_LOST
IDXGIOutputDuplication can become invalid for example when there's
desktop switch, resolution change or Windows User Account Control prompt
appears on screen.
When that happens, try to re-create the duplication interface for the
changed output. Note that in the case of UAC prompt this operation will
fail if the GStreamer process doesn't run at LOCAL_SYSTEM privileges. In
such situation the source element won't create any frames as long as the
output is occupied by UAC screen.
In order to enable UAC access to sufficiently privileged GStreamer
processes, call SetThreadDesktop() with the desktop handle that
currently receives user input before creating our output duplication.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2204>
Haihao Xiang [Thu, 29 Apr 2021 01:35:51 +0000 (09:35 +0800)]
msdk: set correct parameters for BGRx frame
Otherwise when mapping BGRx frame onto CPU's memory, CPU will get wrong
data for B, G, R components
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2205>