platform/upstream/gstreamer.git
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>

3 years agoopenaptx: Fix to v0.2.0 due to license change
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>

3 years agodoc: Update cache after RGBP pixel format addition
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>

3 years agova: Do not use a common parent_class in vabasedec.
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>

3 years agolibs: codecs: h264decoder: Assert output_picture virtual method.
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>

3 years agowpe: Properly free property fields
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>

3 years agowpe: Properly lock property fields
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>

3 years agortpsrc: Plug leak of rtcp_send_addr
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>

3 years agortpsink: Return proper pad from _request_new_pad
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>

3 years agorist: Plug leak of rtcp_send_addr
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>

3 years agova: av1dec: Avoid structure overwrite.
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>

3 years agowebrtc: only add nack pli by default if kind is video
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>

3 years agowebrtc: move webrtc_kind_from_caps() to utils
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>

3 years agowasapi2: Propagate HRESULT error code everywhere
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>

3 years agohlssink(2): Don't write deprecated EXT-X-ALLOW-CACHE metadata
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>

3 years agodecklinkvideosrc: Fix crash when mode is not specified
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>

3 years agoh265parse: don't invalidate the last PPS when parsing a new SPS
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>

3 years agoUse gst_element_request_pad_simple...
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>

3 years agomxf: check EOS cond with any segment's flag
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>

3 years agomxfdemux: fix keyframe detection in index
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>

3 years agoFix build with OpenEXR 3
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>

3 years agocodecs: gstvp9statefulparser: do not carry over segmentation flags
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>

3 years agod3d11desktopdup: Don't ignore error DXGI_ERROR_UNSUPPORTED
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>

3 years agod3d11desktopdup: Support desktop switches
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>

3 years agodxgicapture: reinitialize duplication interface on ERROR_ACCESS_LOST
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>

3 years agomsdk: set correct parameters for BGRx frame
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>

3 years agowebrtc: advertise support for transport-cc rtcp-fb by default
Matthew Waters [Thu, 29 Apr 2021 11:12:42 +0000 (21:12 +1000)]
webrtc: advertise support for transport-cc rtcp-fb by default

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>

3 years agowebrtc/stats: provide the twcc stats when available
Matthew Waters [Thu, 29 Apr 2021 11:11:25 +0000 (21:11 +1000)]
webrtc/stats: provide the twcc stats when available

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

3 years agova: allocator: Disable derived for Gallium if RGB and reading.
Víctor Manuel Jáquez Leal [Wed, 28 Apr 2021 08:52:29 +0000 (10:52 +0200)]
va: allocator: Disable derived for Gallium if RGB and reading.

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

3 years agova: allocator: Disable derived for i965 if YUV and writing.
Víctor Manuel Jáquez Leal [Thu, 22 Apr 2021 15:08:13 +0000 (17:08 +0200)]
va: allocator: Disable derived for i965 if YUV and writing.

The problem is for uploading YUV frames using derived images, is that
derived images imply tiling, so frames are wrongly uploaded.

Though derived for reading might work we cannot know the Intel graphics
generation to validate the caching. Overall, it's safer to disable derived
images for i965.

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

3 years agova: display: Fix typo.
Víctor Manuel Jáquez Leal [Thu, 22 Apr 2021 15:07:28 +0000 (17:07 +0200)]
va: display: Fix typo.

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

3 years agova: allocator: Hack for i965 to get linear RGB DMABufs.
Víctor Manuel Jáquez Leal [Thu, 22 Apr 2021 10:42:35 +0000 (12:42 +0200)]
va: allocator: Hack for i965 to get linear RGB DMABufs.

i965 driver has a hack to provide linear dmabufs, which is required for RGB
formats, since they are directly uploaded by glupload, ignoring tiled modifiers.

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

3 years agova: postproc: Remove unused parameter.
Víctor Manuel Jáquez Leal [Thu, 22 Apr 2021 13:51:27 +0000 (15:51 +0200)]
va: postproc: Remove unused parameter.

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

3 years agova: postproc: Set usage hint generic if DMABuf.
Víctor Manuel Jáquez Leal [Wed, 31 Mar 2021 09:04:17 +0000 (11:04 +0200)]
va: postproc: Set usage hint generic if DMABuf.

iHD driver sets a tiled DRM modifier if surface's usage hint is set to
VPP_WRITE. This result in a garbled rendering when using glimagesink.

This patch changes the usage hint to generic if the caps feature is
DMABuf. Either way only iHD driver, so far, uses the usage hint flag.

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

3 years agova: postproc: Get info from caps in decide_allocation()
Víctor Manuel Jáquez Leal [Tue, 20 Apr 2021 10:52:26 +0000 (12:52 +0200)]
va: postproc: Get info from caps in decide_allocation()

decide_allocation() occurs before set_caps(), where out_info is set,
thus setting srcpad_info with zeros or old values. Instead of it, the
caps, from the allocation query, are converted and used.

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

3 years agoavtp: crf: Remove superfluous sink_event variable
Timo Wischer [Fri, 23 Apr 2021 11:56:43 +0000 (13:56 +0200)]
avtp: crf: Remove superfluous sink_event variable

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>

3 years agomsdkh265dec: Add support for error report too
Haihao Xiang [Mon, 17 Feb 2020 06:11:15 +0000 (14:11 +0800)]
msdkh265dec: Add support for error report too

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

3 years agomsdkh264dec: report error to user
Haihao Xiang [Fri, 6 Dec 2019 04:48:37 +0000 (12:48 +0800)]
msdkh264dec: report error to user

Sometimes user want to know what the error is when decoding a stream,
This commit adds a property of report-error to msdkh264dec. When
report-error is TRUE, msdkh264dec may catch bitstream error and frame
corruption, then report the error to application by using GST_ELEMENT_ERROR

Refer to the code in
https://github.com/Intel-Media-SDK/MediaSDK/tree/master/samples

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

3 years agomsdkdec: allow sub class to add extra parameters for additional configuration
Haihao Xiang [Fri, 6 Dec 2019 04:02:50 +0000 (12:02 +0800)]
msdkdec: allow sub class to add extra parameters for additional configuration

MSDK allows user add extended buffers to a bitstream for additional
configuration. This commit is to support this feature in this plugin

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

3 years agod3d11: Handle device change
Seungha Yang [Tue, 27 Apr 2021 12:52:31 +0000 (21:52 +0900)]
d3d11: Handle device change

If incoming buffer holds other d3d11 device, and user wants any device
(i.e., adapter index wasn't specified explicitly) update our device
with that of buffer.

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

3 years agod3d11videosink: Delay window setup as much as possible
Seungha Yang [Fri, 23 Apr 2021 10:29:55 +0000 (19:29 +0900)]
d3d11videosink: Delay window setup as much as possible

... so that videosink can handle device update with
d3d11 device of the first buffer

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

3 years agod3d11: Don't accept buffer pool which holds different device
Seungha Yang [Fri, 23 Apr 2021 09:44:41 +0000 (18:44 +0900)]
d3d11: Don't accept buffer pool which holds different device

At the moment, d3d11 plugin doesn't support texture sharing between
different device

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

3 years agod3d11decoder: Run gst-indent
Seungha Yang [Fri, 23 Apr 2021 09:45:48 +0000 (18:45 +0900)]
d3d11decoder: Run gst-indent

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

3 years agoonnx: add plugin to apply ONNX neural network models to video
Aaron Boxer [Tue, 23 Feb 2021 16:56:53 +0000 (11:56 -0500)]
onnx: add plugin to apply ONNX neural network models to video

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>

3 years agodecklinkvideosrc: Fix AFD/Bar VANC size check
Sebastian Dröge [Mon, 26 Apr 2021 15:00:27 +0000 (18:00 +0300)]
decklinkvideosrc: Fix AFD/Bar VANC size check

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

3 years agodecklinkvideosrc: Automatically detect widescreen vs. normal NTSC/PAL
Sebastian Dröge [Fri, 23 Apr 2021 15:05:06 +0000 (18:05 +0300)]
decklinkvideosrc: Automatically detect widescreen vs. normal NTSC/PAL

Based on the AFD aspect ratio flag the source can detect (in mode=auto)
whether this NTSC/PAL mode is actually a normal or a widescreen one and
select the caps according to that.

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

3 years agojpegparse: Don't generate timestamp for 0/1 framerates
Olivier Crête [Tue, 30 Mar 2021 16:39:21 +0000 (12:39 -0400)]
jpegparse: Don't generate timestamp for 0/1 framerates

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

3 years agod3d11decoder: Set flushing to internal pool on flush event
Seungha Yang [Fri, 23 Apr 2021 14:20:54 +0000 (23:20 +0900)]
d3d11decoder: Set flushing to internal pool on flush event

d3d11 decoders use internal pool for DPB texture and
Gst*Decoder::new_picture() will be blocked if internal pool is full.
We should be able to unblock in on flush-start event as expected.

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

3 years agod3d11: Fix wrong GstD3D11BufferPool type check
Seungha Yang [Fri, 23 Apr 2021 07:53:16 +0000 (16:53 +0900)]
d3d11: Fix wrong GstD3D11BufferPool type check

Fix typos

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

3 years agortpsrc: Fix wrong/NULL URI handling
Thibault Saunier [Wed, 31 Mar 2021 21:07:40 +0000 (18:07 -0300)]
rtpsrc: Fix wrong/NULL URI handling

We can reset the URI to NULL and this fix a deadlock in that case or
when the URI was invalid.

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

3 years agowebrtcbin: downgrade "dropping ICE candidates from SDP" from warning to debug level
Nazar Mokrynskyi [Thu, 22 Apr 2021 16:45:27 +0000 (16:45 +0000)]
webrtcbin: downgrade "dropping ICE candidates from SDP" from warning to debug level

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

3 years agowebrtcbin: Attach rtpbin even for data channels
Olivier Crête [Sat, 17 Apr 2021 00:39:35 +0000 (20:39 -0400)]
webrtcbin: Attach rtpbin even for data channels

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>

3 years agoFix missing unref of nice-agent causing sockets to never close.
Frederich Munch [Thu, 4 Mar 2021 08:41:09 +0000 (00:41 -0800)]
Fix missing unref of nice-agent causing sockets to never close.

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

3 years agowebrtc: Fix sctp task's return type.
Doug Nazar [Thu, 22 Apr 2021 20:09:40 +0000 (16:09 -0400)]
webrtc: Fix sctp task's return type.

GstWebRTCBinFunc expects a GstStructure* return type.

Fixes segfault on PowerPC.

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

3 years agomfvideoenc: Fix UWP build
Seungha Yang [Thu, 22 Apr 2021 06:50:15 +0000 (15:50 +0900)]
mfvideoenc: Fix UWP build

Add missing GST_MF_HAVE_D3D11 define guard

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

3 years agowasapi2: Fix UWP build
Seungha Yang [Thu, 22 Apr 2021 06:42:23 +0000 (15:42 +0900)]
wasapi2: Fix UWP build

KSAUDIO_SPEAKER_* defines are WINAPI_PARTITION_DESKTOP only

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

3 years agotsdemux: fix truncated output segment when seeking with a stop
Mathieu Duponchelle [Wed, 21 Apr 2021 19:43:59 +0000 (21:43 +0200)]
tsdemux: fix truncated output segment when seeking with a stop

In disabling the stop adjustment for negative rates in
03031037fafd2d535bbefb1fdf6024b5d1159043 , two instructions
were inverted resulting in the stop always being adjusted by
0

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

3 years agotests/netsim: Set src caps before creating buffers
Doug Nazar [Wed, 21 Apr 2021 03:51:49 +0000 (23:51 -0400)]
tests/netsim: Set src caps before creating buffers

GstHarness requires the source pad caps to be set before
buffer allocations.

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

3 years agod3d11: Add support for BGRx and RGBx formats
Seungha Yang [Mon, 19 Apr 2021 17:00:18 +0000 (02:00 +0900)]
d3d11: Add support for BGRx and RGBx formats

For such formats, we can re-use existing BGRA/RGBA implementations
but ignoring alpha channel

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

3 years agowasapi2: Implement default audio channel mask
Seungha Yang [Tue, 20 Apr 2021 09:37:15 +0000 (18:37 +0900)]
wasapi2: Implement default audio channel mask

Some capture devices might not provide channel mask value which will
result in capturing failure because of unknown channel mask in case
that device generates more than 2 channels. Although it might not
be correct, we can assume channel mask with the given number of channels.

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

3 years agowasapi2clinet: Simplify set caps
Seungha Yang [Tue, 20 Apr 2021 09:40:40 +0000 (18:40 +0900)]
wasapi2clinet: Simplify set caps

Don't need to iterate all structure to set identical values

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

3 years agowasapi2client: Run gst-indent
Seungha Yang [Tue, 20 Apr 2021 09:48:18 +0000 (18:48 +0900)]
wasapi2client: Run gst-indent

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

3 years agowebrtcbin test: Don't fail if data channel is created
Olivier Crête [Tue, 13 Apr 2021 21:35:58 +0000 (17:35 -0400)]
webrtcbin test: Don't fail if data channel is created

In tests that voluntarily create a data channel.

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

3 years agowebrtcbin: Filter caps isn't fixed
Olivier Crête [Mon, 19 Apr 2021 23:06:50 +0000 (19:06 -0400)]
webrtcbin: Filter caps isn't fixed

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>

3 years agod3d11: Update plugin doc cache
Seungha Yang [Mon, 19 Apr 2021 17:04:03 +0000 (02:04 +0900)]
d3d11: Update plugin doc cache

Updating for removed d3d11videosink wrapper bin and the change of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2113

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

3 years agod3d11: Remove d3d11videosink wrapper bin
Seungha Yang [Sat, 17 Apr 2021 11:37:13 +0000 (20:37 +0900)]
d3d11: Remove d3d11videosink wrapper bin

Drop d3d11videosink wrapper bin and handle texture upload
in d3d11videosink.

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

3 years agowebrtcdsp: Propagate VAD to audio level meta
Philippe Normand [Sun, 18 Apr 2021 12:49:59 +0000 (13:49 +0100)]
webrtcdsp: Propagate VAD to audio level meta

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>

3 years agocccombiner: Use correct enum when registering the max-scheduled property
Sebastian Dröge [Mon, 19 Apr 2021 10:06:23 +0000 (13:06 +0300)]
cccombiner: Use correct enum when registering the max-scheduled property

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

3 years agowpe: Remove code targeting WebKit < 2.24
Thibault Saunier [Thu, 15 Apr 2021 18:06:59 +0000 (14:06 -0400)]
wpe: Remove code targeting WebKit < 2.24

We already depend on wk >= 2.24

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

3 years agowpe: Make threaded view singleton creation thread safe
Thibault Saunier [Thu, 15 Apr 2021 17:28:42 +0000 (13:28 -0400)]
wpe: Make threaded view singleton creation thread safe

It was leading to interesting failures.

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

3 years agod3d11: pluginutils: Fix wrong gst_memory_unmap() on _map() failure
Seungha Yang [Wed, 14 Apr 2021 15:02:55 +0000 (00:02 +0900)]
d3d11: pluginutils: Fix wrong gst_memory_unmap() on _map() failure

It was obvious typo

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

3 years agotests/avtp: increase timeout of test_depayloader_fragmented_big
Doug Nazar [Tue, 13 Apr 2021 21:15:22 +0000 (17:15 -0400)]
tests/avtp: increase timeout of test_depayloader_fragmented_big

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

3 years agocheck: fix dash_mpdparser_check_mpd_client_set_methods test.
Doug Nazar [Wed, 14 Apr 2021 05:59:23 +0000 (01:59 -0400)]
check: fix dash_mpdparser_check_mpd_client_set_methods test.

Setting guint64 valist properties without type specifier fails
on 32bit archs.

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

3 years agoline21enc: fix remove-caption-meta property test
Doug Nazar [Tue, 13 Apr 2021 20:34:15 +0000 (16:34 -0400)]
line21enc: fix remove-caption-meta property test

It's possible for the same address to be allocated to the decoded
metadata. Switch test to actual detect if it was removed.

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

3 years agotests: fix shm test deadlock
Doug Nazar [Tue, 13 Apr 2021 10:40:43 +0000 (06:40 -0400)]
tests: fix shm test deadlock

Stopping the consumer first would occasionally allow the producer
to fill the shm segment causing it to block in send() and unable
to be stopped.

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

3 years agocheck: Fix test dash_mpdparser_xlink_period
Doug Nazar [Tue, 13 Apr 2021 09:54:37 +0000 (05:54 -0400)]
check: Fix test dash_mpdparser_xlink_period

Test used http://404/ERROR/XML.period as an invalid url. Curl now
interprets that as an 32bit int and tries an actual connect which
timesout. Use .invalid as an IANA reserved domain for invalid DNS.

curl -v http://404/ERROR/XML.period
*   Trying 0.0.1.148:80...

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

3 years agova: allocator: Fix an unmap typo in _va_copy.
He Junyan [Tue, 13 Apr 2021 07:42:09 +0000 (15:42 +0800)]
va: allocator: Fix an unmap typo in _va_copy.

No need to unmap the the src memory when failing to allocate the
dst mem. It has not been mapped yet.

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

3 years agomsdk: don't fall back to the default device
Haihao Xiang [Tue, 6 Apr 2021 04:03:32 +0000 (12:03 +0800)]
msdk: don't fall back to the default device

Ohterwise when user set a wrong device, the warning message doesn't get
printed if user doesn't set a right debug level in the environment, this
behavior might mislead user that the wrong device is being used.

This fixed https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1567

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