platform/upstream/gstreamer.git
3 years agodocs: update with "twcc-feedback-interval"
Havard Graff [Wed, 25 Aug 2021 08:33:24 +0000 (10:33 +0200)]
docs: update with "twcc-feedback-interval"

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

3 years agortptwcc: changes to use rtp buffer arrival time and current time.
Tulio Beloqui [Tue, 13 Apr 2021 14:19:22 +0000 (16:19 +0200)]
rtptwcc: changes to use rtp buffer arrival time and current time.

For TWCC we are more interested to track the arrival time (receive side)
and the current time (sender side) of the buffers rather than the
running time.

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

3 years agortptwcc: add payloadtype to RTPTWCCPacket
Knut Inge Hvidsten [Fri, 26 Mar 2021 10:57:42 +0000 (11:57 +0100)]
rtptwcc: add payloadtype to RTPTWCCPacket

The consumer of the stats can then separate between different media-types,
and do individual stats for each of them.

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

3 years agortptwcc: make enabling TWCC sticky
Havard Graff [Fri, 19 Mar 2021 17:19:43 +0000 (18:19 +0100)]
rtptwcc: make enabling TWCC sticky

Meaning that if a caps comes along that does NOT have TWCC in it,
this does not turn of TWCC for the rest, as this is in fact
completely allowed. (To have some payload-types not containing TWCC
seqnums).

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

3 years agortptwcc: move TWCC-logic over to the TWCC-manager
Havard Graff [Tue, 23 Feb 2021 08:44:05 +0000 (09:44 +0100)]
rtptwcc: move TWCC-logic over to the TWCC-manager

Prevent cluttering up the rtpsession, and keeping things localized.

Also write TWCC-seqnums for *all* streams in the session if configured by
caps.

A while back WebRTC was not doing TWCC for audio, basically breaking the
whole idea of a "transport-wide seqnuencenumber" applying for all bundled
streams. However, they have since fixed this, and now it no longers
makes sense to be able to single out certain payloadtypes for
use with TWCC, rather just including them all.

This also makes using RTX, RED, FEC etc much simpler, as it will apply
to them all as they enter the rtpsession.

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

3 years agortptwcc: fix warning
Havard Graff [Tue, 23 Feb 2021 08:50:04 +0000 (09:50 +0100)]
rtptwcc: fix warning

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

3 years agortptwcc: fixes and optimizations around run-length chunks
Tulio Beloqui [Thu, 11 Feb 2021 14:17:16 +0000 (15:17 +0100)]
rtptwcc: fixes and optimizations around run-length chunks

Co-authored-by: Havard Graff <havard.graff@gmail.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>

3 years agortptwcc: fix seqnum-wrap
Havard Graff [Fri, 18 Dec 2020 13:01:23 +0000 (14:01 +0100)]
rtptwcc: fix seqnum-wrap

Using the proper API to do this is obviously an improvement, and
adding a test for the case of a packet-loss when the seqnum wrap
is also a good idea.

Co-authored-by: Tulio Beloqui <tulio.beloqui@pexip.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>

3 years agortptwcc: fixed feedback packet count overflow that allowed late
Tulio Beloqui [Fri, 18 Dec 2020 12:06:35 +0000 (13:06 +0100)]
rtptwcc: fixed feedback packet count overflow that allowed late
packets to be processed

Co-authored-by: Havard Graff <havard.graff@gmail.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>

3 years agortptwcc: fixed parsing of old sequence number
Tulio Beloqui [Wed, 16 Dec 2020 15:31:18 +0000 (16:31 +0100)]
rtptwcc: fixed parsing of old sequence number

Co-authored-by: Havard Graff <havard.graff@gmail.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>

3 years agortptwcc: fixed guint8 overflow of feedback packet count
Tulio Beloqui [Wed, 16 Dec 2020 15:16:09 +0000 (16:16 +0100)]
rtptwcc: fixed guint8 overflow of feedback packet count

Co-authored-by: Havard Graff <havard.graff@gmail.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/927>

3 years agortptwcc: add feedback-interval
Havard Graff [Thu, 19 Nov 2020 22:50:23 +0000 (23:50 +0100)]
rtptwcc: add feedback-interval

To allow RTCP TWCC reports to be scheduled on a timer instead of per
marker-bit.

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

3 years agortptwcc: remove _set_send_packet_ts
Havard Graff [Fri, 20 Aug 2021 09:54:01 +0000 (11:54 +0200)]
rtptwcc: remove _set_send_packet_ts

Not in use.

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

3 years agortptwcc: make twcc-tests more deterministic
Havard Graff [Mon, 16 Nov 2020 23:45:02 +0000 (00:45 +0100)]
rtptwcc: make twcc-tests more deterministic

They were a bit racy.

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

3 years agoqtdemux: add depth for ProRes 4:4:4:4 variants if available
Tim-Philipp Müller [Tue, 24 Aug 2021 12:28:22 +0000 (13:28 +0100)]
qtdemux: add depth for ProRes 4:4:4:4 variants if available

Might be 24bpp in case an alpha channel is coded but
the image is always opaque.

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

3 years agoqtmux: for Apple ProRes, allow overriding pixel bit depth for 4:4:4:4 variants
Ruslan Khamidullin [Sun, 22 Aug 2021 23:16:26 +0000 (23:16 +0000)]
qtmux: for Apple ProRes, allow overriding pixel bit depth for 4:4:4:4 variants

e.g. when exporting an opaque image, yet with alpha channel.

Apple ProRes certification requires that, when a ProRes-writing
application *knows* that the entire frame is opaque, the application
writes only RGB without alpha even when the clip is RGBA. For that,
this tiny change allows the app to override pixel depth when writing ProRes.

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

3 years agovpxdec: Fix direct rendering, avoid holding write access
Havard Graff [Wed, 22 May 2019 09:16:56 +0000 (11:16 +0200)]
vpxdec: Fix direct rendering, avoid holding write access

When a buffer is pushed downstream, we should try not to hold the
buffer mapped with write access. Doing so would often lead to
an unneccesary memcpy later.

For instance, gst_buffer_make_writable() in
gst_video_decoder_finish_frame() will cause a memcpy because of
_memory_get_exclusive_reference().

We know that we can perform a two-step remap when using system
memory, as this will not cause the location of the memory to
change.

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

3 years agoisomp4/mux: add a function for seeking to a specific output byte position
Matthew Waters [Thu, 19 Aug 2021 06:26:17 +0000 (16:26 +1000)]
isomp4/mux: add a function for seeking to a specific output byte position

We do it enough times that this makes sense.  Also add a debug log line
for the seek position requested.

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

3 years agoisomp4/mux: don't overwrite with a bigger moov when fragmenting
Matthew Waters [Thu, 19 Aug 2021 06:02:47 +0000 (16:02 +1000)]
isomp4/mux: don't overwrite with a bigger moov when fragmenting

When outputting fragmented mp4, with a seekable downstream, we rewrite
the moov to maybe add a duration to the mvex.  If we start by not
writing the initial moov->mvex->mhed duration and then overwrite with a
moov containing mhed atom, the moov's will have different sizes and
could overwrite subsequent data and result in an unplayable file.

e.g. The initial moov would be of size 842 and the final moov would have
a size of 862.

Fix by always pushing out the mhed duration in the moov when
fragmenting.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/898

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

3 years agoisomp4: actually make streamable fallback work
Matthew Waters [Fri, 15 Jan 2021 09:53:27 +0000 (20:53 +1100)]
isomp4: actually make streamable fallback work

We weren't setting the fragment_mode field anymore now that the
implementation doesn't change based on the value of the streamable
property.  This lead to invalid files.

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

3 years agoisomp4: fix trun data offset handling
Matthew Waters [Fri, 15 Jan 2021 09:54:56 +0000 (20:54 +1100)]
isomp4: fix trun data offset handling

The trun offset was missing a calculation for one of the box type
headers.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/866

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

3 years agoisomp4/mux: fixes for fragmented mp4 output
Matthew Waters [Wed, 14 Oct 2020 13:28:36 +0000 (00:28 +1100)]
isomp4/mux: fixes for fragmented mp4 output

Various buffer offset calculations were not quite correct in all cases.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/866

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

3 years agomatroska-mux: support H264 avc3 / H265 hev1
Mathieu Duponchelle [Mon, 9 Aug 2021 22:53:57 +0000 (00:53 +0200)]
matroska-mux: support H264 avc3 / H265 hev1

The matroska codec specs is unfortunately vague on the subject,
stating for H264:

AVC/H.264 stored as described in [@!ISO.14496-15]

and for H265:

HEVC/H.265 stored as described in [@!ISO.14496-15]

This spec however specifies multiple stream formats, our
implementation has opted for interpreting this as avc1 / hvc1,
both of which disallow in-band SPS.

Most decoders however will support in-band SPS / PPS, and
this commit gives the option to explicitly mux in avc3 / hev1,
which allows changing stream parameters on the fly, that is
useful for smart encoding for example.

When either of these stream formats are picked as the input,
changes in codec_data / tier / level / profile do not cause
renegotiation failure, a warning is logged however as it isn't
clear how compliant such a stream is.

The stream-format field is correctly ordered in the template
caps to avoid selecting potentially non-compliant options on
automatic negotiation.

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

3 years agoisomp4/qtmux: allow renegotiating when tier / level / profile change
Mathieu Duponchelle [Mon, 9 Aug 2021 22:51:36 +0000 (00:51 +0200)]
isomp4/qtmux: allow renegotiating when tier / level / profile change

Those are carried either in codec_data or in-band SPS (for avc3),
and it is OK for those to change, though decoders obviously need
to support it.

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

3 years agoisomp4/qtmux: accept video/x-h264, stream-format=avc3
Mathieu Duponchelle [Fri, 6 Aug 2021 21:36:48 +0000 (23:36 +0200)]
isomp4/qtmux: accept video/x-h264, stream-format=avc3

The main difference between avc1 and avc3 is that avc3 is allowed
to contain in-band SPS / PPS. In practice decoders will always use
in-band parameter sets anyway, but it is cleaner to explicitly
advertise it.

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

3 years agoisomp4/qtmux: make sure to switch to next chunk on new caps
Mathieu Duponchelle [Fri, 6 Aug 2021 20:59:23 +0000 (22:59 +0200)]
isomp4/qtmux: make sure to switch to next chunk on new caps

For example, with single video sink pad, and new codec_data is
received, current_chunk_offset must be reset to -1 for the
aggregate loop to open a new chunk.

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

3 years agoisomp4/atoms: fix multiple stsd entries
Mathieu Duponchelle [Fri, 6 Aug 2021 20:55:32 +0000 (22:55 +0200)]
isomp4/atoms: fix multiple stsd entries

stsd entries are serialized in reverse order (starting from
g_list_last()), and must be prepended to the entry list for their
index to be correct when referenced from stsc entries.

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

3 years agomatroska-mux: Add a timestamp-offset property
Arun Raghavan [Thu, 12 Aug 2021 15:03:58 +0000 (11:03 -0400)]
matroska-mux: Add a timestamp-offset property

Adds a user-controllable timestamp offset to clusters and blocks. This
should be useful if we want to have timestamps that have significance
outside of the current file (for example, we might set the offset to the
wallclock when the file is being created, or some other common base, if
we want to correlate streams across multiple files).

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

3 years agomatroska: demux: update stream_start_time
Stéphane Cerveau [Thu, 15 Jul 2021 10:02:40 +0000 (12:02 +0200)]
matroska: demux: update stream_start_time

The stream_start_time can be less than the first detected.
In case of B-Frame based media, the first frame PTS might be
greater than the next one.

Need to keep the segment.start if a seek has been performed.

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

3 years agomastrokademux: Remove redundant assignment
Nicolas Dufresne [Tue, 17 Aug 2021 20:08:33 +0000 (16:08 -0400)]
mastrokademux: Remove redundant assignment

The segment.position is unconditionnaly set few lines below.

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

3 years agovideocrop: Fix icles tests.
Víctor Manuel Jáquez Leal [Tue, 17 Aug 2021 14:49:47 +0000 (16:49 +0200)]
videocrop: Fix icles tests.

Internally videcrop can call gst_video_crop_set_info() with NULL as in
caps. Then critical messages are raised when the in caps are
processed.

To fix this the in caps are checked, and if they are present, its
capsfeature is extracted, otherwise, the previous raw caps detection
remains as before.

Also the videocrop-test removes the format field in the structure
because now its always passed.

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

3 years agortp: Color Space header extension
Jakub Adam [Fri, 8 Jan 2021 16:34:02 +0000 (17:34 +0100)]
rtp: Color Space header extension

Implements WebRTC header extension defined in
http://www.webrtc.org/experiments/rtp-hdrext/color-space.

It uses RTP header to communicate color space information and optionally
also metadata that is needed in order to properly render a high dynamic
range (HDR) video stream.

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

3 years agov4l2: Add protection when set decoder capture fps accroding to output fps
Hou Qi [Mon, 9 Aug 2021 02:46:30 +0000 (10:46 +0800)]
v4l2: Add protection when set decoder capture fps accroding to output fps

Some v4l2 drivers don't have the capacity to change framerate. There is
chance to make decoder capture fps to be 0/0 if numerator and denominator
returned by G_PARM ioctl are both 0. It causes critical warning
"passed '0' as denominator for `GstFraction'".

In order to fix this, add protection when set decoder capture fps according
to output fps.

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

3 years agortspsrc: Add support to ignore x-server HEADER reply
Per Förlin [Tue, 1 Jun 2021 13:33:01 +0000 (15:33 +0200)]
rtspsrc: Add support to ignore x-server HEADER reply

When connecting to an RTSP server in tunnled mode (HTTP) the server
usually replies with a x-server header. This contains the address
of the intended streaming server. However some servers return an
"invalid" address. Here follows two examples when it might happen.

1. A server use Apache combined with a separate RTSP process to handle
   Https request on port 443. In this case Apache handle TLS and
   connects to the local RTSP server, which results in a local
   address 127.0.0.1 or ::1 in the x-server reply. This address is
   returned to the actual RTSP client in the x-server header.
   The client will receive this address and try to  connect to it
   and fail.

2. The client use a ipv6 link local address with a specified scope id
   fe80::aaaa:bbbb:cccc:dddd%eth0 and connects via Http on port 80.
   The RTSP server receives the connection and returns the address
   in the x-server header. The client will receive this address and
   try to connect to it "as is" without the scope id and fail.

In the case of streaming data from RTSP servers like 1. and 2. it's
useful to have the option to simply ignore the x-server header reply
and continue using the original address.

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

3 years agogstqmlgl: fix indent
Dmitry Shusharin [Wed, 4 Aug 2021 05:33:06 +0000 (12:33 +0700)]
gstqmlgl: fix indent

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

3 years agogstqmlgl: wrap raw GstGLContext into GWeakRef
Dmitry Shusharin [Fri, 30 Jul 2021 09:52:23 +0000 (16:52 +0700)]
gstqmlgl: wrap raw GstGLContext into GWeakRef

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

3 years agogstqmlgl: add multisink test application
Dmitry Shusharin [Fri, 30 Jul 2021 09:32:13 +0000 (16:32 +0700)]
gstqmlgl: add multisink test application

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

3 years agogstqmlgl: refactoring: rename ambiguous variables, clean up unused and duplicated...
Dmitry Shusharin [Fri, 30 Jul 2021 10:21:46 +0000 (17:21 +0700)]
gstqmlgl: refactoring: rename ambiguous variables, clean up unused and duplicated ones

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

3 years agogstqmlgl: rework WGL-specific context init code
Dmitry Shusharin [Fri, 30 Jul 2021 10:20:59 +0000 (17:20 +0700)]
gstqmlgl: rework WGL-specific context init code

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

3 years agogstqmlgl: retrieve correct device bound to current GL context (+ minor code cleanup)
Dmitry Shusharin [Fri, 30 Jul 2021 10:20:49 +0000 (17:20 +0700)]
gstqmlgl: retrieve correct device bound to current GL context (+ minor code cleanup)

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

3 years agogstqmlgl: correct validation for Qt GL context
Dmitry Shusharin [Fri, 30 Jul 2021 10:20:25 +0000 (17:20 +0700)]
gstqmlgl: correct validation for Qt GL context

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

3 years agogstqmlgl: create helper QRunnable-based class for render jobs
Dmitry Shusharin [Fri, 30 Jul 2021 10:20:07 +0000 (17:20 +0700)]
gstqmlgl: create helper QRunnable-based class for render jobs

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

3 years agortpjitterbuffer: fixed stall on gap when using rtx
Tulio Beloqui [Fri, 6 Aug 2021 14:25:02 +0000 (16:25 +0200)]
rtpjitterbuffer: fixed stall on gap when using rtx

Co-authored-by: Håvard Graff <havard@pexip.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1055>

3 years agoflv: use g_memdup2() as g_memdup() is deprecated
Nirbheek Chauhan [Fri, 13 Aug 2021 14:02:53 +0000 (19:32 +0530)]
flv: use g_memdup2() as g_memdup() is deprecated

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

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

3 years agosouphttpsrc: Always use the content decoder but set `Accept-Encoding: identity` if...
Sebastian Dröge [Sun, 15 Aug 2021 09:26:38 +0000 (12:26 +0300)]
souphttpsrc: Always use the content decoder but set `Accept-Encoding: identity` if no compression should be used

Some servers respond with gzip-encoded responses regardless of whether
the request allowed it to be used in the response. By always having the
content decoder enabled, these invalid responses can be decoded
correctly while for well-behaving servers the `compress` property
selects between allowing compressed responses or not.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/833

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

3 years agoqt: always update the sink_retrieved flag when the sink retrieves
Matthew Waters [Thu, 12 Aug 2021 12:57:01 +0000 (22:57 +1000)]
qt: always update the sink_retrieved flag when the sink retrieves

Fixes a case where adding a qmlgloverlay element after an existing
qmlglsink elements was already in the pipeline would create an entirely
separate GstGLDisplay pointing to the same underlying display resource.

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

3 years agovideocrop: Resurrect logging category.
Víctor Manuel Jáquez Leal [Wed, 11 Aug 2021 12:52:52 +0000 (14:52 +0200)]
videocrop: Resurrect logging category.

Fix for a regression from commit 8f1384c9. That commit moved the debug
category definition, as static, into a gstvideocropelement.c, but that
category was used as default, in gstvideocrop.c, so it was never used
at logging, so the debug selector never showed the logs for
videocrop.

This patch move back the category definition into gstvideocrop.c and
leaving the function videocrop_element_init() as a noop.

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

3 years agojpeg: Add support for meson fallback
Seungha Yang [Sat, 31 Jul 2021 14:14:34 +0000 (23:14 +0900)]
jpeg: Add support for meson fallback

Allow building jpeg plugin by using meson fallback

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

3 years agov4l2: Keep decoder capture fps same as output fps if it's not set
Hou Qi [Tue, 27 Jul 2021 02:43:21 +0000 (10:43 +0800)]
v4l2: Keep decoder capture fps same as output fps if it's not set

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

3 years agojack: Add port-names property to select ports explicitly
Seungha Yang [Tue, 27 Jul 2021 09:33:18 +0000 (18:33 +0900)]
jack: Add port-names property to select ports explicitly

By this new property, user can select physical port to connect,
and element will pick requested port instead of random ones.
User should provide full port name including "client_name:" prefix.
An example is
jackaudiosrc port-names="system:capture_1,system:capture_3" ! ...
   jackaudiosink port-names="system:playback_2"

In addition to "port-names" property, a new connect type "explicit"
is added so that element can post error message if requested
"port-names" contains invalid port(s).

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

3 years agoqt: Support RGB format
Kai Uwe Broulik [Fri, 23 Jul 2021 09:04:00 +0000 (11:04 +0200)]
qt: Support RGB format

In GstQSGTexture::hasAlphaChannel return value based on
whether the video format has alpha channel.

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

3 years agojack: Add low-latency property for automatic latency-optimized setting
Seungha Yang [Mon, 26 Jul 2021 11:14:32 +0000 (20:14 +0900)]
jack: Add low-latency property for automatic latency-optimized setting

Similar to wasapi/wasapi2 plugins on Windows, adding low-latency
option so that jack element can optimize GstAudioRingBufferSpec
setting for low latency.

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

3 years agojack: Remove trailing whitespace
Seungha Yang [Mon, 26 Jul 2021 10:55:25 +0000 (19:55 +0900)]
jack: Remove trailing whitespace

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

3 years agovideocrop: Resurrect any caps feature negotiation.
Víctor Manuel Jáquez Leal [Tue, 27 Jul 2021 15:58:15 +0000 (17:58 +0200)]
videocrop: Resurrect any caps feature negotiation.

Commit e31cbce4 brought a regression to negotiate featured caps. But
only by removing the entry in the caps template. This commit brings it
back.

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

3 years agojack: Fix assertion fail when device supports only mono channel
Seungha Yang [Mon, 26 Jul 2021 09:43:04 +0000 (18:43 +0900)]
jack: Fix assertion fail when device supports only mono channel

MAX should be larger than MIN for GST_TYPE_INT_RANGE.

GStreamer-CRITICAL **: 18:26:27.912:
gst_value_collect_int_range: assertion 'collect_values[0].v_int < collect_values[1].v_int' failed

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

3 years agoqmlglsrc: fix operation without any qmlglsink
Matthew Waters [Wed, 21 Jul 2021 10:14:46 +0000 (20:14 +1000)]
qmlglsrc: fix operation without any qmlglsink

E.g. a pipeline like qmlglsrc ! gldownload ! ... would currently fail to
run because the OpenGL context are not created in the correct order.

The QtWindow also needs to know the OpenGL context used by downstream
elements in order to set optimize for the correct GstGLSyncMeta for
synchonisation purposes.

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

3 years agosplitmuxsink: Fix some reference leaks in error cases.
Jan Schmidt [Mon, 26 Jul 2021 07:55:24 +0000 (17:55 +1000)]
splitmuxsink: Fix some reference leaks in error cases.

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

3 years agosplitmuxsink: Prevent hang going back to NULL after failures
Jan Schmidt [Wed, 7 Jul 2021 14:12:52 +0000 (00:12 +1000)]
splitmuxsink: Prevent hang going back to NULL after failures

Prevent a condition where splitmuxsink won't go back to NULL state
after a child element fails to change state by making sure that
a READY->READY state change doesn't fail, and by returning
GST_FLOW_ERROR or GST_FLOW_FLUSHING upstream to shut down streaming
as quickly as possible.

This can happen after (for example) setting an invalid filename
on the sink element. In that case, the READY->PAUSED transition
fails, but with internal elements still in the NULL state. Trying
to set splitmuxsink back to NULL then ends up trying to bring
those NULL elements up to READY with a READY->READY transition,
(which fails, prevent splitmuxsink from getting to NULL)

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

3 years agodeinterlace: reduce noise when gst_pad_set_caps fails
Mathieu Duponchelle [Mon, 12 Jul 2021 23:27:45 +0000 (01:27 +0200)]
deinterlace: reduce noise when gst_pad_set_caps fails

It may be that downstream is simply flushing, in which case logging
an error is misleading.

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

3 years agosplitmuxsink: always use factory property when set
Mathieu Duponchelle [Thu, 8 Jul 2021 00:22:20 +0000 (02:22 +0200)]
splitmuxsink: always use factory property when set

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

3 years agoqtdemux: No need for new "application/x-cbcs" caps
Yacine Bandou [Mon, 21 Jun 2021 11:47:50 +0000 (13:47 +0200)]
qtdemux: No need for new "application/x-cbcs" caps

Instead of using the new "application/x-cbcs" caps, we are just adding
a new structure field "ciphe-mode", to indicate which encryption scheme
is used: "cenc", "cbcs", "cbc1" or "cens".

Similarly for the protection metadata, we add the "cipher-mode" field
to specify the encryption mode with which the buffers are encrypted.

"cenc": AES-CTR (no pattern)
"cbc1": AES-CBC (no pattern)
"cens": AES-CTR (pattern specified)
"cbcs": AES-CBC (pattern specified, using a constant IV)

Currently only "cenc" and "cbcs" are supported.

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

3 years agoqt: Fix clang build
Philippe Normand [Mon, 5 Jul 2021 15:12:57 +0000 (16:12 +0100)]
qt: Fix clang build

The updatePaintNode method is part of the QQuickItem class interface, so needs
to be flagged as overriding the default implementation.

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

3 years agoqt: Add navigation events support
Philippe Normand [Wed, 15 Apr 2020 09:38:04 +0000 (10:38 +0100)]
qt: Add navigation events support

Currently handles only mouse events.

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

3 years agogtk: Scroll events dispatch support
Philippe Normand [Wed, 15 Apr 2020 09:33:22 +0000 (10:33 +0100)]
gtk: Scroll events dispatch support

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

3 years agomatroskamux: Always write a tags element into seekhead
Jan Schmidt [Thu, 1 Jul 2021 15:41:05 +0000 (01:41 +1000)]
matroskamux: Always write a tags element into seekhead

If there are only stream tags, we still want to write the
tags entry into the seekhead, so that tags can be found
quickly in the player.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/905

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

3 years agoqtmux: Don't need to update track per GstCaps if it's not changed
Seungha Yang [Wed, 30 Jun 2021 14:52:26 +0000 (23:52 +0900)]
qtmux: Don't need to update track per GstCaps if it's not changed

Skip GstQTMuxPad::set_caps() call for duplicated caps.
All the processing done in set_caps() method for duplicated caps
are redundant.

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

3 years agortpssrcdemux: Remove pads and reset the element also in READY->NULL
Sebastian Dröge [Thu, 1 Jul 2021 10:18:45 +0000 (13:18 +0300)]
rtpssrcdemux: Remove pads and reset the element also in READY->NULL

Mostly for completeness.

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

3 years agortpptdemux: Remove pads also in PAUSED->READY
Sebastian Dröge [Thu, 1 Jul 2021 10:18:09 +0000 (13:18 +0300)]
rtpptdemux: Remove pads also in PAUSED->READY

They're based on per-stream information and that should be reset
whenever going to READY state.

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

3 years agodocs: update plugins cache for vp9enc
Jakub Adam [Tue, 16 Feb 2021 15:39:34 +0000 (16:39 +0100)]
docs: update plugins cache for vp9enc

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

3 years agovpx: add enum for adaptive quantization modes
Jakub Adam [Fri, 9 Apr 2021 17:22:29 +0000 (19:22 +0200)]
vpx: add enum for adaptive quantization modes

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

3 years agovp9enc: expose frame-parallel-decoding property
Jakub Adam [Tue, 16 Feb 2021 12:28:00 +0000 (13:28 +0100)]
vp9enc: expose frame-parallel-decoding property

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

3 years agovp9enc: expose aq-mode property
Jakub Adam [Tue, 16 Feb 2021 11:57:55 +0000 (12:57 +0100)]
vp9enc: expose aq-mode property

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

3 years agomultiudpsink: Fix broken SO_SNDBUF get/set on Windows
Seungha Yang [Sat, 26 Jun 2021 11:00:03 +0000 (20:00 +0900)]
multiudpsink: Fix broken SO_SNDBUF get/set on Windows

SO_SNDBUF has been undefined on Windows because of missing WinSock2.h
include. And don't use native socket functions (e.g., setsockopt())
if code is expected to be built on Windows. We don't link ws2_32.lib
for this plugin.

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

3 years agortpmanager: Access GstRTPHdrExt fields through accessor
Olivier Crête [Thu, 24 Jun 2021 18:57:14 +0000 (14:57 -0400)]
rtpmanager: Access GstRTPHdrExt fields through accessor

This way, the implementation can be private.

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

3 years agoqtdemux: Refuse seeks in BYTES format
Jan Schmidt [Tue, 22 Jun 2021 07:19:19 +0000 (17:19 +1000)]
qtdemux: Refuse seeks in BYTES format

If downstream tries to seek in BYTES format, don't pass that through
to upstream. The byte positions downstream requests won't make any
sense in the muxed stream. There might be other formats we want to
pass through to upstream, but BYTES is not one of them. If we get a
seeking query about BYTES format, refuse that too.

This fixes a situation where we're playing a fragmented mp4 over http
and qtdemux refuses the initial seek (in TIME format), but then
h264parse/baseparse send a seek in BYTES format and everything falls
apart.

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

3 years agortph265depay: update codec_data in caps regardless of format
Nirbheek Chauhan [Wed, 16 Jun 2021 11:00:59 +0000 (16:30 +0530)]
rtph265depay: update codec_data in caps regardless of format

Updating of codec_data in the caps is important to propagate changes
in sps/pps/vps via NALs. Without this, downstream does not renegotiate
when upstream changes resolution.

The comment referring to rtph264pay is from 2015 and is out of date.
rtph264pay stopped doing that in 2017 with commit
dabeed52a995d27e16eba9e4617e61eb0bcd44c4

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

3 years agodoc: update gst_plugins_cache.json
Jordan Petridis [Fri, 4 Jun 2021 10:56:05 +0000 (13:56 +0300)]
doc: update gst_plugins_cache.json

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

3 years agoqtitem: don't potentially leak a large number of buffers
Matthew Waters [Thu, 3 Jun 2021 10:33:45 +0000 (20:33 +1000)]
qtitem: don't potentially leak a large number of buffers

The only other place where these queued buffers are removed, is in
setCaps() but that is not called at all on shutdown so this list of
buffers could not be removed.

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

3 years agojpegenc: Remove arbitrary encoding size limitation
Nicolas Dufresne [Fri, 28 May 2021 13:54:12 +0000 (09:54 -0400)]
jpegenc: Remove arbitrary encoding size limitation

The encoder is happy to encode with sizes less then 16x16, so remove this
arbitrary limitation. This also fixes the fact the sink and src template caps
disagree.

Fixes #888

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

3 years agoqtdemux: use g_memdup2() as g_memdup() is deprecated
Tim-Philipp Müller [Sun, 23 May 2021 14:42:38 +0000 (15:42 +0100)]
qtdemux: use g_memdup2() as g_memdup() is deprecated

- atom nodes/bytereader sizes are already checked
- palettes: are fixed/known size

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

Also use gst_buffer_new_memdup() instead of _wrapped(g_memdup(),..).

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

3 years agomatroskademux: use g_memdup2() as g_memdup() is deprecated
Tim-Philipp Müller [Sun, 23 May 2021 00:28:11 +0000 (01:28 +0100)]
matroskademux: use g_memdup2() as g_memdup() is deprecated

- ebml-read: add some sanity checks when going from 64-bit
  to 32-bit length
- matroska-ids: codec_data_size has been checked via
  gst_ebml_read_binary(), is existing allocation.
- matroska-demux: alloc size is from existing allocations

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

Also use gst_buffer_new_memdup() instead of _wrapped(g_memdup(),..).

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

3 years agoUse g_memdup2() where available and add fallback for older GLib versions
Tim-Philipp Müller [Sat, 22 May 2021 18:39:32 +0000 (19:39 +0100)]
Use g_memdup2() where available and add fallback for older GLib versions

- png: alloc size variable is a png type that's always 32-bit
- vpx: alloc size based on existing allocation
- wavpack: alloc size based on existing allocation
- icles: gdkpixbufoverlay: trusted and hard-coded input data
- rtp tests: rtp-payloading, vp8, vp9, h264, h265: trusted and/or static input data

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

Also use gst_buffer_new_memdup() instead of _wrapped(g_memdup(),..)

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

3 years agoBack to development
Tim-Philipp Müller [Tue, 1 Jun 2021 14:28:36 +0000 (15:28 +0100)]
Back to development

3 years agoRelease 1.19.1
Tim-Philipp Müller [Mon, 31 May 2021 23:11:44 +0000 (00:11 +0100)]
Release 1.19.1

3 years agortpjpegpay: fix image corruption when compiled with MSVC on Windows
Tim-Philipp Müller [Sat, 29 May 2021 11:54:22 +0000 (12:54 +0100)]
rtpjpegpay: fix image corruption when compiled with MSVC on Windows

On Windows with MSVC, jpeg_header_size would end up 2 bytes larger
than it should be. This then leads to the first 2 bytes of the
actual jpeg image data to be dropped, because we think those
belong to the header, which results in an undecodable image when
reconstructed in the depayloader.

What happens is that when the compiler evaluates

  jpeg_header_size = mem.offset + read_u16_and_inc_offset_by_2(&mem);

it actually uses the mem.offset value after it has been increased
by the function call on the right hand size of the equation.

From section 6.5 of the C99 spec:

  3. The grouping of operators and operands is indicated by the syntax [74].
     Except as specified later (for the function-call (), &&, ||, ?:, and
     comma operators), the order of evaluation of subexpressions and the
     order in which side effects take place are both unspecified.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/889

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

3 years agov4l2videoenc: Set default latency if the frame duration is invalid
Hou Qi [Tue, 25 May 2021 08:19:20 +0000 (16:19 +0800)]
v4l2videoenc: Set default latency if the frame duration is invalid

If the duration of the v4l2object is invalid, use default 25fps instead.

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

3 years agodeinterlace: Drop "field-order" field while transforming caps
Seungha Yang [Tue, 25 May 2021 15:23:56 +0000 (00:23 +0900)]
deinterlace: Drop "field-order" field while transforming caps

Like other basetransform subclasses are doing, drop field
which can be converted by deinterlace.

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

3 years agodeinterlace: Drop field-order field if outputting progressive
Seungha Yang [Tue, 25 May 2021 11:10:34 +0000 (20:10 +0900)]
deinterlace: Drop field-order field if outputting progressive

Progressive with field-order doesn't make sense

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

3 years agortpssrcdemux: fix "data flow before segment event" crash
Havard Graff [Fri, 21 May 2021 12:19:29 +0000 (14:19 +0200)]
rtpssrcdemux: fix "data flow before segment event" crash

This crash could happen at any time a RTP and RTCP buffer arrived
simultaneously in ssrcdemux.

The problem was that sticky-event arriving while the rtp and rtcp pads
were being set up could arrive just too late to be included in the initial
forwarding.

The fix checks if the stickies have been sent on the srcpad about to be
pushed on, and if not sends them. It also blocks any stickes from
being forwarded *prior* to this happening, to avoid them arriving on
the srcpad multiple times.

Since the test loops 1000 times, this will make running under valgrind
take forever, so use the RUNNING_ON_VALGRIND variable to detect we
are running under valgrind, and reduce the loop-count to 2 in that case.

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

3 years agortpssrcdemux: refactor destruction of GstRtpSsrcDemuxPads
Havard Graff [Fri, 21 May 2021 16:45:17 +0000 (18:45 +0200)]
rtpssrcdemux: refactor destruction of GstRtpSsrcDemuxPads

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

3 years agortpssrcdemux: make naming consistent
Havard Graff [Fri, 21 May 2021 16:30:28 +0000 (18:30 +0200)]
rtpssrcdemux: make naming consistent

Use plural for GstRtpSsrcDemuxPads, since it contains two pads, and
use the variable-name 'dpads' everywhere.

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

3 years agowavparse: use g_strndup() for copying text data
Tim-Philipp Müller [Sun, 23 May 2021 14:14:11 +0000 (15:14 +0100)]
wavparse: use g_strndup() for copying text data

So we don't rely on NUL terminators inside the data.

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

3 years agowavparse: clean up adtl/note/labl chunk parsing
Tim-Philipp Müller [Sun, 23 May 2021 12:29:07 +0000 (13:29 +0100)]
wavparse: clean up adtl/note/labl chunk parsing

We were passing the size of the adtl chunk to the note/labl
sub-chunk parsing function, which means we may memdup lots of
data after the chunk string's NUL terminator that doesn't
really belong to it.

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

3 years agowavparse: guard against overflow when comparing chunk sizes
Tim-Philipp Müller [Sun, 23 May 2021 12:24:21 +0000 (13:24 +0100)]
wavparse: guard against overflow when comparing chunk sizes

Could be rewritten as lsize > (size - 8) a well, but the
extra check seems clearer. Doesn't look like it was problematic,
lsize wasn't actually used when parsing the sub-chunks.

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

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

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

3 years agomatroskademux: fix decoder glitches with H264 content
Stéphane Cerveau [Wed, 5 May 2021 11:20:04 +0000 (13:20 +0200)]
matroskademux: fix decoder glitches with H264 content

To avoid decoder starvation causing glitches on screen,
the demuxer shall clip only when the buffer is a key frame
and the lace time is greater than the stop time.

Fixes gst-editing-services#128

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

3 years agoqml: don't use buffers that have invalid contents
Matthew Waters [Tue, 11 May 2021 10:41:38 +0000 (20:41 +1000)]
qml: don't use buffers that have invalid contents

If the GL context is not shareable, ignore it.

A future change may also not output the relevant output either.

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

3 years agoqml: also use the dummy texture when no buffer has been set
Matthew Waters [Tue, 11 May 2021 10:38:52 +0000 (20:38 +1000)]
qml: also use the dummy texture when no buffer has been set

Fixes corrupted texture output when changing OpenGL display/contexts.

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

3 years agodoc: Update cache for RGBP format addition
Nicolas Dufresne [Tue, 11 May 2021 21:20:00 +0000 (17:20 -0400)]
doc: Update cache for RGBP format addition

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

3 years agomatroskademux: Advertise codec-alpha in caps
Nicolas Dufresne [Fri, 23 Apr 2021 18:37:46 +0000 (14:37 -0400)]
matroskademux: Advertise codec-alpha in caps

This will be used to select the appropriate decoders. We also only attach the
GstVideoCodecAlphaMeta if the AlphaMode element is set, this is to stay on the
safe side and mimic what browsers (verified in Firefox and Chromium code) do.

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