Accepting request 1007919 from home:XRevan86

- Update to version 0.4.12.

OBS-URL: https://build.opensuse.org/request/show/1007919
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=51
This commit is contained in:
Takashi Iwai 2022-10-04 16:14:09 +00:00 committed by Git OBS Bridge
parent bb0b83f76e
commit 1c0d79e47a
11 changed files with 100 additions and 287 deletions

View File

@ -1,51 +0,0 @@
From eb406bdb2cbbcd49c55c71285f8f2eddb624d24b Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Wed, 13 Jul 2022 13:38:14 +0300
Subject: [PATCH] dbus: fix crash when trying to reconnect
When coming from on_sync_reconnect, data points to the WpDBus object
instead of the activation transition.
Fixes: #305
---
lib/wp/dbus.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/lib/wp/dbus.c b/lib/wp/dbus.c
index 01a3b21..7c2d023 100644
--- a/lib/wp/dbus.c
+++ b/lib/wp/dbus.c
@@ -58,14 +58,26 @@ wp_dbus_set_state (WpDbus *self, WpDBusState new_state)
static void
on_got_bus (GObject * obj, GAsyncResult * res, gpointer data)
{
- WpTransition *transition = WP_TRANSITION (data);
- WpDbus *self = wp_transition_get_source_object (transition);
+ WpTransition *transition;
+ WpDbus *self;
g_autoptr (GError) error = NULL;
+ if (WP_IS_TRANSITION (data)) {
+ // coming from wp_dbus_enable
+ transition = WP_TRANSITION (data);
+ self = wp_transition_get_source_object (transition);
+ } else {
+ // coming from on_sync_reconnect
+ transition = NULL;
+ self = WP_DBUS (data);
+ }
+
self->connection = g_dbus_connection_new_for_address_finish (res, &error);
if (!self->connection) {
- g_prefix_error (&error, "Failed to connect to bus: ");
- wp_transition_return_error (transition, g_steal_pointer (&error));
+ if (transition) {
+ g_prefix_error (&error, "Failed to connect to bus: ");
+ wp_transition_return_error (transition, g_steal_pointer (&error));
+ }
return;
}
--
2.36.1

161
398.patch
View File

@ -1,161 +0,0 @@
From ba10c7d8c68db7b79cfa9f0e42432b63a76c415a Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
Date: Tue, 19 Jul 2022 20:39:06 +0300
Subject: [PATCH 1/2] 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"
---
src/scripts/policy-node.lua | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
index e6816723..43df701c 100644
--- 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 dd017b43fa1077200ae5e00f697334908ef1b9b2 Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
Date: Tue, 19 Jul 2022 20:01:10 +0300
Subject: [PATCH 2/2] 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.
---
modules/module-si-standard-link.c | 32 ++++++++++++++++++++++++++-----
1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/modules/module-si-standard-link.c b/modules/module-si-standard-link.c
index dbebf391..9af71342 100644
--- 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

View File

@ -3,7 +3,7 @@
<service name="obs_scm" mode="disabled">
<param name="scm">git</param>
<param name="url">https://gitlab.freedesktop.org/pipewire/wireplumber.git</param>
<param name="revision">0.4.11</param>
<param name="revision">0.4.12</param>
<param name="versionformat">@PARENT_TAG@</param>
<!--
<param name="revision">master</param>

View File

@ -1,4 +0,0 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://gitlab.freedesktop.org/pipewire/wireplumber.git</param>
<param name="changesrevision">3400acd0db95fefdda7595d20466c095902d8997</param></service></servicedata>

View File

@ -1,39 +0,0 @@
From c16e637c329bc9dda8544b18f5bd47a8d63ee253 Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Thu, 7 Jul 2022 20:58:36 +0300
Subject: [PATCH] alsa: use "obj_type" as a variable name to avoid shadowing
lua's "type" function
This causes a crash when running in a VM because the code tries to
execute lua's "type()" and ends up executing the local string variable...
Fixes: #303
---
src/scripts/monitors/alsa.lua | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
index 43fab943..38f847f7 100644
--- a/src/scripts/monitors/alsa.lua
+++ b/src/scripts/monitors/alsa.lua
@@ -49,7 +49,7 @@ function nonempty(str)
return str ~= "" and str or nil
end
-function createNode(parent, id, type, factory, properties)
+function createNode(parent, id, obj_type, factory, properties)
local dev_props = parent.properties
-- set the device id and spa factory name; REQUIRED, do not change
@@ -199,7 +199,7 @@ function createDevice(parent, id, factory, properties)
end
end
-function prepareDevice(parent, id, type, factory, properties)
+function prepareDevice(parent, id, obj_type, factory, properties)
-- ensure the device has an appropriate name
local name = "alsa_card." ..
(properties["device.name"] or
--
GitLab

View File

@ -4,40 +4,70 @@ Subject: Reduce the minimum required meson version
With this, we can build wireplumber in SLE 15 SP3/Leap 15.3
which only have meson 0.54
Index: wireplumber-0.4.11/meson.build
Index: wireplumber-0.4.12/meson.build
===================================================================
--- wireplumber-0.4.11.orig/meson.build
+++ wireplumber-0.4.11/meson.build
--- wireplumber-0.4.12.orig/meson.build
+++ wireplumber-0.4.12/meson.build
@@ -1,7 +1,7 @@
project('wireplumber', ['c'],
version : '0.4.11',
version : '0.4.12',
license : 'MIT',
- meson_version : '>= 0.59.0',
+ meson_version : '>= 0.54.0',
default_options : [
'warning_level=1',
'buildtype=debugoptimized',
@@ -42,7 +42,11 @@ spa_dep = dependency('libspa-0.2', versi
@@ -42,7 +42,17 @@ spa_dep = dependency('libspa-0.2', versi
pipewire_dep = dependency('libpipewire-0.3', version: '>= 0.3.52')
mathlib = cc.find_library('m')
threads_dep = dependency('threads')
-libintl_dep = dependency('intl')
+libintl_dep = dependency('', required: false)
+
+if not cc.has_function('ngettext')
+ libintl_dep = cc.find_library('intl')
+
+if meson.version().version_compare('>= 0.59')
+ libintl_dep = dependency('intl')
+else
+ libintl_dep = dependency('', required: false)
+
+ if not cc.has_function('ngettext')
+ libintl_dep = cc.find_library('intl')
+ endif
+endif
system_lua = get_option('system-lua')
if system_lua
@@ -131,8 +135,8 @@ endif
@@ -129,8 +139,13 @@ if get_option('tests')
subdir('tests')
endif
-builddir = meson.project_build_root()
-srcdir = meson.project_source_root()
+if meson.version().version_compare('>= 0.56')
+ builddir = meson.project_build_root()
+ srcdir = meson.project_source_root()
+else
+ builddir = meson.build_root()
+ srcdir = meson.source_root()
+endif
conf_uninstalled = configuration_data()
conf_uninstalled.set('MESON', '')
-conf_uninstalled.set('MESON_SOURCE_ROOT', meson.project_source_root())
-conf_uninstalled.set('MESON_BUILD_ROOT', meson.project_build_root())
+conf_uninstalled.set('MESON_SOURCE_ROOT', meson.source_root())
+conf_uninstalled.set('MESON_BUILD_ROOT', meson.build_root())
@@ -150,10 +165,12 @@ wireplumber_uninstalled = custom_target(
command : ['cp', '@INPUT@', '@OUTPUT@'],
)
wp_uninstalled = configure_file(
input : 'wp-uninstalled.sh',
-devenv = environment({
- 'WIREPLUMBER_MODULE_DIR': builddir / 'modules',
- 'WIREPLUMBER_CONFIG_DIR': srcdir / 'src' / 'config',
- 'WIREPLUMBER_DATA_DIR': srcdir / 'src',
-})
+if meson.version().version_compare('>= 0.58')
+ devenv = environment({
+ 'WIREPLUMBER_MODULE_DIR': builddir / 'modules',
+ 'WIREPLUMBER_CONFIG_DIR': srcdir / 'src' / 'config',
+ 'WIREPLUMBER_DATA_DIR': srcdir / 'src',
+ })
-meson.add_devenv(devenv)
+ meson.add_devenv(devenv)
+endif

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:baf083fbb6f948631a0392ee8ffcea60afac4b4d081b049153fa7c66d5b4d9f5
size 2116620

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e71c251d3034e4a21ea0e69ba0bf899efdca0e0c80db2b9b9f88bc953d3f4cbc
size 2133516

View File

@ -1,3 +1,48 @@
-------------------------------------------------------------------
Tue Oct 4 13:01:17 UTC 2022 - Alexei Sorokin <sor.alexei@meowr.ru>
- Update to version 0.4.12:
* Changes
- WirePlumber now maintains a stack of previously configured
default nodes and prioritises to one of those when the
actively configured default node becomes unavailable, before
calculating the next default using priorities.
- Updated bluetooth scripts to support the name changes that
happened in PipeWire 0.3.59 and also support the experimental
Bluetooth LE functionality.
- Changed the naming of bluetooth nodes to not include the
profile in it; this allows maintaining existing links when
switching between a2dp and hfp.
- The default volume for new outputs has changed to be 40% in
cubic scale (= -24 dB) instead of linear
(= 74% cubic / -8 dB) that it was before.
- The default volume for new inputs has changed to be 100%
rather than following the default for outputs.
- Added ``--version`` flag on the wireplumber executable.
- Added ``--limit`` flag on ``wpctl set-volume`` to limit the
higher volume that can be set (useful when incrementing
volume with a keyboard shortcut that calls into wpctl).
- The properties of the alsa midi node can now be set in the
config files.
* Fixes
- Fixed a crash in lua code that would happen when running in a
VM.
- Fixed a crash that would happen when re-connecting to D-Bus.
- Fixed a mistake in the code that would cause device
reservation not to work properly.
- Fixed ``wpctl clear-default`` to accept 0 as a valid setting ID.
- Fixed the logic of choosing the best profile after the active
profile of a device becomes unavailable
- Fixed a regression that would cause PulseAudio "corked"
streams to not properly link and cause busy loops.
- Fixed an issue parsing spa-json objects that have a nested
object as the value of their last property.
- Rebase reduce-meson-required-version.patch
- Drop patches already upstream:
* fix-alsa.patch
* 0001-dbus-fix-crash-when-trying-to-reconnect.patch
* 398.patch
-------------------------------------------------------------------
Fri Aug 5 21:07:13 UTC 2022 - Atri Bhattacharya <badshah400@gmail.com>

View File

@ -1,4 +1,4 @@
name: wireplumber
version: 0.4.11
mtime: 1657027335
commit: 80b3559963f0ad40a7bfa6c23b0098275c0b5ebe
version: 0.4.12
mtime: 1664889909
commit: 6f6e5df9c1b223907efa8dcbfcd538821d0dabc4

View File

@ -22,7 +22,7 @@
%define sover 0
%define libwireplumber libwireplumber-%{apiver_str}-%{sover}
Name: wireplumber
Version: 0.4.11
Version: 0.4.12
Release: 0
Summary: Session / policy manager implementation for PipeWire
License: MIT
@ -32,17 +32,13 @@ Source0: wireplumber-%{version}.tar.xz
Source1: split-config-file.py
# PATCH-FIX-OPENSUSE reduce-meson-required-version.patch
Patch0: reduce-meson-required-version.patch
# PATCH-FIX-UPSTREAM
Patch1: fix-alsa.patch
Patch2: 0001-dbus-fix-crash-when-trying-to-reconnect.patch
Patch3: https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/398.patch
# docs
BuildRequires: doxygen
BuildRequires: graphviz
# /docs
BuildRequires: cmake
BuildRequires: fdupes
%if 0%{?sle_version} == 150300
%if 0%{?sle_version} <= 150300
BuildRequires: meson >= 0.54.0
%else
BuildRequires: meson >= 0.59.0
@ -141,12 +137,9 @@ the wireplumber shared library.
%prep
%autosetup -N
%if 0%{?sle_version} == 150300
%if 0%{?sle_version} <= 150300
%patch0 -p1
%endif
%patch1 -p1
%patch2 -p1
%patch3 -p1
pushd src/config/main.lua.d
python3 %{SOURCE1}