forked from pool/gstreamer-plugins-base
Accepting request 965360 from multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/965360 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gstreamer-plugins-base?expand=0&rev=84
This commit is contained in:
commit
8a111e3964
177
5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch
Normal file
177
5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
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 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Mar 26 17:25:23 UTC 2022 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||||
|
|
||||||
|
- Add 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch: playsink:
|
||||||
|
Complete reconfiguration on pad release.
|
||||||
|
- Use ldconfig_scriptlets macro for post(un) handling.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 18 07:30:44 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
Fri Mar 18 07:30:44 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ Source0: %{url}/src/%{_name}/%{_name}-%{version}.tar.xz
|
|||||||
Source1: gstreamer-plugins-base.appdata.xml
|
Source1: gstreamer-plugins-base.appdata.xml
|
||||||
Source2: baselibs.conf
|
Source2: baselibs.conf
|
||||||
|
|
||||||
# PATCH-FIX-OPENSUSE gstreamer-plugins-base-gl-deps.patch dimstar@opensuse.org -- Local workaround for https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/735
|
|
||||||
#Patch3: gstreamer-plugins-base-gl-deps.patch
|
|
||||||
Patch4: add_wayland_dep_to_tests.patch
|
Patch4: add_wayland_dep_to_tests.patch
|
||||||
Patch5: MR-221-video-anc-add-two-new-CEA-608-caption-formats.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: Mesa-libGLESv3-devel
|
||||||
BuildRequires: cdparanoia-devel
|
BuildRequires: cdparanoia-devel
|
||||||
@ -491,7 +491,10 @@ to compile and link applications that use gstreamer-plugins-base.
|
|||||||
%lang_package
|
%lang_package
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n %{_name}-%{version} -p1
|
%autosetup -n %{_name}-%{version} -N
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p3
|
||||||
|
|
||||||
%build
|
%build
|
||||||
export PYTHON=%{_bindir}/python3
|
export PYTHON=%{_bindir}/python3
|
||||||
@ -520,30 +523,18 @@ fi
|
|||||||
find %{buildroot} -type f -name "*.la" -delete -print
|
find %{buildroot} -type f -name "*.la" -delete -print
|
||||||
%find_lang %{_name}-%{gst_branch}
|
%find_lang %{_name}-%{gst_branch}
|
||||||
|
|
||||||
%post -n libgstallocators-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstallocators-1_0-0
|
||||||
%postun -n libgstallocators-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstapp-1_0-0
|
||||||
%post -n libgstapp-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstaudio-1_0-0
|
||||||
%postun -n libgstapp-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstfft-1_0-0
|
||||||
%post -n libgstaudio-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstgl-1_0-0
|
||||||
%postun -n libgstaudio-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstpbutils-1_0-0
|
||||||
%post -n libgstfft-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstriff-1_0-0
|
||||||
%postun -n libgstfft-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstrtp-1_0-0
|
||||||
%post -n libgstgl-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstrtsp-1_0-0
|
||||||
%postun -n libgstgl-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstsdp-1_0-0
|
||||||
%post -n libgstpbutils-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgsttag-1_0-0
|
||||||
%postun -n libgstpbutils-1_0-0 -p /sbin/ldconfig
|
%ldconfig_scriptlets -n libgstvideo-1_0-0
|
||||||
%post -n libgstriff-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgstriff-1_0-0 -p /sbin/ldconfig
|
|
||||||
%post -n libgstrtp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgstrtp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%post -n libgstrtsp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgstrtsp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%post -n libgstsdp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgstsdp-1_0-0 -p /sbin/ldconfig
|
|
||||||
%post -n libgsttag-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgsttag-1_0-0 -p /sbin/ldconfig
|
|
||||||
%post -n libgstvideo-1_0-0 -p /sbin/ldconfig
|
|
||||||
%postun -n libgstvideo-1_0-0 -p /sbin/ldconfig
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%license COPYING
|
%license COPYING
|
||||||
|
Loading…
x
Reference in New Issue
Block a user