Accepting request 976625 from multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/976625 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gstreamer-plugins-base?expand=0&rev=85
This commit is contained in:
commit
e7af6ba784
@ -1,177 +0,0 @@
|
||||
From 5a074a11f90e3d70b24bf0c535ab0480fad9e701 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Schmidt <jan@centricular.com>
|
||||
Date: Fri, 6 Aug 2021 19:27:02 +1000
|
||||
Subject: [PATCH] playsink: Complete reconfiguration on pad release.
|
||||
|
||||
Requesting a new pad can start a reconfiguration cycle, where
|
||||
playsink will block all input pads and wait for data on them
|
||||
before doing internal reconfiguration. If a pad is released,
|
||||
that reconfiguration might never trigger because it's now waiting
|
||||
for a pad that doesn't exist any more.
|
||||
|
||||
In that case, complete the reconfiguration on pad release.
|
||||
|
||||
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1940>
|
||||
---
|
||||
.../gst/playback/gstplaysink.c | 89 ++++++++++++++-----
|
||||
1 file changed, 66 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/subprojects/gst-plugins-base/gst/playback/gstplaysink.c b/subprojects/gst-plugins-base/gst/playback/gstplaysink.c
|
||||
index 095a0bbcf31..ebef70d977e 100644
|
||||
--- a/subprojects/gst-plugins-base/gst/playback/gstplaysink.c
|
||||
+++ b/subprojects/gst-plugins-base/gst/playback/gstplaysink.c
|
||||
@@ -194,6 +194,7 @@ struct _GstPlaySink
|
||||
|
||||
gboolean async_pending;
|
||||
gboolean need_async_start;
|
||||
+ gboolean reconfigure_pending;
|
||||
|
||||
GstPlayFlags flags;
|
||||
|
||||
@@ -412,6 +413,8 @@ static void gst_play_sink_navigation_init (gpointer g_iface,
|
||||
static void gst_play_sink_colorbalance_init (gpointer g_iface,
|
||||
gpointer g_iface_data);
|
||||
|
||||
+static gboolean is_raw_pad (GstPad * pad);
|
||||
+
|
||||
static void
|
||||
_do_init_type (GType type)
|
||||
{
|
||||
@@ -3231,6 +3234,19 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink)
|
||||
need_text = TRUE;
|
||||
}
|
||||
|
||||
+ if (playsink->video_pad) {
|
||||
+ playsink->video_pad_raw = is_raw_pad (playsink->video_pad);
|
||||
+ GST_DEBUG_OBJECT (playsink, "Video pad is raw: %d",
|
||||
+ playsink->video_pad_raw);
|
||||
+ }
|
||||
+
|
||||
+ if (playsink->audio_pad) {
|
||||
+ playsink->audio_pad_raw = is_raw_pad (playsink->audio_pad);
|
||||
+ GST_DEBUG_OBJECT (playsink, "Audio pad is raw: %d",
|
||||
+ playsink->audio_pad_raw);
|
||||
+ }
|
||||
+
|
||||
+
|
||||
if (((flags & GST_PLAY_FLAG_VIDEO)
|
||||
|| (flags & GST_PLAY_FLAG_NATIVE_VIDEO)) && playsink->video_pad) {
|
||||
/* we have video and we are requested to show it */
|
||||
@@ -3881,6 +3897,9 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink)
|
||||
update_av_offset (playsink);
|
||||
update_text_offset (playsink);
|
||||
do_async_done (playsink);
|
||||
+
|
||||
+ playsink->reconfigure_pending = FALSE;
|
||||
+
|
||||
GST_PLAY_SINK_UNLOCK (playsink);
|
||||
|
||||
return TRUE;
|
||||
@@ -4333,11 +4352,39 @@ gst_play_sink_reconfigure (GstPlaySink * playsink)
|
||||
video_set_blocked (playsink, TRUE);
|
||||
audio_set_blocked (playsink, TRUE);
|
||||
text_set_blocked (playsink, TRUE);
|
||||
+ playsink->reconfigure_pending = TRUE;
|
||||
GST_PLAY_SINK_UNLOCK (playsink);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+/* Called with PLAY_SINK_LOCK */
|
||||
+static gboolean
|
||||
+gst_play_sink_ready_to_reconfigure_locked (GstPlaySink * playsink)
|
||||
+{
|
||||
+ /* We reconfigure when for ALL streams:
|
||||
+ * * there isn't a pad
|
||||
+ * * OR the pad is blocked
|
||||
+ * * OR there are no pending blocks on that pad
|
||||
+ */
|
||||
+ if (playsink->reconfigure_pending == FALSE)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (playsink->video_pad && !playsink->video_pad_blocked
|
||||
+ && PENDING_VIDEO_BLOCK (playsink))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (playsink->audio_pad && !playsink->audio_pad_blocked
|
||||
+ && PENDING_AUDIO_BLOCK (playsink))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (playsink->text_pad && !playsink->text_pad_blocked
|
||||
+ && PENDING_TEXT_BLOCK (playsink))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
static GstPadProbeReturn
|
||||
sinkpad_blocked_cb (GstPad * blockedpad, GstPadProbeInfo * info,
|
||||
gpointer user_data)
|
||||
@@ -4365,31 +4412,9 @@ sinkpad_blocked_cb (GstPad * blockedpad, GstPadProbeInfo * info,
|
||||
GST_DEBUG_OBJECT (pad, "Text pad blocked");
|
||||
}
|
||||
|
||||
- /* We reconfigure when for ALL streams:
|
||||
- * * there isn't a pad
|
||||
- * * OR the pad is blocked
|
||||
- * * OR there are no pending blocks on that pad
|
||||
- */
|
||||
-
|
||||
- if ((!playsink->video_pad || playsink->video_pad_blocked
|
||||
- || !PENDING_VIDEO_BLOCK (playsink)) && (!playsink->audio_pad
|
||||
- || playsink->audio_pad_blocked || !PENDING_AUDIO_BLOCK (playsink))
|
||||
- && (!playsink->text_pad || playsink->text_pad_blocked
|
||||
- || !PENDING_TEXT_BLOCK (playsink))) {
|
||||
+ if (gst_play_sink_ready_to_reconfigure_locked (playsink)) {
|
||||
GST_DEBUG_OBJECT (playsink, "All pads blocked -- reconfiguring");
|
||||
|
||||
- if (playsink->video_pad) {
|
||||
- playsink->video_pad_raw = is_raw_pad (playsink->video_pad);
|
||||
- GST_DEBUG_OBJECT (playsink, "Video pad is raw: %d",
|
||||
- playsink->video_pad_raw);
|
||||
- }
|
||||
-
|
||||
- if (playsink->audio_pad) {
|
||||
- playsink->audio_pad_raw = is_raw_pad (playsink->audio_pad);
|
||||
- GST_DEBUG_OBJECT (playsink, "Audio pad is raw: %d",
|
||||
- playsink->audio_pad_raw);
|
||||
- }
|
||||
-
|
||||
gst_play_sink_do_reconfigure (playsink);
|
||||
|
||||
video_set_blocked (playsink, FALSE);
|
||||
@@ -4681,6 +4706,7 @@ gst_play_sink_release_pad (GstPlaySink * playsink, GstPad * pad)
|
||||
res = &pad;
|
||||
untarget = FALSE;
|
||||
}
|
||||
+
|
||||
GST_PLAY_SINK_UNLOCK (playsink);
|
||||
|
||||
if (*res) {
|
||||
@@ -4694,6 +4720,23 @@ gst_play_sink_release_pad (GstPlaySink * playsink, GstPad * pad)
|
||||
gst_element_remove_pad (GST_ELEMENT_CAST (playsink), *res);
|
||||
*res = NULL;
|
||||
}
|
||||
+
|
||||
+ GST_PLAY_SINK_LOCK (playsink);
|
||||
+
|
||||
+ /* If we have a pending reconfigure, we might have met the conditions
|
||||
+ * to reconfigure now */
|
||||
+ if (gst_play_sink_ready_to_reconfigure_locked (playsink)) {
|
||||
+ GST_DEBUG_OBJECT (playsink,
|
||||
+ "All pads ready after release -- reconfiguring");
|
||||
+
|
||||
+ gst_play_sink_do_reconfigure (playsink);
|
||||
+
|
||||
+ video_set_blocked (playsink, FALSE);
|
||||
+ audio_set_blocked (playsink, FALSE);
|
||||
+ text_set_blocked (playsink, FALSE);
|
||||
+ }
|
||||
+
|
||||
+ GST_PLAY_SINK_UNLOCK (playsink);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:96d8a6413ba9394fbec1217aeef63741a729d476a505a797c1d5337d8fa7c204
|
||||
size 3290068
|
3
gst-plugins-base-1.20.2.tar.xz
Normal file
3
gst-plugins-base-1.20.2.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ab0656f2ad4d38292a803e0cb4ca090943a9b43c8063f650b4d3e3606c317f17
|
||||
size 3295552
|
@ -1,3 +1,46 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon May 9 10:55:50 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Update to version 1.20.2:
|
||||
+ appsrc: Clarify buffer ref semantics in signals documentation
|
||||
+ appsrc: fix annotations for bindings
|
||||
+ typefind: Skip extension parsing for data:// URIs, fixing
|
||||
regression with mp4 files serialised to data uris
|
||||
+ playbin3: various fixes
|
||||
+ playbin3: fix missing lock when unknown stream type in
|
||||
pad-removed cb
|
||||
+ decodebin3: fix collection leaks
|
||||
+ decodebin3: Don't duplicate stream selections
|
||||
+ discoverer: chain up to parent finalize methods in all our
|
||||
types to fix memory leaks
|
||||
+ glmixerbin: slightly better pad/element creation
|
||||
+ gltransformation: let graphene alloc its structures memory
|
||||
aligned
|
||||
+ ogg: fix possible buffer overrun
|
||||
+ rtpbasepayload: Don't write header extensions if there's no
|
||||
corresponding...
|
||||
+ rtpbasepayload: always store input buffer meta before
|
||||
negotiation
|
||||
+ rtpbasepayload: fix transfer annotation for push and push_list
|
||||
+ subparse: don't try to index string with -1
|
||||
+ riff-media: fix memory leak after usage for g_strjoin()
|
||||
+ playbin/playbin3: Allow setting a NULL URI
|
||||
+ playsink: Complete reconfiguration on pad release.
|
||||
+ parsebin: Expose streams of unknown type
|
||||
+ pbutils: Fix wmv screen description detection
|
||||
+ subparse: don't deref a potentially NULL variable
|
||||
+ rawvideoparse: set format from caps in
|
||||
gst_raw_video_parse_set_config_from_caps
|
||||
+ videodecoder: release stream lock after handling gap events
|
||||
+ videorate: fix assertion when pushing last and only buffer
|
||||
without duration
|
||||
+ videorate: Revert "don't reset on segment update" to fix
|
||||
segment handling regressions
|
||||
+ gst-play-1.0, gst-launch-1.0: Enable win32 high-resolution
|
||||
timer also for MinGW build
|
||||
- Drop patch already included in 1.20.2:
|
||||
+ 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Mar 26 17:25:23 UTC 2022 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
%define gst_branch 1.0
|
||||
%define gstreamer_req_version %(echo %{version} | sed -e "s/+.*//")
|
||||
Name: gstreamer-plugins-base
|
||||
Version: 1.20.1
|
||||
Version: 1.20.2
|
||||
Release: 0
|
||||
Summary: GStreamer Streaming-Media Framework Plug-Ins
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later
|
||||
@ -32,8 +32,6 @@ Source2: baselibs.conf
|
||||
|
||||
Patch4: add_wayland_dep_to_tests.patch
|
||||
Patch5: MR-221-video-anc-add-two-new-CEA-608-caption-formats.patch
|
||||
# PATCH-FIX-UPSTREAM 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch -- playsink: Complete reconfiguration on pad release
|
||||
Patch6: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch
|
||||
|
||||
BuildRequires: Mesa-libGLESv3-devel
|
||||
BuildRequires: cdparanoia-devel
|
||||
@ -494,7 +492,6 @@ to compile and link applications that use gstreamer-plugins-base.
|
||||
%autosetup -n %{_name}-%{version} -N
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p3
|
||||
|
||||
%build
|
||||
export PYTHON=%{_bindir}/python3
|
||||
|
Loading…
x
Reference in New Issue
Block a user