- Update to version 0.5.15:
* Additions & Enhancements:
- Added new WpPermissionManager API that centralizes access
control for clients, with support for attaching permission
managers to clients from Lua scripts; the client access
scripts have been completely refactored to use the new API
with a select-access event and a priority fallback
mechanism: configuration, flatpak, snap, portal, and default
(!797 (merged), !822 (merged), !825 (merged))
- Added new WpStateMetadata class that mirrors the persistent
state into a PipeWire metadata object, allowing users to
clear or change saved device profiles at runtime using
pw-metadata (!818 (merged))
- Added set_param(), enum_params_sync() and params-changed
signal to WpSpaDevice, and an event signal for SPA device
events, allowing monitors to directly interact with SPA
devices and react to profile changes without going through
the global WpDevice object (!835 (merged), !842 (merged))
- Added list subcommand to wpctl for displaying PipeWire
objects in a script-friendly format, with bash completions
(!805 (merged), !823 (merged))
- Added reset command to wpctl to reset the state of
WirePlumber and PipeWire to installation defaults
(!848 (merged), !849 (merged))
- Enhanced wpctl to connect to the manager socket when
available, giving the tool unrestricted access to the
PipeWire graph (!814 (merged))
- Added new bluetooth.profile-preference setting to
find-preferred-profile for selecting quality or latency A2DP
profiles (!819 (merged))
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=102
This commit is contained in:
+2639
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,308 @@
|
||||
#
|
||||
# spec file for package wireplumber
|
||||
#
|
||||
# Copyright (c) 2024 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
%define pipewire_minimum_version 1.0.2
|
||||
%define apiver 0.5
|
||||
%define apiver_str 0_5
|
||||
%define sover 0
|
||||
%define libwireplumber libwireplumber-%{apiver_str}-%{sover}
|
||||
Name: wireplumber
|
||||
Version: 0.5.15
|
||||
Release: 0
|
||||
Summary: Session / policy manager implementation for PipeWire
|
||||
License: MIT
|
||||
Group: Development/Libraries/C and C++
|
||||
URL: https://gitlab.freedesktop.org/pipewire/wireplumber
|
||||
Source0: wireplumber-%{version}.tar.xz
|
||||
Source1: wireplumber.env
|
||||
Patch100: set-profile-in-service.patch
|
||||
# docs
|
||||
BuildRequires: doxygen
|
||||
BuildRequires: graphviz
|
||||
# /docs
|
||||
BuildRequires: cmake
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: meson >= 0.59.0
|
||||
BuildRequires: pipewire >= %{pipewire_minimum_version}
|
||||
BuildRequires: pipewire-spa-plugins-0_2 >= %{pipewire_minimum_version}
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: python3-base
|
||||
BuildRequires: python3-lxml
|
||||
BuildRequires: xmltoman
|
||||
BuildRequires: pkgconfig(dbus-1)
|
||||
BuildRequires: pkgconfig(gio-unix-2.0)
|
||||
BuildRequires: pkgconfig(glib-2.0) >= 2.62.0
|
||||
BuildRequires: pkgconfig(gmodule-2.0)
|
||||
BuildRequires: pkgconfig(gobject-2.0) >= 2.62
|
||||
BuildRequires: pkgconfig(gobject-introspection-1.0)
|
||||
BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_minimum_version}
|
||||
BuildRequires: pkgconfig(libsystemd)
|
||||
BuildRequires: pkgconfig(lua)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: python3-Sphinx
|
||||
BuildRequires: python3-sphinx_rtd_theme
|
||||
BuildRequires: python3-breathe
|
||||
#!BuildIgnore: pipewire-session-manager
|
||||
Requires: (%{name}-video-only-profile if pulseaudio)
|
||||
Requires: pipewire >= %{pipewire_minimum_version}
|
||||
Provides: pipewire-session-manager
|
||||
Recommends: pipewire-jack
|
||||
Recommends: pipewire-pulseaudio
|
||||
Provides: wireplumber-audio = %{version}-%{release}
|
||||
Obsoletes: wireplumber-audio < %{version}-%{release}
|
||||
%if 0%{?suse_version} <= 1500
|
||||
BuildRequires: gcc9
|
||||
BuildRequires: gcc9-c++
|
||||
%else
|
||||
BuildRequires: c++_compiler
|
||||
%endif
|
||||
%{?systemd_ordering}
|
||||
|
||||
|
||||
%description
|
||||
WirePlumber is a modular session / policy manager for PipeWire and
|
||||
a GObject-based high-level library that wraps PipeWire's API,
|
||||
providing convenience for writing the daemon's modules as well as
|
||||
external tools for managing PipeWire.
|
||||
|
||||
%lang_package
|
||||
|
||||
%package doc
|
||||
Summary: Wireplumber Session / policy manager documentation
|
||||
Group: Development/Libraries/C and C++
|
||||
BuildArch: noarch
|
||||
|
||||
%description doc
|
||||
This package contains documentation for the WirePlumber
|
||||
session/policy manager for PipeWire.
|
||||
|
||||
%package video-only-profile
|
||||
Summary: Disable audio support in PipeWire / WirePlumber
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{libwireplumber} = %{version}
|
||||
Requires: %{name} = %{version}
|
||||
Recommends: pulseaudio
|
||||
Supplements: pulseaudio
|
||||
BuildArch: noarch
|
||||
|
||||
%description video-only-profile
|
||||
WirePlumber is a modular session / policy manager for PipeWire and
|
||||
a GObject-based high-level library that wraps PipeWire's API,
|
||||
providing convenience for writing the daemon's modules as well as
|
||||
external tools for managing PipeWire.
|
||||
|
||||
This package makes wireplumber use the video-only-profile when
|
||||
started via the wireplumber user service (the default way to run
|
||||
it) effectively disabling the use of alsa devices in PipeWire.
|
||||
|
||||
%package devel
|
||||
Summary: Session / policy manager implementation for PipeWire
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: %{libwireplumber} = %{version}
|
||||
Requires: %{name} = %{version}
|
||||
|
||||
%description devel
|
||||
WirePlumber is a modular session / policy manager for PipeWire and
|
||||
a GObject-based high-level library that wraps PipeWire's API,
|
||||
providing convenience for writing the daemon's modules as well as
|
||||
external tools for managing PipeWire.
|
||||
|
||||
This package provides all the necessary files for development with WirePlumber
|
||||
|
||||
%package -n %{libwireplumber}
|
||||
Summary: Session / policy manager implementation for PipeWire
|
||||
Group: System/Libraries
|
||||
|
||||
%description -n %{libwireplumber}
|
||||
WirePlumber is a modular session / policy manager for PipeWire and
|
||||
a GObject-based high-level library that wraps PipeWire's API,
|
||||
providing convenience for writing the daemon's modules as well as
|
||||
external tools for managing PipeWire.
|
||||
|
||||
This package provides the wireplumber shared library.
|
||||
|
||||
%package -n typelib-1_0-Wp-%{apiver_str}
|
||||
Summary: Introspection bindings for libwireplumber
|
||||
Group: System/Libraries
|
||||
|
||||
%description -n typelib-1_0-Wp-%{apiver_str}
|
||||
WirePlumber is a modular session / policy manager for PipeWire and
|
||||
a GObject-based high-level library that wraps PipeWire's API,
|
||||
providing convenience for writing the daemon's modules as well as
|
||||
external tools for managing PipeWire.
|
||||
|
||||
This package provides the GObject Introspection bindings for
|
||||
the wireplumber shared library.
|
||||
|
||||
%package zsh-completion
|
||||
Summary: Wireplumber zsh completion
|
||||
Group: System/Shells
|
||||
Requires: %{name} = %{version}
|
||||
Requires: zsh
|
||||
Supplements: (wireplumber and zsh)
|
||||
BuildArch: noarch
|
||||
|
||||
%description zsh-completion
|
||||
Optional dependency offering zsh completion for various wpctl parameters.
|
||||
|
||||
%package bash-completion
|
||||
Summary: Wireplumber Bash completion
|
||||
Group: System/Shells
|
||||
Requires: %{name} = %{version}
|
||||
Requires: bash-completion
|
||||
Supplements: (wireplumber and bash-completion)
|
||||
|
||||
%description bash-completion
|
||||
Optional dependency offering bash completion for wpctl.
|
||||
|
||||
%prep
|
||||
%autosetup -p1
|
||||
|
||||
%build
|
||||
%if 0%{?suse_version} <= 1500
|
||||
export CC=gcc-9
|
||||
export CXX=g++-9
|
||||
%endif
|
||||
%meson -Ddoc=enabled \
|
||||
-Dsystem-lua=true \
|
||||
-Delogind=disabled
|
||||
%meson_build
|
||||
|
||||
%install
|
||||
%meson_install
|
||||
%if 0%{?suse_version} > 1500
|
||||
mkdir -p %{buildroot}/%{_distconfdir}
|
||||
install -m 644 %{S:1} %{buildroot}/%{_distconfdir}/
|
||||
%else
|
||||
mkdir -p %{buildroot}/%{_sysconfdir}
|
||||
install -m 644 %{S:1} %{buildroot}/%{_sysconfdir}/
|
||||
%endif
|
||||
%fdupes -s %{buildroot}/%{_datadir}/doc/pipewire/html
|
||||
%find_lang %{name} %{?no_lang_C}
|
||||
|
||||
%ifnarch %ix86 ppc64
|
||||
%check
|
||||
export XDG_RUNTIME_DIR=/tmp
|
||||
%meson_test
|
||||
%endif
|
||||
|
||||
%pre
|
||||
%systemd_user_pre wireplumber.service
|
||||
|
||||
%post
|
||||
%systemd_user_post wireplumber.service
|
||||
|
||||
%if 0%{?suse_version} <= 1500
|
||||
# If the pipewire.socket user unit is not enabled and the workaround
|
||||
# for boo#1186561 has never been executed, we need to execute it now
|
||||
if [ ! -L %{_sysconfdir}/systemd/user/pipewire.service.wants/wireplumber.service \
|
||||
-a ! -f %{_localstatedir}/lib/pipewire/wireplumber_post_workaround \
|
||||
-a -x %{_bindir}/systemctl ]; then
|
||||
for service in wireplumber.service ; do
|
||||
%{_bindir}/systemctl --global preset "$service" || :
|
||||
done
|
||||
|
||||
mkdir -p %{_localstatedir}/lib/pipewire
|
||||
cat << EOF > %{_localstatedir}/lib/pipewire/wireplumber_post_workaround
|
||||
# The existence of this file means that the wireplumber user services were
|
||||
# enabled at least once. Please don't remove this file as that would
|
||||
# make the services to be enabled again in the next package update.
|
||||
#
|
||||
# Check the following bugs for more information:
|
||||
# https://bugzilla.opensuse.org/show_bug.cgi?id=1200485
|
||||
EOF
|
||||
fi
|
||||
%endif
|
||||
|
||||
|
||||
%preun
|
||||
%systemd_user_preun wireplumber.service
|
||||
|
||||
%postun
|
||||
%systemd_user_postun wireplumber.service
|
||||
|
||||
%post -n %{libwireplumber} -p /sbin/ldconfig
|
||||
%postun -n %{libwireplumber} -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%{_bindir}/wireplumber
|
||||
%{_bindir}/wpctl
|
||||
%{_bindir}/wpexec
|
||||
%dir %{_libdir}/wireplumber-%{apiver}
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-dbus-connection.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-default-nodes-api.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-file-monitor-api.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-log-settings.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-logind.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-lua-scripting.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-mixer-api.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-modem-manager.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-mpris.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-notifications-api.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-portal-permissionstore.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-reserve-device.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-settings.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-audio-adapter.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-node.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-standard-link.so
|
||||
%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-standard-event-source.so
|
||||
%{_userunitdir}/wireplumber.service
|
||||
%{_userunitdir}/wireplumber@.service
|
||||
%dir %{_datadir}/doc/wireplumber
|
||||
%dir %{_datadir}/doc/wireplumber/examples
|
||||
%{_datadir}/doc/wireplumber/examples/wireplumber.conf.d
|
||||
%{_datadir}/wireplumber
|
||||
%{_mandir}/man1/wpctl.1%{?ext_man}
|
||||
|
||||
%files lang -f %{name}.lang
|
||||
|
||||
%files video-only-profile
|
||||
%if 0%{?suse_version} > 1500
|
||||
%{_distconfdir}/wireplumber.env
|
||||
%else
|
||||
%{_sysconfdir}/wireplumber.env
|
||||
%endif
|
||||
|
||||
%files devel
|
||||
%{_includedir}/wireplumber-%{apiver}
|
||||
%{_libdir}/libwireplumber-%{apiver}.so
|
||||
%{_libdir}/pkgconfig/wireplumber-%{apiver}.pc
|
||||
%{_datadir}/gir-1.0/Wp-%{apiver}.gir
|
||||
|
||||
%files doc
|
||||
%{_datadir}/doc/wireplumber/html/
|
||||
%exclude %{_datadir}/doc/wireplumber/examples
|
||||
|
||||
%files -n typelib-1_0-Wp-%{apiver_str}
|
||||
%{_libdir}/girepository-1.0/Wp-%{apiver}.typelib
|
||||
|
||||
%files -n %{libwireplumber}
|
||||
%{_libdir}/libwireplumber-%{apiver}.so.%{sover}
|
||||
%{_libdir}/libwireplumber-%{apiver}.so.%{sover}.*
|
||||
|
||||
%files zsh-completion
|
||||
%dir %{_datarootdir}/zsh
|
||||
%dir %{_datarootdir}/zsh/site-functions/
|
||||
%{_datarootdir}/zsh/site-functions/_wpctl
|
||||
|
||||
%files bash-completion
|
||||
%dir %{_datadir}/bash-completion
|
||||
%dir %{_datadir}/bash-completion/completions
|
||||
%{_datadir}/bash-completion/completions/wpctl
|
||||
|
||||
%changelog
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0"?>
|
||||
<services>
|
||||
<service name="obs_scm" mode="manual">
|
||||
<param name="scm">git</param>
|
||||
<param name="url">https://gitlab.freedesktop.org/pipewire/wireplumber.git</param>
|
||||
<param name="revision">0.5.15</param>
|
||||
<param name="versionformat">@PARENT_TAG@</param>
|
||||
<!--
|
||||
<param name="revision">master</param>
|
||||
<param name="versionformat">@PARENT_TAG@+git@TAG_OFFSET@.%h</param>
|
||||
<param name="changesgenerate">enable</param>
|
||||
-->
|
||||
<!--
|
||||
<param name="revision">master</param>
|
||||
<param name="versionformat">@PARENT_TAG@+git%cd.%h</param>
|
||||
-->
|
||||
</service>
|
||||
<service name="tar" mode="buildtime"/>
|
||||
<service name="recompress" mode="buildtime">
|
||||
<param name="file">*.tar</param>
|
||||
<param name="compression">xz</param>
|
||||
</service>
|
||||
<service name="set_version" mode="manual" />
|
||||
</services>
|
||||
@@ -0,0 +1,24 @@
|
||||
*.changes merge=merge-changes
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||
@@ -0,0 +1,4 @@
|
||||
*.obscpio
|
||||
*.osc
|
||||
_build.*
|
||||
.pbuild
|
||||
@@ -0,0 +1,37 @@
|
||||
From b60b2f4ece58eb5b08d30d6832ee987c71a52350 Mon Sep 17 00:00:00 2001
|
||||
From: Pauli Virtanen <pav@iki.fi>
|
||||
Date: Sun, 4 Jan 2026 23:23:25 +0200
|
||||
Subject: [PATCH] monitors/bluez: request device ports take loopback nodes into
|
||||
account
|
||||
|
||||
Take the loopback nodes into account also in device Routes.
|
||||
|
||||
Some Pulseaudio applications (eg GNOME) determine what to do based on
|
||||
device ports, so make sure they are consistent with what nodes will be
|
||||
emitted.
|
||||
---
|
||||
src/scripts/monitors/bluez.lua | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/scripts/monitors/bluez.lua b/src/scripts/monitors/bluez.lua
|
||||
index 3acbeb309a19..e58731391e66 100644
|
||||
--- a/src/scripts/monitors/bluez.lua
|
||||
+++ b/src/scripts/monitors/bluez.lua
|
||||
@@ -546,6 +546,14 @@ function checkProfiles (dev)
|
||||
return
|
||||
end
|
||||
|
||||
+ -- Setup Route/Port correctly for loopback nodes
|
||||
+ local param = Pod.Object ({
|
||||
+ "Spa:Pod:Object:Param:Props",
|
||||
+ "Props",
|
||||
+ params = Pod.Struct ({ "bluez5.autoswitch-routes", true })
|
||||
+ })
|
||||
+ dev:set_param("Props", param)
|
||||
+
|
||||
-- Create the source loopback device if never created before
|
||||
local source_loopback = spa_device:get_managed_object (LOOPBACK_SOURCE_ID)
|
||||
if source_loopback == nil then
|
||||
--
|
||||
2.52.0
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From f088a6f63d0eddbd6db4eefbe55f6b9921ef913d Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Thu, 8 Jan 2026 13:47:21 -0500
|
||||
Subject: [PATCH] autoswitch-bluetooth-profile: Fix attempt to index a number
|
||||
value error
|
||||
|
||||
The getLinkedBluetoothLoopbackSourceNodeForStream() function expects stream to be
|
||||
and object and not a stream ID.
|
||||
---
|
||||
src/scripts/device/autoswitch-bluetooth-profile.lua | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/device/autoswitch-bluetooth-profile.lua b/src/scripts/device/autoswitch-bluetooth-profile.lua
|
||||
index 07f8db39cfca..ee41c32e35a1 100644
|
||||
--- a/src/scripts/device/autoswitch-bluetooth-profile.lua
|
||||
+++ b/src/scripts/device/autoswitch-bluetooth-profile.lua
|
||||
@@ -314,8 +314,7 @@ function getLinkedBluetoothLoopbackSourceNodeForStream (stream, node_om, link_om
|
||||
Constraint { "bluez5.loopback", "!", "true", type = "pw" },
|
||||
Constraint { "node.link-group", "=", filter_link_group, type = "pw" }
|
||||
} do
|
||||
- local filter_stream_id = filter_stream_node["bound-id"]
|
||||
- local bt_node = getLinkedBluetoothLoopbackSourceNodeForStream (filter_stream_id, node_om, link_om, visited_link_groups)
|
||||
+ local bt_node = getLinkedBluetoothLoopbackSourceNodeForStream (filter_stream_node, node_om, link_om, visited_link_groups)
|
||||
if bt_node ~= nil then
|
||||
return bt_node
|
||||
end
|
||||
--
|
||||
2.52.0
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
From 80842cbb965608bd76520af91dad40686f202285 Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Wed, 21 Jan 2026 10:49:13 -0500
|
||||
Subject: [PATCH] default-nodes: Never consider Audio/Sink nodes as best for
|
||||
default audio.source node type
|
||||
|
||||
Audio/Sink nodes should only be used as default audio source node type if the
|
||||
user has explicitly selected it. If the user has not explicitly selected it,
|
||||
we should always ignore it and instead select the highest priority Audio/Source
|
||||
node.
|
||||
|
||||
Fixes #886
|
||||
---
|
||||
src/scripts/default-nodes/find-best-default-node.lua | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/scripts/default-nodes/find-best-default-node.lua b/src/scripts/default-nodes/find-best-default-node.lua
|
||||
index a8a1262e..08643e8b 100644
|
||||
--- a/src/scripts/default-nodes/find-best-default-node.lua
|
||||
+++ b/src/scripts/default-nodes/find-best-default-node.lua
|
||||
@@ -18,6 +18,8 @@ SimpleEventHook {
|
||||
},
|
||||
},
|
||||
execute = function (event)
|
||||
+ local props = event:get_properties ()
|
||||
+ local def_node_type = props ["default-node.type"]
|
||||
local available_nodes = event:get_data ("available-nodes")
|
||||
local selected_prio = event:get_data ("selected-node-priority") or 0
|
||||
local selected_route_prio = event:get_data ("selected-route-priority") or 0
|
||||
@@ -37,6 +39,12 @@ SimpleEventHook {
|
||||
-- Highest priority node wins
|
||||
local priority = nutils.get_session_priority (node_props)
|
||||
local route_priority = nutils.get_route_priority (node_props)
|
||||
+ local media_class = node_props ["media.class"]
|
||||
+
|
||||
+ -- Never consider sink nodes as best if audio.source is the def node type
|
||||
+ if media_class == "Audio/Sink" and def_node_type == "audio.source" then
|
||||
+ goto skip_node
|
||||
+ end
|
||||
|
||||
if selected_node == nil or
|
||||
priority > selected_prio or
|
||||
@@ -46,6 +54,8 @@ SimpleEventHook {
|
||||
selected_route_prio = route_priority
|
||||
selected_node = node_props ["node.name"]
|
||||
end
|
||||
+
|
||||
+ ::skip_node::
|
||||
end
|
||||
|
||||
event:set_data ("selected-node-priority", selected_prio)
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
From 11af177902550c24497cf120a5481b0ab5ccc981 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= <pobrn@protonmail.com>
|
||||
Date: Fri, 23 Jan 2026 19:44:34 +0100
|
||||
Subject: [PATCH] event-hook: fix interest hook event type memory leak
|
||||
|
||||
In `wp_interest_event_hook_get_matching_event_types()`, the variable
|
||||
`res` owns the allocated `GPtrArray`, but there is an early return
|
||||
in the function. Hitting that will leak the allocation, so use
|
||||
`g_autoptr` to avoid that.
|
||||
|
||||
Fixes: b80a0975c747 ("event-dispatcher: Register hooks for defined events in a hash table")
|
||||
---
|
||||
lib/wp/event-hook.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/wp/event-hook.c b/lib/wp/event-hook.c
|
||||
index 921bb934..49db4dcd 100644
|
||||
--- a/lib/wp/event-hook.c
|
||||
+++ b/lib/wp/event-hook.c
|
||||
@@ -367,7 +367,7 @@ wp_interest_event_hook_get_matching_event_types (WpEventHook * hook)
|
||||
WpInterestEventHook *self = WP_INTEREST_EVENT_HOOK (hook);
|
||||
WpInterestEventHookPrivate *priv =
|
||||
wp_interest_event_hook_get_instance_private (self);
|
||||
- GPtrArray *res = g_ptr_array_new_with_free_func (g_free);
|
||||
+ g_autoptr (GPtrArray) res = g_ptr_array_new_with_free_func (g_free);
|
||||
guint i;
|
||||
|
||||
for (i = 0; i < priv->interests->len; i++) {
|
||||
@@ -393,7 +393,7 @@ wp_interest_event_hook_get_matching_event_types (WpEventHook * hook)
|
||||
}
|
||||
}
|
||||
|
||||
- return res;
|
||||
+ return g_steal_pointer (&res);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From de0bca59023ef1cd655ebf5f944f8fd5952df10e Mon Sep 17 00:00:00 2001
|
||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
||||
Date: Fri, 6 Feb 2026 11:28:34 +0200
|
||||
Subject: [PATCH] state-stream: fix crash in case the Format has a Choice for
|
||||
the number of channels
|
||||
|
||||
Fixes: #903
|
||||
---
|
||||
src/scripts/node/state-stream.lua | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/node/state-stream.lua b/src/scripts/node/state-stream.lua
|
||||
index e2fc7efe..b4537644 100644
|
||||
--- a/src/scripts/node/state-stream.lua
|
||||
+++ b/src/scripts/node/state-stream.lua
|
||||
@@ -348,8 +348,18 @@ function buildDefaultChannelVolumes (node)
|
||||
for pod in node:iterate_params("Format") do
|
||||
local pod_parsed = pod:parse()
|
||||
if pod_parsed ~= nil then
|
||||
- channels = pod_parsed.properties.channels
|
||||
- break
|
||||
+ local t = type(pod_parsed.properties.channels)
|
||||
+ if t == "number" then
|
||||
+ channels = pod_parsed.properties.channels
|
||||
+ break
|
||||
+ else if t == "table" and #pod_parsed.properties.channels > 0 then
|
||||
+ -- in some misbehaving clients a non-fixed Format may appear here, which means the number of
|
||||
+ -- channels will be some kind of choice. If this is the case, pick the first number in the
|
||||
+ -- choice (which is either the default in an enum or range, or may just happen to be the
|
||||
+ -- right number in other cases)
|
||||
+ channels = pod_parsed.properties.channels[1]
|
||||
+ break
|
||||
+ end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
From 48ed27d11bfd2c952bc9a3138a4df6f81aa01038 Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Fri, 13 Feb 2026 10:17:02 -0500
|
||||
Subject: [PATCH] state-stream: fix Lua 5.4 compatibility
|
||||
|
||||
The 'elseif' and 'else if' keywords are treated differently in Lua 5.4
|
||||
---
|
||||
src/scripts/node/state-stream.lua | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/scripts/node/state-stream.lua b/src/scripts/node/state-stream.lua
|
||||
index b4537644..6587f26b 100644
|
||||
--- a/src/scripts/node/state-stream.lua
|
||||
+++ b/src/scripts/node/state-stream.lua
|
||||
@@ -352,7 +352,7 @@ function buildDefaultChannelVolumes (node)
|
||||
if t == "number" then
|
||||
channels = pod_parsed.properties.channels
|
||||
break
|
||||
- else if t == "table" and #pod_parsed.properties.channels > 0 then
|
||||
+ elseif t == "table" and #pod_parsed.properties.channels > 0 then
|
||||
-- in some misbehaving clients a non-fixed Format may appear here, which means the number of
|
||||
-- channels will be some kind of choice. If this is the case, pick the first number in the
|
||||
-- choice (which is either the default in an enum or range, or may just happen to be the
|
||||
--
|
||||
GitLab
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
Index: wireplumber-0.5.8/src/systemd/user/wireplumber.service.in
|
||||
===================================================================
|
||||
--- wireplumber-0.5.8.orig/src/systemd/user/wireplumber.service.in
|
||||
+++ wireplumber-0.5.8/src/systemd/user/wireplumber.service.in
|
||||
@@ -11,10 +11,13 @@ NoNewPrivileges=yes
|
||||
SystemCallArchitectures=native
|
||||
SystemCallFilter=@system-service mincore
|
||||
Type=simple
|
||||
-ExecStart=@WP_BINARY@
|
||||
+ExecStart=@WP_BINARY@ -p $WIREPLUMBER_PROFILE
|
||||
Restart=on-failure
|
||||
Slice=session.slice
|
||||
Environment=GIO_USE_VFS=local
|
||||
+Environment=WIREPLUMBER_PROFILE=main
|
||||
+EnvironmentFile=-/usr/etc/wireplumber.env
|
||||
+EnvironmentFile=-/etc/wireplumbler.env
|
||||
|
||||
[Install]
|
||||
WantedBy=pipewire.service
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
# Name of the wireplumber profile to use when running the default wireplumber
|
||||
# user service. This is usually either main (when wireplumber manages audio)
|
||||
# or video-only (when pulseaudio manages the audio).
|
||||
#
|
||||
# The default value is set in the service and should be main
|
||||
#
|
||||
WIREPLUMBER_PROFILE="video-only"
|
||||
@@ -0,0 +1,4 @@
|
||||
name: wireplumber
|
||||
version: 0.5.15
|
||||
mtime: 1781785475
|
||||
commit: bc4fa8f5e84806f86530c97cb35283eecc3ec081
|
||||
Reference in New Issue
Block a user