platform/upstream/gstreamer.git
3 years agov4l2codecs: gstv4l2codecsvp8dec: implement a render delay
Daniel Almeida [Thu, 8 Apr 2021 13:11:52 +0000 (10:11 -0300)]
v4l2codecs: gstv4l2codecsvp8dec: implement a render delay

The v4l2 backend support delayed output for performance reasons.
It is then possible to use render delays to queue multiple requests
simultaneously, thus increasing performance.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2150>

3 years agocodecs: gstvp8decoder: add support for render delay
Daniel Almeida [Wed, 7 Apr 2021 21:24:27 +0000 (18:24 -0300)]
codecs: gstvp8decoder: add support for render delay

Some decoding APIs support delayed output for performance reasons.
One example would be to request decoding for multiple frames and
then query for the oldest frame in the output queue.

This also increases throughput for transcoding and improves seek
performance when supported by the underlying backend.

Introduce support in the vp8 base class, so that backends that
support render delays can actually implement it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2150>

3 years agowebrtcbin: Stop transceivers update after first SDP error
Philippe Normand [Mon, 17 May 2021 09:49:41 +0000 (10:49 +0100)]
webrtcbin: Stop transceivers update after first SDP error

When invalid SDP is supplied, _update_transceiver_from_sdp_media() sets the
GError, so it is invalid to continue any further SDP processing, we have to exit
early when the first error is raised.

Fixes #1595

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2254>

3 years agod3d11: Suppress some warning logs
Seungha Yang [Fri, 28 May 2021 14:21:19 +0000 (23:21 +0900)]
d3d11: Suppress some warning logs

We uses gst_d3d11_device_new() for enumerating device which can
fail for some reason. Don't print warning log for the case.
And decoding capability check is the same case as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2286>

3 years agohlssink2: Initialize debug category to prevent an assert with `fatal-warnings`
Roman Sivriver [Fri, 28 May 2021 21:05:02 +0000 (17:05 -0400)]
hlssink2: Initialize debug category to prevent an assert with `fatal-warnings`

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2288>

3 years agod3d11compositor: Reuse converter on alpha update
Seungha Yang [Fri, 21 May 2021 11:02:53 +0000 (20:02 +0900)]
d3d11compositor: Reuse converter on alpha update

... instead of creating converter object

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2276>

3 years agod3d11converter: Introduce config to be extensible
Seungha Yang [Mon, 17 May 2021 16:24:29 +0000 (01:24 +0900)]
d3d11converter: Introduce config to be extensible

Add a config argument like that of GstVideoConverter so that
we can add more options without modifying existing methods

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2276>

3 years agod3d11shader: Don't hold state object in GstD3D11Quad
Seungha Yang [Fri, 21 May 2021 12:30:42 +0000 (21:30 +0900)]
d3d11shader: Don't hold state object in GstD3D11Quad

We might want to update state object

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2276>

3 years agov4lcodecs: Validate src formats
Nicolas Dufresne [Thu, 27 May 2021 20:22:42 +0000 (16:22 -0400)]
v4lcodecs: Validate src formats

This add src format validation, this avoid registering element for
drivers we don't support any of their src formats. This also special
case the AlphaDecodeBin wrapper, as we know that alphacombine element
only support I420 and NV12 for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2272>

3 years agov4l2codecs: add wrappers for alpha decode
Daniel Almeida [Sat, 22 May 2021 19:29:09 +0000 (16:29 -0300)]
v4l2codecs: add wrappers for alpha decode

codecalpha is a new plugin introduced to support VP8/VP9 alpha as
defined in the WebM and Matroska specifications. It splits the stream
into two streams, one for the alpha and one for the actual content,
then it decodes them separately with vpxdec and finally combine the
results as A420 or AV12 (i.e. YUV + an extra alpha plane).

The workflow above is setup by means of a bin, gstcodecalphabin.

This patch simulates the same workflow into the v4l2codecs namespace,
thus using the new v4l2 stateless decoders for hardware acceleration.

This is so we can register the new alpha decode elements only if the
hardware produces formats we support, i.e. I420 or NV12 for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2272>

3 years agocodecalpha: alphacombine: add support for NV12/AV12
Daniel Almeida [Wed, 19 May 2021 21:45:19 +0000 (18:45 -0300)]
codecalpha: alphacombine: add support for NV12/AV12

Alpha combine works by appending the GstMemory for the alpha channel
to the GstBuffer containing I420, thereby pushing A420 on its src pad.

Add support for the same workflow for NV12, thereby producing the
recently introduced AV12 format (NV12 + Alpha).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2277>

3 years agointerlace: Don't set field-order field for progressive caps
Seungha Yang [Tue, 25 May 2021 11:21:34 +0000 (20:21 +0900)]
interlace: Don't set field-order field for progressive caps

That would cause negotiation issue

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2282>

3 years agointerlace: Drop framerate from query caps of sinkpad
Seungha Yang [Tue, 25 May 2021 10:47:28 +0000 (19:47 +0900)]
interlace: Drop framerate from query caps of sinkpad

Query caps should return caps which represent the element can accept,
not resulting format.

Fixing negotiation error with
gst-launch-1.0 videotestsrc ! video/x-raw,framerate=25/1 ! interlace field-pattern=0 ! fakesink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2282>

3 years agod3d11compositor: Fix caps update handling
Seungha Yang [Wed, 26 May 2021 07:37:06 +0000 (16:37 +0900)]
d3d11compositor: Fix caps update handling

New caps is applied only when previous buffer is consumed if any.
So, the lastest given caps might not be corresponding to the current buffer
to be handled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2284>

3 years agolibs: va: display: Handle auto clean up macros.
Víctor Manuel Jáquez Leal [Thu, 20 May 2021 11:47:11 +0000 (13:47 +0200)]
libs: va: display: Handle auto clean up macros.

Add G_DEFINE_AUTOPTR_CLEANUP_FUNC macro for display classes, so auto
pointers are possible to users.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2269>

3 years agova: h265dec: Add current picture into reference list for SCC.
He Junyan [Mon, 17 May 2021 11:06:34 +0000 (19:06 +0800)]
va: h265dec: Add current picture into reference list for SCC.

The current picture is not in the DPB, so we need to add it manually
to the reference list when SCC is enabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2255>

3 years agova: h265dec: Set Screen Content extension (SCC) for picture parameters.
He Junyan [Fri, 21 May 2021 15:47:14 +0000 (23:47 +0800)]
va: h265dec: Set Screen Content extension (SCC) for picture parameters.

We already declare the support of HEVC screen content extension profiles
in the profile mapping list, but we fail to generate the correct VA picture
parameters buffers. This may cause the GPU hang.

We need to fill the buffer of VAPictureParameterBufferHEVCExtension correctly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2255>

3 years agova: h265dec: Use get_profile_from_sps() to recognize the profile.
He Junyan [Mon, 17 May 2021 09:47:07 +0000 (17:47 +0800)]
va: h265dec: Use get_profile_from_sps() to recognize the profile.

The function of gst_h265_get_profile_from_sps() is better than the
function gst_h265_profile_tier_level_get_profile() when we recognize
the profile of the stream, becaue it considers the compatibility.

It is also used by h265parse to recognize the profile. So it is
better to keep the same behaviour with the parse and other decoders.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2255>

3 years agova: h265dec: Set range extension for picture and slice parameters.
He Junyan [Fri, 21 May 2021 15:21:12 +0000 (23:21 +0800)]
va: h265dec: Set range extension for picture and slice parameters.

We already declare the support of HEVC range extension profiles in
the profile mapping list, but we fail to generate the correct VA
picture and slice parameters buffers. This may cause the GPU hang.

We need to fill the buffer of VAPictureParameterBufferHEVCExtension
and VASliceParameterBufferHEVCExtension correctly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2255>

3 years agova: h265dec: Use picture and slide extension parameters.
Víctor Manuel Jáquez Leal [Mon, 24 May 2021 16:18:52 +0000 (18:18 +0200)]
va: h265dec: Use picture and slide extension parameters.

This is transitional commit to later implement extended and screen
profiles.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2255>

3 years agoUse gst_buffer_new_memdup()
Tim-Philipp Müller [Mon, 24 May 2021 17:34:25 +0000 (18:34 +0100)]
Use gst_buffer_new_memdup()

Update for function rename in core.

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/827

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2281>

3 years agowpe: Bump wpebackend-fdo version requirement to 1.8
Philippe Normand [Sat, 22 May 2021 17:05:18 +0000 (18:05 +0100)]
wpe: Bump wpebackend-fdo version requirement to 1.8

Debian bullseye has this version already, and this allows us to get rid of many
ifdefs. The mouse scroll handling is actually functional now as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2278>

3 years agoUse new gst_buffer_new_copy()
Tim-Philipp Müller [Sun, 23 May 2021 15:10:53 +0000 (16:10 +0100)]
Use new gst_buffer_new_copy()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2279>

3 years agodoc: update gst_plugins_cache.json
Daniel Almeida [Fri, 21 May 2021 18:18:21 +0000 (15:18 -0300)]
doc: update gst_plugins_cache.json

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1152>

3 years agodxgiscreencapsrc: renegotiate caps on resolution change
Jakub Adam [Fri, 14 May 2021 18:22:26 +0000 (20:22 +0200)]
dxgiscreencapsrc: renegotiate caps on resolution change

When desktop gets resized, recreate the textures and renegotiate the
source caps with the updated video dimensions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2249>

3 years agova: h265dec: Set LastSliceOfPic for multi sliced frames.
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>

3 years agod3d11desktopdupsrc: Add support for desktop size/rotation mode change
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>

3 years agompegtsmux: Fixup program array indices after stream removal
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>

3 years agod3d11memory: Protect map and unmap with device lock
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>

3 years agod3d11memory: Add trace log for debugging locking thread
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>

3 years agoaudiolatency: Drop incoming downstream stick events
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>

3 years agoaudiolatency: Use live mode audiotestsrc
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>

3 years agowpe: Bump WPE dependency to 2.28
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>

3 years agod3d11compositor: Fix missing D3D11 prefix
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>

3 years agowpe: Update doc cache
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>

3 years agowpe: Properly respect LIBGL_ALWAYS_SOFTWARE
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>

3 years agowpe: Relay messages from WPE internal pipelines
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>

3 years agowpe: Base wpe audio implementation on a web extension
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>

3 years agowpe: Enable WebAudio
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>

3 years agowpe: Implement audio support
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>

3 years agowpe: Move wpesrc to wpevideosrc and add a wrapper bin `wpesrc`
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>

3 years agosctp: Ensure pad is still a child of element before removal
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>

3 years agosctp: Fix race of pad removal during reset/stop
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>

3 years agowebrtcbin: Fix race bringing up sctp data channel
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>

3 years agowebrtcbin: advertise harder the rtcp-mux-only requirement
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>

3 years agowebrtcbin: update default jb latency docs
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>

3 years agodtls: Let sender know when we are flushing
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>

3 years agodtls: Add ability to set custom GstFlowReturn on callback error
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>

3 years agowebrtc: Remove reundundant context object in transportsendbin
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>

3 years agowebrtc: Wait until ICE is connected to start DTLS handshake process
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>

3 years agowebrtcbin: Remove pad probe on nicesink
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>

3 years agokate: Initialize debug categories
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>

3 years agolibs: va: Documentation and annotations.
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>

3 years agoexamples: va: Update the VA examples because of the new va lib.
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>

3 years agolibs: va: display_wrapper: Use gpointer for VADisplay.
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>

3 years agolibs: va: Move the VA common logic as a lib.
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>

3 years agomsdk: add profile main-still-picture for hevc encoder
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>

3 years agointerlace: Fix too small buffer size error
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>

3 years agomsdk: use MFXJoinSession() to join the parent and child sessions
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>

3 years agomsdk: use a new method to create mfx session when using oneVPL dispatcher
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>

3 years agomsdk: allow user build this plugin against MFX version 2.2+ (oneVPL)
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>

3 years agomsdkvp9dec: do not include mfxvp9.h
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>

3 years agomsdk: don't load user plugins for MFX version 2.0+
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>

3 years agomsdk: exclude the audio code for MFX version 2.0+
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>

3 years agoalphacombine: Ignore all events coming from the alpha_pad
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>

3 years agocodecalphademux: Do not set a GstFlowReturn from a boolean
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>

3 years agocodecalphademux: Remove eos flow return workaround
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>

3 years agoopenh264: Don't use GOnce for ABI check
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>

3 years agowebrtc test: Print content of error GstMessage
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>

3 years agowebrtcbin tests: Add test for intersection src pad caps
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>

3 years agowebrtc test: Add explicit test clock
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>

3 years agowebrtcbin: Intersect answer with codec prefs & capabilities
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>

3 years agowebrtcbin: Ignore current caps for codec negotiation
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>

3 years agowebrtcbin: Remove dead code
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>

3 years agowebrtc test: Add test for codec preferences negotiation
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>

3 years agowebrtcbin: Refactor codec preference retrieval
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>

3 years agowebrtcbin: Intersect codec preferences with caps from pads
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>

3 years agowebrtcbin: Implement caps queries on sinkpad based on codec preferences
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>

3 years agowebrtcbin: Hold transceiver lock when accessing codec_preferences
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>

3 years agowebrtcbin: Hold lock while accessing the codec preferences
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>

3 years agowebrtcbin tests: Use properties to access the inside of the transceiver object
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>

3 years agowebrtc rtptransceiver: Implement "codec-preferences" property
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>

3 years agowebrtc rtptransceiver: Implement "kind" property
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>

3 years agowebrtc rtptransceiver: Implement "current-direction" property
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>

3 years agowebrtc rtptransceiver: Implement "mid" property
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>

3 years agoalphadecodebin: Use normal queues instead of multiqueue
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>

3 years agoalphacombine: Implement flow return propagation
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>

3 years agocodecalphademux: Fix handling of flow combine
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>

3 years agotestbinsrc: Handle setting URI on the fly
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>

3 years agotranscoding: add encoding target for TS.
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>

3 years agowebrtcbin: Add unit test for closing of data channels
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>

3 years agowebrtcbin: Fix deadlock when receiving new sctp stream
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>

3 years agowebrtcbin: Support closing of data channels
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>

3 years agovp9parse: Manually fixate codec-alpha field
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>

3 years agodoc: codecalpha: Add plugin documentation
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>

3 years agodoc: Add codecalpha plugin to the plugins cache
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>

3 years agoalphadecodebin: Add wrappers to decode VP8/VP9 alpha
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>

3 years agocodecalpha: Implement alphacombine element
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>

3 years agoalphacodecdemux: Implement meta demuxing
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>

3 years agoIntroduce CODEC Alpha plugin
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>