platform/upstream/gstreamer.git
2 years agoMerge branch 'tizen' into tizen_gst_1.19.2
Gilbok Lee [Mon, 17 Jan 2022 05:10:42 +0000 (14:10 +0900)]
Merge branch 'tizen' into tizen_gst_1.19.2

Change-Id: I904018a26020868a46b46717571e6786b0362697

2 years agosubparse: Add drop-out-of-segment property
Gilbok Lee [Wed, 1 Dec 2021 00:34:36 +0000 (09:34 +0900)]
subparse: Add drop-out-of-segment property

- When property 'drop-out-of-segment' is set to false,
  subparser will not drop the buffer even
  the start time of the parsed buffer is out of the segment.

Change-Id: Ia7d84ad26c2e93cda46778c86d35bd67442e907b

2 years agosubparse: Calcurate buffer pts using timestamp map for HLS webvtt
Gilbok Lee [Wed, 24 Nov 2021 10:28:03 +0000 (19:28 +0900)]
subparse: Calcurate buffer pts using timestamp map for HLS webvtt

- parsing error occurs due to out of segment

Change-Id: Ib7945d1d3e64ed2568df94c77436444117fb9ea5

2 years agosubparse: Send custom event for fragment_timestamp
Gilbok Lee [Wed, 24 Nov 2021 00:33:17 +0000 (09:33 +0900)]
subparse: Send custom event for fragment_timestamp

- If there is no buffer in case of discontinuous,
  do not send reference timestamp.
- related commit: d4e6aa89f86efbc9cc665f2ee123a33015f1449a
  'subparse: Add reference timestamp meta in GstBuffer for HLS webvtt' commit

Change-Id: Id98697ba6db1dc94b4ce4f753670524f6fcf506e

2 years agosubparse: Add reference timestamp meta in GstBuffer for HLS webvtt
Gilbok Lee [Sat, 20 Nov 2021 06:39:08 +0000 (15:39 +0900)]
subparse: Add reference timestamp meta in GstBuffer for HLS webvtt

- When discontinuous buffer come in during HLS,
  send the input buffer pts to the reference timestamp meta data
- The reference timetamp meta data is added with the input buffer pts
  to synchronize with the mpeg ts stream

Change-Id: I5ff5b9523b44323f1d6aa37133e5341505d4ce55

2 years agodecodebin3: Avoid overriding explicit user selection
Eunhye Choi [Tue, 28 Sep 2021 07:08:28 +0000 (16:08 +0900)]
decodebin3: Avoid overriding explicit user selection

In case the user set a list of streams to select or answer explicitly
to all 'select-stream' event, we should respect the choice and not
try to add a stream per type.

related upstream commit :
b41b87522f59355bb21c001e9e2df96dc6956928
c9c93339fbd2d37f1ddfd054f7f9e26bce6df743
40fde5fcad0bcdb5429d7bf573690cfe55fc79c8

Change-Id: I63b75bb02fbe40392ae3edbf83a9830d7b606437

2 years agoRelease 1.19.2
Tim-Philipp Müller [Thu, 23 Sep 2021 00:33:08 +0000 (01:33 +0100)]
Release 1.19.2

2 years agopbutils: codec-utils: fix g-ir-scanner warning
Tim-Philipp Müller [Tue, 21 Sep 2021 21:39:46 +0000 (22:39 +0100)]
pbutils: codec-utils: fix g-ir-scanner warning

Warning: GstPbutils: gst_codec_utils_h264_get_profile_flags_level:
unknown parameter 'codec_data' in documentation comment, should be 'codecs_data

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

2 years agoalsasink: Allow stop() function to happen during failing writes
Nicolas Dufresne [Tue, 24 Aug 2021 19:27:32 +0000 (15:27 -0400)]
alsasink: Allow stop() function to happen during failing writes

In ALSA, there is possible temporary failures that may require a retry,
though in certain situation, this may leak to the write() function
holding on a lock forever preventing the pipeline from going to pause
or stop. Fix this by shortly dropping the lock between retries.

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

2 years agoalsasink: Improve logging in write() function
Nicolas Dufresne [Tue, 24 Aug 2021 19:26:12 +0000 (15:26 -0400)]
alsasink: Improve logging in write() function

This moves the "written X frames" lower so that we don't trace
confusing negative values on errors and add the error code in the
"Write error" log.

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

2 years agovideodecoder: Add properties to automatically request sync points and vfunc to allow...
Sebastian Dröge [Fri, 10 Sep 2021 12:10:46 +0000 (15:10 +0300)]
videodecoder: Add properties to automatically request sync points and vfunc to allow subclasses to handle packet loss / missing data

Subclasses could use the new vfunc to activate packet loss concealment,
for example.

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

2 years agovideodecoder: Fix min-force-key-unit-interval logic and logging
Havard Graff [Fri, 10 Sep 2021 14:12:51 +0000 (16:12 +0200)]
videodecoder: Fix min-force-key-unit-interval logic and logging

The new keyframe is needed when the deadline of the buffer has exeeded
the waiting time, not while it is within it.

Also, since we look at the deadline of the frame, log that instead of PTS.

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

2 years agortphdrext: Make write function return a signed value
Olivier Crête [Wed, 18 Aug 2021 23:40:55 +0000 (19:40 -0400)]
rtphdrext: Make write function return a signed value

Since the return value is documented to possibly be smaller than 0,
then it needs to be signed.

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

2 years agovideorate: Add unit test for closing a segment and opening a separate one
Olivier Crête [Wed, 16 Jun 2021 19:07:13 +0000 (15:07 -0400)]
videorate: Add unit test for closing a segment and opening a separate one

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

2 years agovideorate: Drop incoming buffers that are outside of the segment
Olivier Crête [Wed, 16 Jun 2021 19:06:57 +0000 (15:06 -0400)]
videorate: Drop incoming buffers that are outside of the segment

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

2 years agovideorate: Only "close" the segment if it is discontinous
Olivier Crête [Fri, 24 Jul 2020 21:41:57 +0000 (17:41 -0400)]
videorate: Only "close" the segment if it is discontinous

Otherwise, it will drop valid buffers on a simple segment update

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

2 years agovideorate: Add test for segment update
Olivier Crête [Fri, 24 Jul 2020 21:38:58 +0000 (17:38 -0400)]
videorate: Add test for segment update

Continue as-is on segment update.

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

2 years agovideorate: Update the base time on segment updates
Olivier Crête [Fri, 24 Jul 2020 20:35:04 +0000 (16:35 -0400)]
videorate: Update the base time on segment updates

Dropping it to 0 makes videorate push buffers from timestamp 0 again.

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

2 years agocameracontrol: Add new interface for extra preview GOP interval
Jeongmo Yang [Mon, 13 Sep 2021 11:16:35 +0000 (20:16 +0900)]
cameracontrol: Add new interface for extra preview GOP interval

[Version] 1.16.2-18
[Issue Type] New feature

Change-Id: I5bff2e0433c87bc2daf2949804719cd41c1b48f2
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
2 years agodiscoverer: Prevent stream tags from leaking in global tags
Philippe Normand [Sun, 12 Sep 2021 09:07:49 +0000 (10:07 +0100)]
discoverer: Prevent stream tags from leaking in global tags

The PrivateStream should keep track of stream tags only. Likewise, the
GstDiscovererInfo should keep track of global tags only.

This patch fixes the issue where the discoverer would report duplicated tag
titles, especially for Matroska media files. The Matroska demuxer emits
correctly-scoped tags, but downstream was making no distinction of them.

Fixes #598, #836, https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/827

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

2 years agogl/buffer_storage: re-enable GL_ARB_buffer_storage
Matthew Waters [Thu, 9 Sep 2021 05:44:55 +0000 (15:44 +1000)]
gl/buffer_storage: re-enable GL_ARB_buffer_storage

The extension version doesn't have the ARB suffix.

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

2 years agortspconnection: Only reset timeout when socket is unused
Tobias Ronge [Tue, 7 Sep 2021 11:55:08 +0000 (13:55 +0200)]
rtspconnection: Only reset timeout when socket is unused

After sending or retrieving data, gstrtspconnection resets the socket's
timeout to 0 (infinite). This could cause problems if sending and
receiving at the same time. For example, if RTCP data is sent from the
streaming thread while gstrtspsrc is already retrieving data.

With this patch, timeout is only reset to 0 if there is no other
thread using the socket.

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

2 years agopbutils: Add mjpg to MIME codecs
Ludvig Rappe [Thu, 2 Sep 2021 09:55:09 +0000 (11:55 +0200)]
pbutils: Add mjpg to MIME codecs

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

2 years agodecodebin3: fix unblocking on input gap events
Mathieu Duponchelle [Sun, 1 Aug 2021 16:20:06 +0000 (18:20 +0200)]
decodebin3: fix unblocking on input gap events

Initial gap events should not be discarded on the input streams,
but instead cause unblocking just as buffers do.

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

2 years agoparsebin: Guess subtitle/ caps as text streams
Philippe Normand [Thu, 24 Jun 2021 15:00:03 +0000 (16:00 +0100)]
parsebin: Guess subtitle/ caps as text streams

The subtitles in ogg/kate are identified using subtitle/ caps names.

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

2 years agocameracontrol: Add new interface for extra preview bitrate
Jeongmo Yang [Wed, 1 Sep 2021 11:54:26 +0000 (20:54 +0900)]
cameracontrol: Add new interface for extra preview bitrate

[Version] 1.16.2-17
[Issue Type] New feature

Change-Id: Iaace8d2d4814cb782809daf87905d4ec946664f8
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
2 years agortp: add some additional rtcp sdes values
Matthew Waters [Tue, 31 Aug 2021 05:31:23 +0000 (15:31 +1000)]
rtp: add some additional rtcp sdes values

Matches the current list at
https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-5
as of 2021-September.

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

2 years agopbutils: Add function to convert caps to MIME codec
Ludvig Rappe [Wed, 25 Aug 2021 15:03:49 +0000 (17:03 +0200)]
pbutils: Add function to convert caps to MIME codec

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

2 years agopbutils: Add function for parsing H.264 extradata
Ludvig Rappe [Wed, 25 Aug 2021 15:01:19 +0000 (17:01 +0200)]
pbutils: Add function for parsing H.264 extradata

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

2 years agoeglimage: fix redefinition of EGLuint64KHR
Olivier Blin [Tue, 24 Aug 2021 16:14:22 +0000 (18:14 +0200)]
eglimage: fix redefinition of EGLuint64KHR

It is already defined in gst/gl/egl/gstegl.h

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

2 years agovideo-converter: Add support for A420 to RGB fast path
Seungha Yang [Thu, 5 Aug 2021 10:59:38 +0000 (19:59 +0900)]
video-converter: Add support for A420 to RGB fast path

Add fast path for A420 -> RGB format conversion

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

2 years agocompositor: Fix crash while drawing background and/or blending for subsampled YUV
Seungha Yang [Mon, 19 Jul 2021 13:11:41 +0000 (22:11 +0900)]
compositor: Fix crash while drawing background and/or blending for subsampled YUV

Fix crash caused by out-of-bounds memory accesses when drawing
background and/or blending. This fix is conceptually identical to the
approach as the commit of 8ff5079e5eef37b9bd5b212350f0cefbd9546b1b

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

2 years agoencoding-profile: ignore more encoding private fields
Mathieu Duponchelle [Sat, 14 Aug 2021 23:27:39 +0000 (01:27 +0200)]
encoding-profile: ignore more encoding private fields

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

2 years agosmartencoder: Respect user `stream-format` when specified
Thibault Saunier [Tue, 10 Aug 2021 01:24:34 +0000 (21:24 -0400)]
smartencoder: Respect user `stream-format` when specified

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

2 years agosmartencoder: clean up and extend accepted formats
Mathieu Duponchelle [Tue, 10 Aug 2021 00:09:09 +0000 (02:09 +0200)]
smartencoder: clean up and extend accepted formats

* Add support for H265

* Don't overwrite original codec_data / streamheader in the output
  caps, but instead allow them to change and send them to the
  combiner at the right moment: encoder caps, reencoded GOP,
  original caps, original GOP(s), and potentially encoder caps
  and rencoded last GOP.

* For H264 / H265, force usage of a format with inband SPS / PPS
  (avc3 / hev1), this is cleaner than misadvertising avc1, hvc1 and
  some muxers like mp4mux will actually advertise both differently.

  Unfortunately, while mp4 supports updating the codec_data and using
  avc1 with no in-band SPS / PPS updates, it turns out some decoders
  (eg chrome / firefox) don't handle this particularly well and stop
  decoding after the reencoded GOP. We could expose a switch to
  force usage of avc1 / hvc1 nevertheless, but for now stick to
  requiring that the parser output SPS / PPS in-band with
  config-interval=-1 (that has not changed)

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

2 years agocompositor: Add "max-threads" property
Seungha Yang [Tue, 3 Aug 2021 15:51:24 +0000 (00:51 +0900)]
compositor: Add "max-threads" property

Adding new property for user to be able to set expected the maximum
number of blend task threads. This can be useful in case that user
wants to restrict the number of parallel task runners for system
resource management or debugging/development purpose.

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

2 years agopbutils: Expose functions for getting a file extension for caps and flags for describ...
Sebastian Dröge [Thu, 1 Jul 2021 09:41:11 +0000 (12:41 +0300)]
pbutils: Expose functions for getting a file extension for caps and flags for describing the format of the caps

This information was available internally already but not available from
the outside.

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

2 years agoplaybin/uridecodebin: Emit source-setup signal early before doing the scheduling...
Sebastian Dröge [Wed, 4 Aug 2021 07:06:02 +0000 (10:06 +0300)]
playbin/uridecodebin: Emit source-setup signal early before doing the scheduling query

Some elements will require the source to be set up properly before the
scheduling query returns useful results, e.g. appsrc and giostreamsrc.

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

2 years agoext: alsa: Fix fallback paths for setting buffer and period times
Devarsh Thakkar [Thu, 10 Jun 2021 07:55:23 +0000 (00:55 -0700)]
ext: alsa: Fix fallback paths for setting buffer and period times

Below fallback paths were introduced in
https://github.com/GStreamer/gst-plugins-base/commit/9759810d8206b5f1aa199f98599caec3630a1813
if setting period time after buffer time failed :
1) Set period time and then buffer time if it doesn't work
2) Set only buffer time
3) Set only period time

These all were not functioning properly since they were using old
copy of snd_pcm_hw_params_t which already had some fields set
as per previous try and this was causing issues as driver was
referring to that old value while trying to set them again in
fallback paths.

So now we always use the initial copy of snd_pcm_hw_params_t
for every fallback  and same is also being done at
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/commit/557c4295107dc7374c850b0bd5331dd35e8fdd0f

Also we change the sequence to set period time earlier than
buffer time since period bytes being the smaller unit, most of the times
if underlying alsa device has a dependency then it is of period bytes
to be a multiple of some value (as per underlying DMA constraint)
and rest of the parameters like buffer bytes need to be adjusted
as per period bytes.

The same sequence is also followed in alsa-utils at
https://github.com/alsa-project/alsa-utils/commit/9b621eeac4d55c4e881f093be5b163ca07d01b63

Fix 2) and 3) scenarios by returning success if the exclusive setting is passed
and not doing any further setting for buffer time or period time.

Add new fallback path of not setting any buffer time and period time
if all above fallback paths fail. The same is also being
followed at aforementioned pulseaudio commit.

In case of alsasink, remove the retry goto label, since it is not
required anymore as fallback paths take care of setting default
values if driver is not accepting any of the fallback paths.

Use separate label for exit to free params structs and return err
code. This also fixes leak in no_rate goto path in alsasink

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

2 years agovideoencoder: pass upstream HDR information through codec state
Jakub Adam [Tue, 25 May 2021 19:16:48 +0000 (21:16 +0200)]
videoencoder: pass upstream HDR information through codec state

Don't copy HDR metadata from sink pad, because its caps may not have
been set yet if GstVideoEncoder::negotiate is called from
GstVideoEncoder::set_format, as e.g. vpx encoder does.

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

2 years agovideoutils: add HDR metadata fields to GstVideoCodecState
Jakub Adam [Tue, 25 May 2021 19:15:53 +0000 (21:15 +0200)]
videoutils: add HDR metadata fields to GstVideoCodecState

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

2 years agovideo-overlay-composition: Allow empty overlay compositions
Sebastian Dröge [Mon, 16 Aug 2021 07:19:07 +0000 (10:19 +0300)]
video-overlay-composition: Allow empty overlay compositions

Allowing to pass NULL to the constructor removes the need to
special-case the first rectangle in calling code and generally
simplifies application code.

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

2 years agogstrtspconnection: Add support to ignore x-server header reply
Per Förlin [Tue, 1 Jun 2021 13:27:31 +0000 (15:27 +0200)]
gstrtspconnection: 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-base/-/merge_requests/1192>

2 years agosdp: Avoid using g_memdup() since it is deprecated
Nirbheek Chauhan [Fri, 13 Aug 2021 14:05:23 +0000 (19:35 +0530)]
sdp: Avoid using g_memdup() since it is deprecated

g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib. Instead of using
g_memdup2(), we can simply use the new gst_buffer_new_memdup() added
in 1.19.x

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

2 years agoglbuffer: support persistent buffer mappings
Matthew Waters [Fri, 4 Jun 2021 08:32:07 +0000 (18:32 +1000)]
glbuffer: support persistent buffer mappings

Requires OpenGL 4.4 or EXT_buffer_storage

Current mesa exposes GL_ARB_buffer_storage when retrieving the relevant
functions returns no-ops and causes failures.

Improves throughput of uploads by roughly 30%-60% and download throughput by
roughly 10-30% across depending on the exact scenario and hardware.

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

2 years agoexamples: win32-videooverlay: Add support for testing gst_video_overlay_set_render_re...
Seungha Yang [Fri, 30 Jul 2021 14:57:20 +0000 (23:57 +0900)]
examples: win32-videooverlay: Add support for testing gst_video_overlay_set_render_rectangle

Add keyboard handler to test gst_video_overlay_set_render_rectangle()
API for Windows video elements

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

2 years agoexamples: win32-videooverlay: Use d3d11videosink by default
Seungha Yang [Fri, 30 Jul 2021 14:04:57 +0000 (23:04 +0900)]
examples: win32-videooverlay: Use d3d11videosink by default

d3d11videosink was promoted to have primary rank and
it's recommended videosink element on Windows

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

2 years agotests: appsink: Add reverse stepping test case
Seungha Yang [Thu, 8 Jul 2021 08:47:28 +0000 (17:47 +0900)]
tests: appsink: Add reverse stepping test case

To demonstrate reverse stepping issue of
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/848

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

2 years agoMerge "subparse: Remove gst_event_unref when not support byte seek" into tizen
Gilbok Lee [Fri, 30 Jul 2021 00:18:59 +0000 (00:18 +0000)]
Merge "subparse: Remove gst_event_unref when not support byte seek" into tizen

2 years agosubparse: Remove gst_event_unref when not support byte seek
Gilbok Lee [Thu, 29 Jul 2021 23:45:57 +0000 (08:45 +0900)]
subparse: Remove gst_event_unref when not support byte seek

Change-Id: I5b1ab17ef331a4a712d02cbb6969dd5bbc09cd0e

2 years agoexamples: win32-videooverlay: Add test option for threading scenario
Seungha Yang [Thu, 3 Jun 2021 10:15:22 +0000 (19:15 +0900)]
examples: win32-videooverlay: Add test option for threading scenario

Add an option to test the case where window thread and pipeline handling
thread are different. Mainly to test the HWND leak fixed by
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2302

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

2 years agortpbasedepayload: remove object locking an extension
Matthew Waters [Tue, 27 Jul 2021 07:44:02 +0000 (17:44 +1000)]
rtpbasedepayload: remove object locking an extension

Doing that is fraught with danger of deadlocks and is not conceptually
part of the API contract.  The object lock is generally intended for
internal-object-use only.

If another lock is needed, that should be added separately.

This lock was erronously added as part of:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1118

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

2 years agogldownload: use the GstGLSyncMeta in all cases
Matthew Waters [Tue, 27 Jul 2021 03:30:56 +0000 (13:30 +1000)]
gldownload: use the GstGLSyncMeta in all cases

fixes qmlglsrc ! gldownload ! videoconvert in some cases.

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

2 years agoglcontext: egl: Stop comparing native surface pointer
Nicolas Dufresne [Thu, 22 Jul 2021 21:11:26 +0000 (17:11 -0400)]
glcontext: egl: Stop comparing native surface pointer

This was noticed with wayland, sometimes the newly create native
handle can have the same pointer (even though its new). This lead
to unwanted errors or crash.

Fixes #927

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

2 years agoglwindow: Add "window-handle-changed" signal
Nicolas Dufresne [Thu, 22 Jul 2021 21:02:51 +0000 (17:02 -0400)]
glwindow: Add "window-handle-changed" signal

This allow other objects to clear any wrapper object that depends
on the previous handle, and properly re-create the new wrappers without
having to resort into doing pointer comparison.

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

2 years agoRevert "glwindow: wayland: Skip redoing surfaces if window haven't changed"
Nicolas Dufresne [Fri, 23 Jul 2021 17:39:34 +0000 (13:39 -0400)]
Revert "glwindow: wayland: Skip redoing surfaces if window haven't changed"

This reverts commit aba6bd7822f4c0f572765bfaada76f454a594317.

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

2 years agoappsrc: serialize custom events with buffers flow
Guillaume Desmottes [Mon, 22 Feb 2021 12:17:18 +0000 (13:17 +0100)]
appsrc: serialize custom events with buffers flow

Application may want to inject events to the pipeline and keep them
synchronized with the buffers flow.

Fix #247

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

2 years agoappsink: add API to catch events
Guillaume Desmottes [Fri, 19 Feb 2021 12:32:48 +0000 (13:32 +0100)]
appsink: add API to catch events

There is currently no way for users to receive incoming events from
appsink while keeping them properly serialized with the buffers flow.
This can be especially useful when application is injecting custom
downstream events into the pipeline and needs to know when they reached
appsink.

Solving this by adding a new signal notifying about new incoming events
and a set of action signals and method to pull those events.
The API is actually pulling the samples and events all together as they
are actually fetched from the same queue.
Having a specific API to pull only events would have the side effect of
discarding samples (and pulling samples would discard events) making
this API not convenient for users.

Partially fix #247

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

2 years agoappsink: factor out dequeue_object()
Guillaume Desmottes [Fri, 19 Feb 2021 13:45:08 +0000 (14:45 +0100)]
appsink: factor out dequeue_object()

No semantic change, will be used to implement new event API.

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

2 years agoglwindow: wayland: Skip redoing surfaces if window haven't changed
Nicolas Dufresne [Tue, 20 Jul 2021 13:37:58 +0000 (09:37 -0400)]
glwindow: wayland: Skip redoing surfaces if window haven't changed

The problem is that EGLNativeWindowSurface and wl_egl_surface are the
same object underneath, so we must recreate both together. As an
optimization, the EGLNativeWindowSurface wrapper is only re-created
if the window_handle changed.

On Mesa, this would cause crash, which will be fixed by:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11979

And will lead to proper errors in the future or on other GL stack. This
issue was encounter using a permanent GstGLDisplay after cycling one of
multiple independent pipelines through NULL state.

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

2 years agoglwindow: wayland: Remove redundant create_surfaces call
Nicolas Dufresne [Tue, 20 Jul 2021 13:36:22 +0000 (09:36 -0400)]
glwindow: wayland: Remove redundant create_surfaces call

The surfaces will be created in _roundtrip_async, so no need to call
this early. This should cause no functional difference.

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

2 years agoGstVideoOverlay: Add gst_video_overlay_set_wl_window_exported_shell_handle
Hyunil [Wed, 21 Jul 2021 06:37:25 +0000 (15:37 +0900)]
GstVideoOverlay: Add gst_video_overlay_set_wl_window_exported_shell_handle

- new interface for a shell handle exported by wayland window for synchronization between UI and video

[Version] 1.16.2-16
[Issue Type] New feature

Change-Id: I04d6244062892712c34278343eb9926c25483c07
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
2 years agodecodebin3: improve decoder selection
Michael Olbrich [Fri, 11 Jun 2021 07:02:29 +0000 (09:02 +0200)]
decodebin3: improve decoder selection

Currently the decoder selection is very naive: The type with the highest
rank that matches the current caps is used. This works well for software
decoders. The exact supported caps are always known and the static caps are
defined accordingly.
With hardware decoders, e.g. vaapi, the situation is different. The decoder
may reject the caps later during a caps query. At that point, a new decoder
is created. However, the same type is chosen an after several tries,
decodebin fails.

To avoid this, do the caps query while adding the decoder and try again
with other decoder types if the query fails:

1. create the decoder from the next matching type
2. add and link the decoder
3. change the decoder state to READY
4. do the caps query
   if it fails then remove the decoder again and go back to 1.
5. expose the source pad
6. sync the decoder state with the parent.

This way, the decoder is already part of the pipeline when the state change
to READY happens. So context handling should work as before.

Exposing the source pad after the query was successful is important:
Otherwise the thread from the decoder source pad may block in a blocked pad
downstream in the playsink waiting for other pads to be ready.
The thread now blocks trying to set the state back to NULL while holding
the SELECTION_LOCK. Other streams may block on the SELECTION_LOCK and the
playsink never unblocks the pad. The result is a deadlock.

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

2 years agosubparse: lower text buffer threshold
Hosang Lee [Wed, 17 Jun 2020 00:03:51 +0000 (09:03 +0900)]
subparse: lower text buffer threshold

It is possible for subtitle files to have a string length less than 30.
WebVTT for example may contain only the 'WEBVTT' string in the file
without any cues.
As an example in hls streams, since WEBVTT files can be segmented
like video/audio, some subtitle segments may only contain just the
header string.

Change-Id: I42dd0497852550d7cd6dd21a485856f06af55d71
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/708>

2 years agosubparse: convert from pango-markup to utf8 ..
Mathieu Duponchelle [Fri, 20 Mar 2020 18:09:17 +0000 (19:09 +0100)]
subparse: convert from pango-markup to utf8 ..

when downstream requires it

Change-Id: I855f284401d8f5abbc4a1b1351f541c9883c92e4

2 years agosubparse: accept WebVTT timestamps without an hour component
Mathieu Duponchelle [Wed, 11 Mar 2020 00:01:34 +0000 (01:01 +0100)]
subparse: accept WebVTT timestamps without an hour component

https://www.w3.org/TR/webvtt1/#webvtt-timestamp

Change-Id: I5e87fdcda7f150c12fc08857ce04c378001321bd
mm:ss,000 is a valid WebVTT timestamp

2 years agogl: x11: Issue XSync to close our top level window
Nicolas Dufresne [Wed, 14 Jul 2021 20:09:41 +0000 (16:09 -0400)]
gl: x11: Issue XSync to close our top level window

This is similar action as when the window handle is modified, we now issue
XSync whenever we destroy our internal window. This ensure that the window is
properly closed before the connecgtion is dropped.

Fixes #815

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

2 years agogl: wayland: Fix hinding the window on close()
Nicolas Dufresne [Wed, 14 Jul 2021 15:43:10 +0000 (11:43 -0400)]
gl: wayland: Fix hinding the window on close()

When the window is called, we properly destroy all surfaces, which effectively
will unmap that surface and should make it disapear on screen, but we also
destroy the wl_source, a GSource that is resposibble of dispatching and executing
messages to/from the Wayland server.

As a side effect, the server never gets the message and the surfaces are
"leaked" on the server. We fix this using wl_display_flush() before destroying
the wl_source.

Fixes #815

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

2 years agotests: example: Add missing glx_dep when building sdlshare
Nicolas Dufresne [Thu, 15 Jul 2021 15:09:35 +0000 (11:09 -0400)]
tests: example: Add missing glx_dep when building sdlshare

Might be realted to some recent Mesa cleanup, but GLX is not longer visible
through libOpenGL, so add the missing deps now.

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

2 years agoexamples/qt/textureshare: add explicit dep on glx_dep
Matthew Waters [Mon, 17 May 2021 02:04:50 +0000 (12:04 +1000)]
examples/qt/textureshare: add explicit dep on glx_dep

Fixes linking:

/usr/bin/ld: subprojects/gst-plugins-base/tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.p/qglrenderer.cpp.o: undefined reference to symbol 'glXGetCurrentContext'
/usr/bin/ld: /usr/lib64/libGLX.so.0: error adding symbols: DSO missing from command line

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

2 years agogl: Try GLVND 'opengl' and 'glx' first
Haelwenn (lanodan) Monnier [Fri, 14 May 2021 12:10:55 +0000 (14:10 +0200)]
gl: Try GLVND 'opengl' and 'glx' first

This fixes targetting desktop OpenGL without libGL.so

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

2 years agoaudioaggregator: Only post QoS messages if the property is enabled
Sebastian Dröge [Mon, 12 Jul 2021 06:37:24 +0000 (09:37 +0300)]
audioaggregator: Only post QoS messages if the property is enabled

Previously one of the branches did not check for the property value. To
avoid this in the future, check inside the QoS calculation function
instead.

As a side effect this now always prints the debug messages into the logs
when samples are dropped, which is useful information even without the
QoS messages.

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

2 years agoaudioaggregator: Resync on the next buffer when dropping a buffer on discont resyncing
Sebastian Dröge [Fri, 9 Jul 2021 06:49:15 +0000 (09:49 +0300)]
audioaggregator: Resync on the next buffer when dropping a buffer on discont resyncing

If a buffer is dropped during resyncing on a discont because either its
end offset is already before the current output offset of the
aggregator or because it fully overlaps with the part of the current
output buffer that was already filled, then don't just assume that the
next buffer is going to start at exactly the expected offset. It might
still require some more dropping of samples.

This caused the input to be mixed with an offset to its actual position
in the output stream, causing additional latency and wrong
synchronization between the different input streams.

Instead consider each buffer after a discont as a discont until the
aggregator actually resynced and starts mixing samples from the input
again.

Also update the start output offset of a new input buffer if samples
have to be dropped at the beginning. Otherwise it might be mixed too
early into the output and overwrite part of the output buffer that
already took samples from this input into account.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/912
which is a regression introduced by https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1180/

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

2 years agoaudiomixer: Add test for QoS message posting
Olivier Crête [Wed, 26 May 2021 22:20:02 +0000 (18:20 -0400)]
audiomixer: Add test for QoS message posting

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

2 years agoaudio aggregator: Post QoS message when dropping audio
Olivier Crête [Wed, 26 May 2021 14:38:18 +0000 (10:38 -0400)]
audio aggregator: Post QoS message when dropping audio

Post a QoS message every time some audio samples are dropped.
Also print log messages to make it easier to debug

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

2 years agoaudio aggregator: Count samples that are dropped or processed
Olivier Crête [Tue, 25 May 2021 22:05:05 +0000 (18:05 -0400)]
audio aggregator: Count samples that are dropped or processed

Keep a count of samples that are dropped or processed as statistics

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

2 years agoaudio aggregator: Add QoS property to pad
Olivier Crête [Fri, 21 May 2021 20:16:50 +0000 (16:16 -0400)]
audio aggregator: Add QoS property to pad

Add a property to emit a QoS message whenever any data is dropped.

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

2 years agoaudio aggregator: Rename property enum to match class name
Olivier Crête [Fri, 21 May 2021 20:10:06 +0000 (16:10 -0400)]
audio aggregator: Rename property enum to match class name

Add "CONVERT" into the property enum as we're going to add an
enum specifically for the base pad.

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

2 years agovideodecoder: add API to receive subframes
Stéphane Cerveau [Tue, 24 Sep 2019 15:14:10 +0000 (17:14 +0200)]
videodecoder: add API to receive subframes

A video decoder can now receive subframes and start decoding
instead of waiting for the full frame to be complete.
Subframe support will reduce latency as described in the
video encoder base class.

A unit test illustrating this API is available in
tests/check/libs/videodecoder.c.

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

2 years agogl/context/wgl: Add missing NULL init
Seungha Yang [Sat, 3 Jul 2021 10:36:06 +0000 (19:36 +0900)]
gl/context/wgl: Add missing NULL init

The value of uninitialized local variable is varying depending
on compiler and not guaranteed to be NULL initialized.
That results in pointing random address instead of expected function pointer.

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

2 years agovideotestsrc: Add SMPTE75 RP-219 color bars conformant
Francisco Javier Velázquez-García [Fri, 12 Mar 2021 12:55:38 +0000 (13:55 +0100)]
videotestsrc: Add SMPTE75 RP-219 color bars conformant

Implement 8-bit values of SMPTE RP 2019-1:2014.  The bar widths and
heights are the result of fractions as integers.  The remainders of
widths are distributed in a way that they match the values in Table
C.1 (a) in the specification.

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

2 years agovideotestsrc: Add a start parameter to _blend_line
Jan Alexander Steffens (heftig) [Fri, 12 Mar 2021 19:58:40 +0000 (20:58 +0100)]
videotestsrc: Add a start parameter to _blend_line

Makes it easier to paint part of a line.

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

2 years agovideotestsrc: Keep tmpline unchanged in_convert_tmpline
Jan Alexander Steffens (heftig) [Fri, 12 Mar 2021 19:57:13 +0000 (20:57 +0100)]
videotestsrc: Keep tmpline unchanged in_convert_tmpline

This will allow us to repeatedly
call it to render subsequent lines.

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

2 years agosubparse: Send timestamp map custom event for HLS webvtt
Gilbok Lee [Thu, 24 Jun 2021 23:41:16 +0000 (08:41 +0900)]
subparse: Send timestamp map custom event for HLS webvtt

Change-Id: I19efb35add97820252d4a0cb8bab60f9d58e5002

2 years agoappsink: fix incorrect return nullability
Michael de Gans [Tue, 15 Jun 2021 20:22:55 +0000 (13:22 -0700)]
appsink: fix incorrect return nullability

This commit fixes the annoations for return nullability on several
GstAppSink functions. This was causing bindings to be generated
incorrectly.

Fixes #914

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

2 years agocompositor: Add scaling policy to support PAR-aware scaling
Seungha Yang [Wed, 19 May 2021 07:22:46 +0000 (16:22 +0900)]
compositor: Add scaling policy to support PAR-aware scaling

Adding "sizing-policy" property for user to be able to specify
scaling policy (aspect-ratio for example).
At the moment, supported mode is only keep-aspect-ratio, but we might
be able to add more policies such as cropping, etc.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/696
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1156>

2 years agovideo: Deprecate gst_video_sink_center_rect()
Seungha Yang [Wed, 19 May 2021 11:11:15 +0000 (20:11 +0900)]
video: Deprecate gst_video_sink_center_rect()

... and add gst_video_center_rect() method as a replacement.
The method is useful for outside of videosink subclasses as well
but the old naming might be able to mislead people.

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

2 years agortpbasepayload: don't write empty extension header
Jakub Adam [Mon, 24 May 2021 17:11:51 +0000 (19:11 +0200)]
rtpbasepayload: don't write empty extension header

When some header extensions are present but none decides to write any
data to the currently processed RTP buffer, remove the extension data
section.

Resulting RTP buffer wasn't formatted correctly.

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

2 years agortpbuffer: Add gst_rtp_buffer_remove_extension_data()
Jakub Adam [Mon, 24 May 2021 17:02:42 +0000 (19:02 +0200)]
rtpbuffer: Add gst_rtp_buffer_remove_extension_data()

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

2 years agortpbasepayload: map RTP buffer READWRITE when setting headers
Jakub Adam [Mon, 24 May 2021 17:01:24 +0000 (19:01 +0200)]
rtpbasepayload: map RTP buffer READWRITE when setting headers

GstRTPHeaderExtension::write can map the RTP buffer for reading. If that
happens on a buffer that is already mapped WRITE-only by the payloader,
the payloader's mapping gets invalidated (GstRTPBuffer::map will point
to a different instance of GstMemory).

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

2 years agortphdrext: Make all fields private
Olivier Crête [Thu, 24 Jun 2021 18:56:11 +0000 (14:56 -0400)]
rtphdrext: Make all fields private

The presence of a method and a field with the same name confuses the C#
binding generator. As there are accessor functions for all the fields,
let's just make them private.

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

2 years agogst: don't use volatile to mean atomic
Olivier Crête [Sat, 26 Jun 2021 16:50:58 +0000 (12:50 -0400)]
gst: don't use volatile to mean atomic

volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead.  GCC 11 has started warning about using volatile
with atomic operations.

https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

Discovered in gst-plugins-good#868

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

2 years agovideo-converter: Set up matrix tables only once.
Jan Schmidt [Fri, 25 Jun 2021 13:42:34 +0000 (23:42 +1000)]
video-converter: Set up matrix tables only once.

When configuring a multi-thread converter, only allocate the
shared colour conversion matrices once for the first thread,
to avoid allocating multiple times and leaking memory.

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

2 years agovideo-converter: Set up gamma tables only once
Jan Alexander Steffens (heftig) [Thu, 6 May 2021 17:01:41 +0000 (19:01 +0200)]
video-converter: Set up gamma tables only once

When the video converter is using multiple threads, the gamma tables
were created multiple times, leaking the tables set up for the previous
thread.

Only calculate the tables once.

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

2 years agoaudio-converter: Free config when gst_audio_converter_new fails
Jan Alexander Steffens (heftig) [Thu, 6 May 2021 16:22:45 +0000 (18:22 +0200)]
audio-converter: Free config when gst_audio_converter_new fails

The config got leaked when parameter validation fails.

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

2 years agoglprototypes: Add GST_GL_API_OPENGL to available version of sync
Seungha Yang [Fri, 25 Jun 2021 06:24:21 +0000 (15:24 +0900)]
glprototypes: Add GST_GL_API_OPENGL to available version of sync

Make sync APIs usable if supported, even when GST_GL_API_OPENGL3 is
not selected

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

2 years agogstrtspconnection: Add IPv6 support for tunneled mode
Per Förlin [Fri, 23 Apr 2021 16:03:20 +0000 (18:03 +0200)]
gstrtspconnection: Add IPv6 support for tunneled mode

An IPv6 address must be specified within [] brackets.
Add brackets for IPv6 address used for tunneled mode,
for non-tunneled this is already supported.

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

2 years agovideodecoder: Call drain() rather then finish() on segment-done
Nicolas Dufresne [Wed, 16 Jun 2021 18:49:14 +0000 (14:49 -0400)]
videodecoder: Call drain() rather then finish() on segment-done

The finish() virtual function documentation state that "Sub-classes can refuse
to decode new data after." Though, it is very common to issue a non-flushing
seek after that event in gapless playback uses case. This fixes potential
stalls with code using segment seeks, by using drain() virtual funciton
instead.

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

2 years agooggdemux: fix a race in push mode when performing the duration seek
Matthew Waters [Tue, 8 Jun 2021 04:55:36 +0000 (14:55 +1000)]
oggdemux: fix a race in push mode when performing the duration seek

There may be two or more threads involved here however the important
interaction is the use of ogg->seeK_event_drop_till value that was only
set in the push-mode seek-event thread and could race with upstream
sending e.g. and EOS (or data).

Scenario is this:
1. oggdemux performs a seek to near the end of the file to try and find
   the duration. ogg->push_state is set to PUSH_DURATION.
2. Seek is picked up by the dedicated seek event thread and sets
   ogg->seek_event_drop_till to the seek event's seqnum.
3. Most operations are blocked or dropped waiting on the duration to
   be determined and processing continues until a duration is found.
4. Two branching options for how this ultimately plays out
4a. The source is too fast and we receive an EOS event which is dropped
    because ogg->push_state == PUSH_DURATION.  In this case everything
    works.
4b. We hit our 'almost at the end' check in
    gst_ogg_pad_handle_push_mode_state() and attempt to seek back to the
    beginning (or to a user-provided seek).  This seek is marshalled to
    the seek event thread without setting ogg->seek_event_drop_till but
    with change ogg->push_state = PUSH_PLAYING.  If an EOS event or
    e.g. buffers arrive from upstream before the seek event thread has
    picked up the seek event, then the EOS/data is processed as if it
    came as a result of the seek event.  This is the case that fails.

The fix is two-fold:
1. Preemptively set ogg->seek_event_drop_till when setting the seek
   event so that data and other events can be dropped correctly.
2. In addition to dropping and EOS events while ogg->push_state ==
   PUSH_DURATION, also drop any EOS events that are received before the
   seek event has been processed by also tracking the seqnum of the seek.

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

2 years agoaudiobasesink: Fix of double lock release
Sergei Kovalev [Mon, 21 Jun 2021 14:06:14 +0000 (14:06 +0000)]
audiobasesink: Fix of double lock release

Add missing "return;" which prevents double lock release.

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