summaryrefslogtreecommitdiff
path: root/media-video/wireplumber
diff options
context:
space:
mode:
Diffstat (limited to 'media-video/wireplumber')
-rw-r--r--media-video/wireplumber/Manifest2
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.11-loop.patch147
-rw-r--r--media-video/wireplumber/wireplumber-0.4.11-r3.ebuild131
3 files changed, 280 insertions, 0 deletions
diff --git a/media-video/wireplumber/Manifest b/media-video/wireplumber/Manifest
index 18f737431f36..923fa87a118b 100644
--- a/media-video/wireplumber/Manifest
+++ b/media-video/wireplumber/Manifest
@@ -6,9 +6,11 @@ AUX wireplumber-0.4.10-m-lua-scripting-allow-converting-GValue-holding-NUL.patch
AUX wireplumber-0.4.10-m-lua-scripting-fix-object-refcounting.patch 1200 BLAKE2B ee73f3555418dad6a5c20e401e6f77ec22673b7079d04babe517617771c3d3b29e69ec37a933b1993fc5cfaa0200ee0a70178b7383b4086d9a63765a0d986301 SHA512 fa9fb26868b96742c972574eb2e82e91f54a3a3fe3911136b0c4886ff6324fcf35683059801113a0cc409f9a79383155e7cac1f4b18e0566da724c1fd3679d3d
AUX wireplumber-0.4.11-alsa-lua-crash.patch 1256 BLAKE2B ae5787294e405e37f01d0d4ef3f6031e5df9f60b04f02a682ceeaf2311cd2d525cdbb913d4997d63d18513225bd35d5e6375e33f34931e412ef681df134fa514 SHA512 536e39e4863ca2e002b20f8fca6164a60e280f56d7c5c2c96f9684e75b6e8f7138884fca88a214b4830e2a9fb252ead3ba75dc7f6ad491716f3e2fc595ddefed
AUX wireplumber-0.4.11-dbus-reconnect-crash.patch 1553 BLAKE2B 1792743e726f22ff26f751196f620905122545bb8921dcb2398e627ef6756d786497e84cb899dcadac5417207cba7f1d5bc7f0a018156c89393712eafba5b54b SHA512 1603f928867f8ccf83132fb3b09b4d43995bd97a62689917274b01eb75526237ab86b1e58292e7f3b5b296e094995d284be31dfdd13d1c26ca5a41f2d121c71d
+AUX wireplumber-0.4.11-loop.patch 5638 BLAKE2B ebebd5a0c668f9ceb44cedecb9a7c364ed135e78802c619d3c1b328932480b11e2392b7263fb8df472ef1134a451537c82e25e0122bd61f80f33cbb36d538c43 SHA512 4486bb29a0f238b5d3df07bce065be30604fd3ef2d62925b3e3869060c0015d3bcdb45375bf5735e39d48e39e115c8f2029526d1044add8992fe2bc22f45faee
DIST wireplumber-0.4.10.tar.gz 395588 BLAKE2B 6df1af17d1e53ab1449a2f6f9af5a0c4f7b1cd981e07556e5ea3c6b4d5d624e66b97ce4f945f7ccccebbf72b75d35d10990fac11b5228275f27e5320885ff1ec SHA512 342e8bba2cf00faab71ef39bb361b5ada66ff3a68ccf7a756ea1ca402da6e94784eece277ca02992bc7573c51cb8b1bad33aa9c593b3d1bfe0bb0286e2f4506f
DIST wireplumber-0.4.11.tar.gz 403931 BLAKE2B 77ef2540081420d4255dcb54165d0aceb08d97c60d19b9eb7606e90cf95e305e690794a1f46234b53b13765452fea0d23ae6acae9deea672db67e21c31d2307d SHA512 73a5120cd0c55b5fe5248cc22497efd23e40bb91961553639d9cf1bbf138d273db65153fa3c1bb0d2794f869e077e011156d323832534f62651d66f8cc87dca4
EBUILD wireplumber-0.4.10-r4.ebuild 3933 BLAKE2B bccd391fc42848f7f57d5403ae481c554862f4bbc6b11b4f8fc55019044b3b9150ac3704370242a39992c65d88928f2f64d441a19cddd61721c82cd887b9e1ce SHA512 2c5c1977655178717c6ad1158b0af18267cafed7ace937e28dfc08d466efe227c6a4ad7f276a27ded906cf8439ecb0ae7579ebf64b90ccc4bf67fa8eeed08bca
EBUILD wireplumber-0.4.11-r2.ebuild 4112 BLAKE2B 2f94d975252cb165d86fe23531fa8ea94a54ba44033e506a6785aea9d7be959e5a0f3f1b7b6872566de62475ab3d2a982294c53f7808348166ae6b6db7e44c15 SHA512 8504018873d34dbeb65c3a1acbc2acf68c7074902875bc1dd4f2f1088933edba51551a293345a5aa4ce8b4443fed8405126a197db65d1948ac2839107b29a430
+EBUILD wireplumber-0.4.11-r3.ebuild 4149 BLAKE2B a6bfce3de96658c9aedb079227b484dfbc821def77c8a4fec160a24db4b6b912a4b39a560722d2ce9dc2a093042bb7cdfc1c3f039cb0be64479fad8881391044 SHA512 650eee9197662a5f7bdcbd93d58422fe48eca67a92dbf8e05b473a244750568a8504dd23755a6e8f472336c98a5e63327c52d6ff4bf9b85fde0f4ebea09a89e4
EBUILD wireplumber-9999.ebuild 3889 BLAKE2B d44e25f12dc2e6b0d8884b2a670b7fd3c7f1d42b67e6899cff3dd709d8b02d9c9497d4b95beca6f3973e76f54809b042ff6e66058c3de41f39332a022909083d SHA512 07ad0521fbd48382287d6d6f3b62906fa8a29fae84a5a0fb94cdcf8e87da01e6af0ba81f61c8675efb69c038a4fdf62fdde9b9e25b17d4a76b0148de32e457ae
MISC metadata.xml 647 BLAKE2B 0370f3c897d7fcab0bd95fe1f97208f911de022e533ac795817289c554cc75d4de686223cbfd255ecb6e930ff0aee6c9419327ab51b3c65b1c4d8ed7597a1f3e SHA512 9708a52cf340caf359c300116b6ec687fba08a3c0fe33895eb10cda08517583ad36b5ff539142d8ba5f625ad34e5b7228f55fc7b85e7a162cf775f8780899f0e
diff --git a/media-video/wireplumber/files/wireplumber-0.4.11-loop.patch b/media-video/wireplumber/files/wireplumber-0.4.11-loop.patch
new file mode 100644
index 000000000000..75e2bafcaddc
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.4.11-loop.patch
@@ -0,0 +1,147 @@
+https://bugs.gentoo.org/866551
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/37c839b9308cd3d6580bf01077db8cb29ec2aa2f
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/370b692933634675213110048fcda6dff52eb52b
+
+From: Pauli Virtanen <pav@iki.fi>
+Date: Tue, 19 Jul 2022 20:39:06 +0300
+Subject: [PATCH] policy-node: fix potential rescan loop
+
+SiLink activation might be delayed indefinitely under some error
+conditions. Currently, policy-node schedules a rescan when it sees a
+non-activated link on a stream to be moved, which produces busy loop if
+the si-link doesn't activate.
+
+Instead of rescheduling on non-active si-links, just remove and emit a
+warning. The si-link then gets removed once it gets activated.
+
+Reproducer:
+
+1. Play audio from Rhythmbox and pause.
+2. Switch default output with pactl between two different outputs
+3. Links from the paused stream stay at "init"
+--- a/src/scripts/policy-node.lua
++++ b/src/scripts/policy-node.lua
+@@ -694,16 +694,15 @@ function handleLinkable (si)
+ local link = lookupLink (si_id, si_flags[si_id].peer_id)
+ if reconnect then
+ if link ~= nil then
+- -- remove old link if active, otherwise schedule rescan
+- if ((link:get_active_features() & Feature.SessionItem.ACTIVE) ~= 0) then
+- si_flags[si_id].peer_id = nil
+- link:remove ()
+- Log.info (si, "... moving to new target")
+- else
+- scheduleRescan()
+- Log.info (si, "... scheduled rescan")
+- return
++ -- remove old link
++ if ((link:get_active_features() & Feature.SessionItem.ACTIVE) == 0) then
++ -- remove also not yet activated links: they might never become active,
++ -- and we should not loop waiting for them
++ Log.warning (link, "Link was not activated before removing")
+ end
++ si_flags[si_id].peer_id = nil
++ link:remove ()
++ Log.info (si, "... moving to new target")
+ end
+ else
+ if link ~= nil then
+GitLab
+
+From: Pauli Virtanen <pav@iki.fi>
+Date: Tue, 19 Jul 2022 20:01:10 +0300
+Subject: [PATCH] m-si-link: don't wait for establish before activation +
+ cleanup links
+
+SiLink should not wait for WpLinks becoming ESTABLISHED, before
+activation. That flag shows whether a link has moved away from the
+"init" state, however, links to e.g. Pulseaudio corked streams can stay
+in "init" state until uncorking. This causes trouble for policies,
+which needlessly wait for such links to establish.
+
+The WpLink objects may also be kept alive by other referents, and
+just unrefing them does not necessarily destroy the PW objects.
+
+Activate SiLink even if the WpLink is still in "init" state. It's enough
+that the link otherwise successfully establishes.
+
+At dispose time, explicitly request destroying the WpLinks that were
+created by the SiLink, to ensure they are removed even if there's
+something else referring to them.
+--- a/modules/module-si-standard-link.c
++++ b/modules/module-si-standard-link.c
+@@ -132,6 +132,27 @@ si_standard_link_get_associated_proxy (WpSessionItem * item, GType proxy_type)
+ return NULL;
+ }
+
++static void
++request_destroy_link (gpointer data, gpointer user_data)
++{
++ WpLink *link = WP_LINK (data);
++
++ wp_global_proxy_request_destroy (WP_GLOBAL_PROXY (link));
++}
++
++static void
++clear_node_links (GPtrArray **node_links_p)
++{
++ /*
++ * Something else (eg. object managers) may be keeping the WpLink
++ * objects alive. Deactive the links now, to destroy the PW objects.
++ */
++ if (*node_links_p)
++ g_ptr_array_foreach (*node_links_p, request_destroy_link, NULL);
++
++ g_clear_pointer (node_links_p, g_ptr_array_unref);
++}
++
+ static void
+ si_standard_link_disable_active (WpSessionItem *si)
+ {
+@@ -154,7 +175,8 @@ si_standard_link_disable_active (WpSessionItem *si)
+ WP_SI_LINKABLE (si_in));
+ }
+
+- g_clear_pointer (&self->node_links, g_ptr_array_unref);
++ clear_node_links (&self->node_links);
++
+ self->n_active_links = 0;
+ self->n_failed_links = 0;
+ self->n_async_ops_wait = 0;
+@@ -168,7 +190,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res,
+ WpTransition * transition)
+ {
+ WpSiStandardLink *self = wp_transition_get_source_object (transition);
+- guint len = self->node_links->len;
++ guint len = self->node_links ? self->node_links->len : 0;
+
+ /* Count the number of failed and active links */
+ if (wp_object_activate_finish (proxy, res, NULL))
+@@ -182,7 +204,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res,
+
+ /* We only active feature if all links activated successfully */
+ if (self->n_failed_links > 0) {
+- g_clear_pointer (&self->node_links, g_ptr_array_unref);
++ clear_node_links (&self->node_links);
+ wp_transition_return_error (transition, g_error_new (
+ WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_OPERATION_FAILED,
+ "%d of %d PipeWire links failed to activate",
+@@ -251,7 +273,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition,
+ /* Clear old links if any */
+ self->n_active_links = 0;
+ self->n_failed_links = 0;
+- g_clear_pointer (&self->node_links, g_ptr_array_unref);
++ clear_node_links (&self->node_links);
+
+ /* tuple format:
+ uint32 node_id;
+@@ -327,7 +349,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition,
+
+ /* activate to ensure it is created without errors */
+ wp_object_activate_closure (WP_OBJECT (link),
+- WP_OBJECT_FEATURES_ALL, NULL,
++ WP_OBJECT_FEATURES_ALL & ~WP_LINK_FEATURE_ESTABLISHED, NULL,
+ g_cclosure_new_object (
+ (GCallback) on_link_activated, G_OBJECT (transition)));
+ }
+GitLab
diff --git a/media-video/wireplumber/wireplumber-0.4.11-r3.ebuild b/media-video/wireplumber/wireplumber-0.4.11-r3.ebuild
new file mode 100644
index 000000000000..99ca2c5c7956
--- /dev/null
+++ b/media-video/wireplumber/wireplumber-0.4.11-r3.ebuild
@@ -0,0 +1,131 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# 1. Please regularly check (even at the point of bumping) Fedora's packaging
+# for needed backports at https://src.fedoraproject.org/rpms/wireplumber/tree/rawhide
+#
+# 2. Keep an eye on git master (for both PipeWire and WirePlumber) as things
+# continue to move quickly. It's not uncommon for fixes to be made shortly
+# after releases.
+
+LUA_COMPAT=( lua5-{3,4} )
+
+inherit lua-single meson systemd
+
+if [[ ${PV} == 9999 ]]; then
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/pipewire/${PN}.git"
+ EGIT_BRANCH="master"
+ inherit git-r3
+else
+ SRC_URI="https://gitlab.freedesktop.org/pipewire/${PN}/-/archive/${PV}/${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+DESCRIPTION="Replacement for pipewire-media-session"
+HOMEPAGE="https://gitlab.freedesktop.org/pipewire/wireplumber"
+
+LICENSE="MIT"
+SLOT="0/0.4"
+IUSE="elogind system-service systemd test"
+
+REQUIRED_USE="
+ ${LUA_REQUIRED_USE}
+ ?? ( elogind systemd )
+ system-service? ( systemd )
+"
+
+RESTRICT="!test? ( test )"
+
+# introspection? ( dev-libs/gobject-introspection ) is valid but likely only used for doc building
+BDEPEND="
+ dev-libs/glib
+ dev-util/gdbus-codegen
+ dev-util/glib-utils
+ sys-devel/gettext
+"
+
+DEPEND="
+ ${LUA_DEPS}
+ >=dev-libs/glib-2.62
+ >=media-video/pipewire-0.3.53-r1:=
+ virtual/libintl
+ elogind? ( sys-auth/elogind )
+ systemd? ( sys-apps/systemd )
+"
+
+# Any dev-lua/* deps get declared like this inside RDEPEND:
+# $(lua_gen_cond_dep '
+# dev-lua/<NAME>[${LUA_USEDEP}]
+# ')
+RDEPEND="${DEPEND}
+ system-service? (
+ acct-user/pipewire
+ acct-group/pipewire
+ )
+"
+
+DOCS=( {NEWS,README}.rst )
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.4.10-config-disable-sound-server-parts.patch # defer enabling sound server parts to media-video/pipewire
+ "${FILESDIR}"/${P}-alsa-lua-crash.patch
+ "${FILESDIR}"/${P}-dbus-reconnect-crash.patch
+ "${FILESDIR}"/${P}-loop.patch
+)
+
+src_configure() {
+ local emesonargs=(
+ -Ddoc=disabled # Ebuild not wired up yet (Sphinx, Doxygen?)
+ -Dintrospection=disabled # Only used for Sphinx doc generation
+ -Dsystem-lua=true # We always unbundle everything we can
+ -Dsystem-lua-version=$(ver_cut 1-2 $(lua_get_version))
+ $(meson_feature elogind)
+ $(meson_feature systemd)
+ $(meson_use system-service systemd-system-service)
+ $(meson_use systemd systemd-user-service)
+ -Dsystemd-system-unit-dir=$(systemd_get_systemunitdir)
+ -Dsystemd-user-unit-dir=$(systemd_get_userunitdir)
+ $(meson_use test tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+
+ # We copy the default config, so that Gentoo tools can pick up on any
+ # updates and /etc does not end up with stale overrides.
+ # If a reflinking CoW filesystem is used (e.g. Btrfs), then the files
+ # will not actually get stored twice until modified.
+ insinto /etc
+ doins -r "${ED}"/usr/share/wireplumber
+}
+
+pkg_postinst() {
+ if systemd_is_booted ; then
+ ewarn "pipewire-media-session.service is no longer installed. You must switch"
+ ewarn "to wireplumber.service user unit before your next logout/reboot:"
+ ewarn "systemctl --user disable pipewire-media-session.service"
+ ewarn "systemctl --user --force enable wireplumber.service"
+ else
+ ewarn "Switch to WirePlumber will happen the next time gentoo-pipewire-launcher"
+ ewarn "is started (a replacement for directly calling pipewire binary)."
+ ewarn
+ ewarn "Please ensure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist"
+ ewarn "or, if it does exist, that any reference to"
+ ewarn "${EROOT}/usr/bin/pipewire-media-session is commented out (begins with a #)."
+ fi
+ if use system-service; then
+ ewarn
+ ewarn "WARNING: you have enabled the system-service USE flag, which installs"
+ ewarn "the system-wide systemd units that enable WirePlumber to run as a system"
+ ewarn "service. This is more than likely NOT what you want. You are strongly"
+ ewarn "advised not to enable this mode and instead stick with systemd user"
+ ewarn "units. The default configuration files will likely not work out of"
+ ewarn "box, and you are on your own with configuration."
+ ewarn
+ fi
+}