Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gstreamer-plugins-base for openSUSE:Factory checked in at 2022-03-31 17:18:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-plugins-base (Old) and /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-plugins-base" Thu Mar 31 17:18:22 2022 rev:84 rq:965360 version:1.20.1 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-plugins-base/gstreamer-plugins-base.changes 2022-03-24 22:57:10.384202356 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer-plugins-base.new.1900/gstreamer-plugins-base.changes 2022-03-31 17:18:37.309317336 +0200 @@ -1,0 +2,7 @@ +Sat Mar 26 17:25:23 UTC 2022 - Bj??rn Lie <bjorn....@gmail.com> + +- Add 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch: playsink: + Complete reconfiguration on pad release. +- Use ldconfig_scriptlets macro for post(un) handling. + +------------------------------------------------------------------- New: ---- 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-plugins-base.spec ++++++ --- /var/tmp/diff_new_pack.VI1lAY/_old 2022-03-31 17:18:37.825311515 +0200 +++ /var/tmp/diff_new_pack.VI1lAY/_new 2022-03-31 17:18:37.833311424 +0200 @@ -30,10 +30,10 @@ Source1: gstreamer-plugins-base.appdata.xml Source2: baselibs.conf -# PATCH-FIX-OPENSUSE gstreamer-plugins-base-gl-deps.patch dims...@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 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 @@ -491,7 +491,10 @@ %lang_package %prep -%autosetup -n %{_name}-%{version} -p1 +%autosetup -n %{_name}-%{version} -N +%patch4 -p1 +%patch5 -p1 +%patch6 -p3 %build export PYTHON=%{_bindir}/python3 @@ -520,30 +523,18 @@ find %{buildroot} -type f -name "*.la" -delete -print %find_lang %{_name}-%{gst_branch} -%post -n libgstallocators-1_0-0 -p /sbin/ldconfig -%postun -n libgstallocators-1_0-0 -p /sbin/ldconfig -%post -n libgstapp-1_0-0 -p /sbin/ldconfig -%postun -n libgstapp-1_0-0 -p /sbin/ldconfig -%post -n libgstaudio-1_0-0 -p /sbin/ldconfig -%postun -n libgstaudio-1_0-0 -p /sbin/ldconfig -%post -n libgstfft-1_0-0 -p /sbin/ldconfig -%postun -n libgstfft-1_0-0 -p /sbin/ldconfig -%post -n libgstgl-1_0-0 -p /sbin/ldconfig -%postun -n libgstgl-1_0-0 -p /sbin/ldconfig -%post -n libgstpbutils-1_0-0 -p /sbin/ldconfig -%postun -n libgstpbutils-1_0-0 -p /sbin/ldconfig -%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 +%ldconfig_scriptlets -n libgstallocators-1_0-0 +%ldconfig_scriptlets -n libgstapp-1_0-0 +%ldconfig_scriptlets -n libgstaudio-1_0-0 +%ldconfig_scriptlets -n libgstfft-1_0-0 +%ldconfig_scriptlets -n libgstgl-1_0-0 +%ldconfig_scriptlets -n libgstpbutils-1_0-0 +%ldconfig_scriptlets -n libgstriff-1_0-0 +%ldconfig_scriptlets -n libgstrtp-1_0-0 +%ldconfig_scriptlets -n libgstrtsp-1_0-0 +%ldconfig_scriptlets -n libgstsdp-1_0-0 +%ldconfig_scriptlets -n libgsttag-1_0-0 +%ldconfig_scriptlets -n libgstvideo-1_0-0 %files %license COPYING ++++++ 5a074a11f90e3d70b24bf0c535ab0480fad9e701.patch ++++++ >From 5a074a11f90e3d70b24bf0c535ab0480fad9e701 Mon Sep 17 00:00:00 2001 From: Jan Schmidt <j...@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