Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wireplumber for openSUSE:Factory 
checked in at 2023-04-06 15:55:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wireplumber (Old)
 and      /work/SRC/openSUSE:Factory/.wireplumber.new.19717 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wireplumber"

Thu Apr  6 15:55:40 2023 rev:22 rq:1077110 version:0.4.14

Changes:
--------
--- /work/SRC/openSUSE:Factory/wireplumber/wireplumber.changes  2023-01-14 
00:02:11.393351677 +0100
+++ /work/SRC/openSUSE:Factory/.wireplumber.new.19717/wireplumber.changes       
2023-04-06 15:55:40.796207084 +0200
@@ -1,0 +2,29 @@
+Fri Mar 10 23:20:12 UTC 2023 - Alexei Sorokin <sor.ale...@meowr.ru>
+
+- Update to version 0.4.14:
+  * Additions
+    - Add support for managing Bluetooth-MIDI, complementing the
+      parts that were merged in PipeWire recently.
+    - Add a default volume configuration option for streams whose
+      volume has never been saved before; that allows starting new
+      streams at a lower volume than 100% by default, if desired.
+    - Add support for managing link errors and propagating them to
+      the client(s) involved. This allows better error handling on
+      the application side in case a format cannot be negotiated -
+      useful in video streams.
+    - snd_aloop devices are now described as being "Loopback"
+      devices.
+    - ALSA nodes in the pro audio profile now get increased graph
+      priority, so that they are more likely to become the driver
+      in the graph.
+    - Add support for disabling libcamera nodes & devices with
+      node.disabled and device.disabled, like it works for ALSA
+      and V4L2.
+- Drop reduce-meson-required-version.patch: openSUSE Leap 15.3 is
+  no longer supported.
+- Drop patches already included upstream:
+  * 0001-alsa-monitor-handle-snd_aloop-devices-better.patch
+  * 0001-spa-json-make-sure-we-only-add-encoded-string-data.patch
+  * 
0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch
+
+-------------------------------------------------------------------

Old:
----
  0001-alsa-monitor-handle-snd_aloop-devices-better.patch
  
0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch
  0001-spa-json-make-sure-we-only-add-encoded-string-data.patch
  reduce-meson-required-version.patch
  wireplumber-0.4.13.obscpio

New:
----
  wireplumber-0.4.14.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wireplumber.spec ++++++
--- /var/tmp/diff_new_pack.AdpzsZ/_old  2023-04-06 15:55:41.392210450 +0200
+++ /var/tmp/diff_new_pack.AdpzsZ/_new  2023-04-06 15:55:41.396210473 +0200
@@ -22,7 +22,7 @@
 %define sover 0
 %define libwireplumber libwireplumber-%{apiver_str}-%{sover}
 Name:           wireplumber
-Version:        0.4.13
+Version:        0.4.14
 Release:        0
 Summary:        Session / policy manager implementation for PipeWire
 License:        MIT
@@ -30,26 +30,13 @@
 URL:            https://gitlab.freedesktop.org/pipewire/wireplumber
 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 0001-alsa-monitor-handle-snd_aloop-devices-better.patch
-Patch1:         0001-alsa-monitor-handle-snd_aloop-devices-better.patch
-# PATCH-FIX-UPSTREAM 
0001-spa-json-make-sure-we-only-add-encoded-string-data.patch
-Patch2:         0001-spa-json-make-sure-we-only-add-encoded-string-data.patch
-# PATCH-FIX-UPSTREAM 
0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch
-Patch3:         
0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch
-
 # docs
 BuildRequires:  doxygen
 BuildRequires:  graphviz
 # /docs
 BuildRequires:  cmake
 BuildRequires:  fdupes
-%if 0%{?sle_version} <= 150300
-BuildRequires:  meson >= 0.54.0
-%else
 BuildRequires:  meson >= 0.59.0
-%endif
 BuildRequires:  pipewire >= %{pipewire_minimum_version}
 BuildRequires:  pipewire-spa-plugins-0_2 >= %{pipewire_minimum_version}
 BuildRequires:  pkgconfig
@@ -145,13 +132,7 @@
 the wireplumber shared library.
 
 %prep
-%autosetup -N
-%if 0%{?suse_version} <= 1500 && 0%{?sle_version} <= 150300
-%patch0 -p1
-%endif
-%patch1 -p1
-%patch2 -p1
-%patch3 -p1
+%autosetup -p1
 
 pushd src/config/main.lua.d
 python3 %{SOURCE1}
@@ -161,6 +142,7 @@
 %build
 %if %{pkg_vcmp gcc < 8}
 export CC=gcc-9
+export CXX=g++-9
 %endif
 %meson -Ddoc=disabled \
        -Dsystem-lua=true \

++++++ _service ++++++
--- /var/tmp/diff_new_pack.AdpzsZ/_old  2023-04-06 15:55:41.424210631 +0200
+++ /var/tmp/diff_new_pack.AdpzsZ/_new  2023-04-06 15:55:41.428210653 +0200
@@ -1,9 +1,9 @@
 <?xml version="1.0"?>
 <services>
-  <service name="obs_scm" mode="disabled">
+  <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.4.13</param>
+    <param name="revision">refs/tags/0.4.14</param>
     <param name="versionformat">@PARENT_TAG@</param>
 <!--
     <param name="revision">master</param>
@@ -15,6 +15,6 @@
     <param name="file">*.tar</param>
     <param name="compression">xz</param>
   </service>
-  <service name="set_version" mode="disabled" />
+  <service name="set_version" mode="manual" />
 </services>
 

++++++ wireplumber-0.4.13.obscpio -> wireplumber-0.4.14.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/NEWS.rst 
new/wireplumber-0.4.14/NEWS.rst
--- old/wireplumber-0.4.13/NEWS.rst     2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/NEWS.rst     2023-03-09 16:37:42.000000000 +0100
@@ -1,8 +1,37 @@
-WirePlumber 0.4.13
+WirePlumber 0.4.14
 ~~~~~~~~~~~~~~~~~~
 
 Additions:
 
+  - Added support for managing Bluetooth-MIDI, complimenting the parts that
+    were merged in PipeWire recently (!453)
+
+  - Added a default volume configuration option for streams whose volume
+    has never been saved before; that allows starting new streams at a lower
+    volume than 100% by default, if desired (!480)
+
+  - Added support for managing link errors and propagating them to the
+    client(s) involved. This allows better error handling on the application
+    side in case a format cannot be negotiated - useful in video streams
+    (see !484, pipewire#2935)
+
+  - snd_aloop devices are now described as being "Loopback" devices
+    (pipewire#2214)
+
+  - ALSA nodes in the pro audio profile now get increased graph priority, so
+    that they are more likely to become the driver in the graph
+
+  - Added support for disabling libcamera nodes & devices with 
``node.disabled``
+    and ``device.disabled``, like it works for ALSA and V4L2 (#418)
+
+Past releases
+~~~~~~~~~~~~~
+
+WirePlumber 0.4.13
+..................
+
+Additions:
+
   - Added bluetooth SCO (HSP/HFP) hardware offload support, together with an
     example script that enables this functionality on the PinePhone
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/docs/rst/configuration/alsa.rst 
new/wireplumber-0.4.14/docs/rst/configuration/alsa.rst
--- old/wireplumber-0.4.13/docs/rst/configuration/alsa.rst      2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/docs/rst/configuration/alsa.rst      2023-03-09 
16:37:42.000000000 +0100
@@ -198,6 +198,21 @@
 restoring ports. It can, for example, restore previously saved volumes. Enable
 this here when the session manager does not handle port restore.
 
+.. code-block:: lua
+
+  ["api.acp.probe-rate"] = 48000
+
+Sets the samplerate used for probing the ALSA devices and collecting the 
profiles
+and ports.
+
+.. code-block:: lua
+
+  ["api.acp.pro-channels"] = 64
+
+Sets the number of channels to use when probing the Pro Audio profile. 
Normally,
+the maximum amount of channels will be used but with this setting this can be
+reduced, which can make it possible to use other samplerates on some devices.
+
 Some of the other properties that might be configured on devices:
 
 .. code-block:: lua
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/docs/rst/lua_api/lua_introduction.rst 
new/wireplumber-0.4.14/docs/rst/lua_api/lua_introduction.rst
--- old/wireplumber-0.4.13/docs/rst/lua_api/lua_introduction.rst        
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/docs/rst/lua_api/lua_introduction.rst        
2023-03-09 16:37:42.000000000 +0100
@@ -14,7 +14,9 @@
   - To implement the scripting engine
   - To implement lua-based :ref:`config files <config_lua>`
 
-This section is only documenting the API of the **scripting engine**
+This section is only documenting the API of the **scripting engine**. Scripts 
can be ran with the ``wpexec`` tool.
+
+Example scripts can be found in the `tests/examples` directory of the 
wireplumber source tree.
 
 Lua Reference
 -------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/lib/wp/spa-json.c 
new/wireplumber-0.4.14/lib/wp/spa-json.c
--- old/wireplumber-0.4.13/lib/wp/spa-json.c    2022-12-13 10:39:14.000000000 
+0100
+++ new/wireplumber-0.4.14/lib/wp/spa-json.c    2023-03-09 16:37:42.000000000 
+0100
@@ -391,9 +391,8 @@
 {
   size_t size = (strlen (value) * 4) + 2;
   gchar dst[size];
-  spa_json_encode_string (dst, sizeof(dst), value);
-  return wp_spa_json_new_from_builder (
-      wp_spa_json_builder_new_formatted ("%s", dst));
+  gint enc_size = spa_json_encode_string (dst, sizeof(dst), value);
+  return wp_spa_json_new_from_builder (wp_spa_json_builder_new (dst, 
enc_size));
 }
 
 /* Args is not a pointer in some architectures, so this needs to be a macro to
@@ -971,6 +970,14 @@
 }
 
 static void
+builder_add (WpSpaJsonBuilder *self, const gchar *data, size_t size)
+{
+  g_return_if_fail (self->max_size - self->size >= size + 1);
+  snprintf (self->data + self->size, size + 1, "%s", data);
+  self->size += size;
+}
+
+static void
 builder_add_json (WpSpaJsonBuilder *self, WpSpaJson *json)
 {
   g_return_if_fail (self->max_size - self->size >= json->size + 1);
@@ -990,10 +997,12 @@
 {
   size_t size = (strlen (key) * 4) + 3;
   gchar dst[size];
+  gint enc_size;
   ensure_separator (self, TRUE);
   ensure_allocated_max_size (self, size);
-  spa_json_encode_string (dst, sizeof(dst), key);
-  builder_add_formatted (self, "%s:", dst);
+  enc_size = spa_json_encode_string (dst, sizeof(dst), key);
+  builder_add (self, dst, enc_size);
+  builder_add (self, ":", 1);
 }
 
 /*!
@@ -1067,10 +1076,11 @@
 {
   size_t size = (strlen (value) * 4) + 2;
   gchar dst[size];
+  gint enc_size;
   ensure_separator (self, FALSE);
   ensure_allocated_max_size (self, size);
-  spa_json_encode_string (dst, sizeof(dst), value);
-  builder_add_formatted (self, "%s", dst);
+  enc_size = spa_json_encode_string (dst, sizeof(dst), value);
+  builder_add (self, dst, enc_size);
 }
 
 /*!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/meson.build 
new/wireplumber-0.4.14/meson.build
--- old/wireplumber-0.4.13/meson.build  2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/meson.build  2023-03-09 16:37:42.000000000 +0100
@@ -1,5 +1,5 @@
 project('wireplumber', ['c'],
-  version : '0.4.13',
+  version : '0.4.14',
   license : 'MIT',
   meson_version : '>= 0.59.0',
   default_options : [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/modules/module-lua-scripting/api/json.c 
new/wireplumber-0.4.14/modules/module-lua-scripting/api/json.c
--- old/wireplumber-0.4.13/modules/module-lua-scripting/api/json.c      
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/modules/module-lua-scripting/api/json.c      
2023-03-09 16:37:42.000000000 +0100
@@ -242,31 +242,33 @@
   luaL_checktype (L, 1, LUA_TTABLE);
 
   lua_pushnil (L);
-  while (lua_next (L, 1)) {
-    switch (lua_type (L, -1)) {
-      case LUA_TBOOLEAN:
-        wp_spa_json_builder_add_boolean (builder, lua_toboolean (L, -1));
-        break;
-      case LUA_TNUMBER:
-        if (lua_isinteger (L, -1))
-          wp_spa_json_builder_add_int (builder, lua_tointeger (L, -1));
-        else
-          wp_spa_json_builder_add_float (builder, lua_tonumber (L, -1));
-        break;
-      case LUA_TSTRING:
-        wp_spa_json_builder_add_string (builder, lua_tostring (L, -1));
-        break;
-      case LUA_TUSERDATA: {
-        WpSpaJson *json = wplua_checkboxed (L, -1, WP_TYPE_SPA_JSON);
-        wp_spa_json_builder_add_json (builder, json);
-        break;
+  while (lua_next (L, -2)) {
+    /* We only add table values with integer keys */
+    if (lua_isinteger (L, -2)) {
+      switch (lua_type (L, -1)) {
+        case LUA_TBOOLEAN:
+          wp_spa_json_builder_add_boolean (builder, lua_toboolean (L, -1));
+          break;
+        case LUA_TNUMBER:
+          if (lua_isinteger (L, -1))
+            wp_spa_json_builder_add_int (builder, lua_tointeger (L, -1));
+          else
+            wp_spa_json_builder_add_float (builder, lua_tonumber (L, -1));
+          break;
+        case LUA_TSTRING:
+          wp_spa_json_builder_add_string (builder, lua_tostring (L, -1));
+          break;
+        case LUA_TUSERDATA: {
+          WpSpaJson *json = wplua_checkboxed (L, -1, WP_TYPE_SPA_JSON);
+          wp_spa_json_builder_add_json (builder, json);
+          break;
+        }
+        default:
+          luaL_error (L, "Json does not support lua type ",
+              lua_typename(L, lua_type(L, -1)));
+          break;
       }
-      default:
-        luaL_error (L, "Json does not support lua type ",
-            lua_typename(L, lua_type(L, -1)));
-        break;
     }
-
     lua_pop (L, 1);
   }
 
@@ -285,30 +287,33 @@
 
   lua_pushnil (L);
   while (lua_next (L, -2)) {
-    wp_spa_json_builder_add_property (builder, lua_tostring (L, -2));
-
-    switch (lua_type (L, -1)) {
-      case LUA_TBOOLEAN:
-        wp_spa_json_builder_add_boolean (builder, lua_toboolean (L, -1));
-        break;
-      case LUA_TNUMBER:
-        if (lua_isinteger (L, -1))
-          wp_spa_json_builder_add_int (builder, lua_tointeger (L, -1));
-        else
-          wp_spa_json_builder_add_float (builder, lua_tonumber (L, -1));
-        break;
-      case LUA_TSTRING:
-        wp_spa_json_builder_add_string (builder, lua_tostring (L, -1));
-        break;
-      case LUA_TUSERDATA: {
-        WpSpaJson *json = wplua_checkboxed (L, -1, WP_TYPE_SPA_JSON);
-        wp_spa_json_builder_add_json (builder, json);
-        break;
+    /* We only add table values with string keys */
+    if (lua_type (L, -2) == LUA_TSTRING) {
+      wp_spa_json_builder_add_property (builder, lua_tostring (L, -2));
+
+      switch (lua_type (L, -1)) {
+        case LUA_TBOOLEAN:
+          wp_spa_json_builder_add_boolean (builder, lua_toboolean (L, -1));
+          break;
+        case LUA_TNUMBER:
+          if (lua_isinteger (L, -1))
+            wp_spa_json_builder_add_int (builder, lua_tointeger (L, -1));
+          else
+            wp_spa_json_builder_add_float (builder, lua_tonumber (L, -1));
+          break;
+        case LUA_TSTRING:
+          wp_spa_json_builder_add_string (builder, lua_tostring (L, -1));
+          break;
+        case LUA_TUSERDATA: {
+          WpSpaJson *json = wplua_checkboxed (L, -1, WP_TYPE_SPA_JSON);
+          wp_spa_json_builder_add_json (builder, json);
+          break;
+        }
+        default:
+          luaL_error (L, "Json does not support lua type ",
+              lua_typename(L, lua_type(L, -1)));
+          break;
       }
-      default:
-        luaL_error (L, "Json does not support lua type ",
-            lua_typename(L, lua_type(L, -1)));
-        break;
     }
 
     lua_pop (L, 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/modules/module-lua-scripting/api/pod.c 
new/wireplumber-0.4.14/modules/module-lua-scripting/api/pod.c
--- old/wireplumber-0.4.13/modules/module-lua-scripting/api/pod.c       
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/modules/module-lua-scripting/api/pod.c       
2023-03-09 16:37:42.000000000 +0100
@@ -549,7 +549,7 @@
       return 1;
     }
     default:
-      luaL_error (L, "Only numner and strings are valid for bytes pod");
+      luaL_error (L, "Only number and strings are valid for bytes pod");
       break;
   }
   return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/modules/module-lua-scripting/module.c 
new/wireplumber-0.4.14/modules/module-lua-scripting/module.c
--- old/wireplumber-0.4.13/modules/module-lua-scripting/module.c        
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/modules/module-lua-scripting/module.c        
2023-03-09 16:37:42.000000000 +0100
@@ -121,7 +121,7 @@
   export_core = g_object_get_data (G_OBJECT (core), "wireplumber.export-core");
   if (export_core) {
     lua_pushliteral (self->L, "wireplumber_export_core");
-    wplua_pushobject (self->L, export_core);
+    wplua_pushobject (self->L, g_object_ref (export_core));
     lua_settable (self->L, LUA_REGISTRYINDEX);
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/modules/module-si-standard-link.c 
new/wireplumber-0.4.14/modules/module-si-standard-link.c
--- old/wireplumber-0.4.13/modules/module-si-standard-link.c    2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/modules/module-si-standard-link.c    2023-03-09 
16:37:42.000000000 +0100
@@ -32,6 +32,13 @@
   guint n_async_ops_wait;
 };
 
+enum {
+  SIGNAL_LINK_ERROR,
+  LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 static void si_standard_link_link_init (WpSiLinkInterface * iface);
 
 G_DECLARE_FINAL_TYPE (WpSiStandardLink, si_standard_link, WP, SI_STANDARD_LINK,
@@ -215,6 +222,17 @@
   }
 }
 
+static void
+on_link_state_changed (WpLink *link, WpLinkState old_state,
+  WpLinkState new_state, WpSiStandardLink * self)
+{
+  if (new_state == WP_LINK_STATE_ERROR) {
+    const gchar *error_msg;
+    wp_link_get_state (link, &error_msg);
+    g_signal_emit_by_name (self, "link-error", error_msg);
+  }
+}
+
 struct port
 {
   guint32 node_id;
@@ -352,6 +370,9 @@
         WP_OBJECT_FEATURES_ALL & ~WP_LINK_FEATURE_ESTABLISHED, NULL,
         g_cclosure_new_object (
             (GCallback) on_link_activated, G_OBJECT (transition)));
+
+    g_signal_connect_object (link, "state-changed",
+      G_CALLBACK (on_link_state_changed), self, 0);
   }
   g_variant_iter_free (iter);
   return self->node_links->len > 0;
@@ -718,6 +739,10 @@
   si_class->get_associated_proxy = si_standard_link_get_associated_proxy;
   si_class->disable_active = si_standard_link_disable_active;
   si_class->enable_active = si_standard_link_enable_active;
+
+  signals[SIGNAL_LINK_ERROR] = g_signal_new (
+      "link-error", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
+      0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
 }
 
 static GVariant *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/po/de.po 
new/wireplumber-0.4.14/po/de.po
--- old/wireplumber-0.4.13/po/de.po     2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/po/de.po     2023-03-09 16:37:42.000000000 +0100
@@ -1,30 +1,30 @@
-# translation of pipewire.master-tx.de.po to
-# German translation of pipewire
-# Copyright (C) 2008 pipewire
-# This file is distributed under the same license as the pipewire package.
+# translation of WirePlumber
+# German translation of WirePlumber
+# Copyright (C) 2008 WirePlumber
+# This file is distributed under the same license as the WirePlumber package.
 #
 #
 # Fabian Affolter <f...@fedoraproject.org>, 2008-2009.
 # Micha Pietsch <bar...@fedoraproject.org>, 2008, 2009.
 # Hedda Peters <hpet...@redhat.com>, 2009, 2012.
 # Mario Blättermann <mario.blaetterm...@gmail.com>, 2016.
+# Jürgen Benvenuti <gastor...@posteo.org>, 2023.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: pipewire.master-tx.de\n"
-"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pipewire/wireplumber/";
-"issues/new\n"
-"POT-Creation-Date: 2022-04-09 15:19+0300\n"
-"PO-Revision-Date: 2021-01-09 11:36+0000\n"
-"Last-Translator: Tobias Weise <tobias.we...@web.de>\n"
-"Language-Team: German <https://translate.fedoraproject.org/projects/pipewire/";
-"pipewire/de/>\n"
+"Project-Id-Version: WirePlumber\n"
+"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pipewire/wireplumber/-/";
+"issues\n"
+"POT-Creation-Date: 2023-01-30 15:31+0000\n"
+"PO-Revision-Date: 2023-01-28 20:55+0100\n"
+"Last-Translator: Jürgen Benvenuti <gastor...@posteo.org>\n"
+"Language-Team: German <gnome...@gnome.org>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4\n"
+"X-Generator: Poedit 3.1.1\n"
 
 #. WirePlumber
 #.
@@ -34,6 +34,7 @@
 #. SPDX-License-Identifier: MIT
 #. Receive script arguments from config.lua
 #. ensure config.properties is not nil
+#. unique device/node name tables
 #. preprocess rules and create Interest objects
 #. applies properties from config.rules when asked to
 #. set the device id and spa factory name; REQUIRED, do not change
@@ -49,15 +50,68 @@
 #. ensure the node has a description
 #. also sanitize description, replace ':' with ' '
 #. add api.alsa.card.* properties for rule matching purposes
+#. apply VM overrides
 #. apply properties from config.rules
 #. create the node
 #. ensure the device has an appropriate name
 #. deduplicate devices with the same name
 #. ensure the device has a description
-#: src/scripts/monitors/alsa.lua:222
+#: src/scripts/monitors/alsa.lua:234
+msgid "Loopback"
+msgstr "Schleifenschaltung"
+
+#: src/scripts/monitors/alsa.lua:236
 msgid "Built-in Audio"
 msgstr "Internes Audio"
 
-#: src/scripts/monitors/alsa.lua:224
+#: src/scripts/monitors/alsa.lua:238
 msgid "Modem"
 msgstr "Modem"
+
+#. ensure the device has a nick
+#. set the icon name
+#. form factor -> icon
+#. apply properties from config.rules
+#. override the device factory to use ACP
+#. use device reservation, if available
+#. unlike pipewire-media-session, this logic here keeps the device
+#. acquired at all times and destroys it if someone else acquires
+#. create the device
+#. attempt to acquire again
+#. destroy the device
+#. TODO enable the jack device
+#. TODO disable the jack device
+#. create the device
+#. handle create-object to prepare device
+#. handle object-removed to destroy device reservations and recycle device name
+#. reset the name tables to make sure names are recycled
+#. activate monitor
+#. create the JACK device (for PipeWire to act as client to a JACK server)
+#. enable device reservation if requested
+#. if the reserve-device plugin is enabled, at the point of script execution
+#. it is expected to be connected. if it is not, assume the d-bus connection
+#. has failed and continue without it
+#. handle rd_plugin state changes to destroy and re-create the ALSA monitor in
+#. case D-Bus service is restarted
+#. create the monitor
+#. WirePlumber
+#.
+#. Copyright © 2021 Collabora Ltd.
+#. @author George Kiagiadakis <george.kiagiada...@collabora.com>
+#.
+#. SPDX-License-Identifier: MIT
+#. preprocess rules and create Interest objects
+#. applies properties from config.rules when asked to
+#. set the device id and spa factory name; REQUIRED, do not change
+#. set the default pause-on-idle setting
+#. set the node name
+#. sanitize name
+#. deduplicate nodes with the same name
+#. set the node description
+#: src/scripts/monitors/libcamera.lua:88
+msgid "Built-in Front Camera"
+msgstr "Interne vordere Kamera"
+
+#: src/scripts/monitors/libcamera.lua:90
+msgid "Built-in Back Camera"
+msgstr "Interne hintere Kamera"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/po/pl.po 
new/wireplumber-0.4.14/po/pl.po
--- old/wireplumber-0.4.13/po/pl.po     2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/po/pl.po     2023-03-09 16:37:42.000000000 +0100
@@ -1,15 +1,15 @@
 # Polish translation for wireplumber.
-# Copyright © 2008-2022 the wireplumber authors.
+# Copyright © 2008-2023 the wireplumber authors.
 # This file is distributed under the same license as the wireplumber package.
-# Piotr Drąg <piotrd...@gmail.com>, 2008, 2012-2022.
+# Piotr Drąg <piotrd...@gmail.com>, 2008, 2012-2023.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: wireplumber\n"
 "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pipewire/wireplumber/-/";
 "issues\n"
-"POT-Creation-Date: 2022-06-15 15:30+0000\n"
-"PO-Revision-Date: 2022-06-16 13:20+0200\n"
+"POT-Creation-Date: 2023-03-04 13:34+0000\n"
+"PO-Revision-Date: 2023-03-04 14:35+0100\n"
 "Last-Translator: Piotr Drąg <piotrd...@gmail.com>\n"
 "Language-Team: Polish <community-pol...@mozilla.org>\n"
 "Language: pl\n"
@@ -43,16 +43,21 @@
 #. ensure the node has a description
 #. also sanitize description, replace ':' with ' '
 #. add api.alsa.card.* properties for rule matching purposes
+#. apply VM overrides
 #. apply properties from config.rules
 #. create the node
 #. ensure the device has an appropriate name
 #. deduplicate devices with the same name
 #. ensure the device has a description
-#: src/scripts/monitors/alsa.lua:220
+#: src/scripts/monitors/alsa.lua:236
+msgid "Loopback"
+msgstr "Urządzenie zwrotne"
+
+#: src/scripts/monitors/alsa.lua:238
 msgid "Built-in Audio"
 msgstr "Wbudowany dźwięk"
 
-#: src/scripts/monitors/alsa.lua:222
+#: src/scripts/monitors/alsa.lua:240
 msgid "Modem"
 msgstr "Modem"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/po/uk.po 
new/wireplumber-0.4.14/po/uk.po
--- old/wireplumber-0.4.13/po/uk.po     2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/po/uk.po     2023-03-09 16:37:42.000000000 +0100
@@ -1,14 +1,14 @@
 # Copyright (C) 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the pipewire package.
 #
-# Yuri Chornoivan <yurc...@ukr.net>, 2009-2021, 2022.
+# Yuri Chornoivan <yurc...@ukr.net>, 2009-2021, 2022, 2023.
 msgid ""
 msgstr ""
 "Project-Id-Version: pipewire\n"
-"Report-Msgid-Bugs-To: 
https://gitlab.freedesktop.org/pipewire/wireplumber/-/is";
-"sues\n"
-"POT-Creation-Date: 2022-06-15 15:30+0000\n"
-"PO-Revision-Date: 2022-06-18 12:57+0300\n"
+"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pipewire/wireplumber/-/i";
+"ssues\n"
+"POT-Creation-Date: 2022-12-13 15:30+0000\n"
+"PO-Revision-Date: 2023-02-15 22:44+0200\n"
 "Last-Translator: Yuri Chornoivan <yurc...@ukr.net>\n"
 "Language-Team: Ukrainian <trans...@lists.fedoraproject.org>\n"
 "Language: uk\n"
@@ -43,16 +43,21 @@
 #. ensure the node has a description
 #. also sanitize description, replace ':' with ' '
 #. add api.alsa.card.* properties for rule matching purposes
+#. apply VM overrides
 #. apply properties from config.rules
 #. create the node
 #. ensure the device has an appropriate name
 #. deduplicate devices with the same name
 #. ensure the device has a description
-#: src/scripts/monitors/alsa.lua:220
+#: src/scripts/monitors/alsa.lua:234
+msgid "Loopback"
+msgstr "Петля"
+
+#: src/scripts/monitors/alsa.lua:236
 msgid "Built-in Audio"
 msgstr "Вбудоване аудіо"
 
-#: src/scripts/monitors/alsa.lua:222
+#: src/scripts/monitors/alsa.lua:238
 msgid "Modem"
 msgstr "Модем"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/src/config/bluetooth.conf 
new/wireplumber-0.4.14/src/config/bluetooth.conf
--- old/wireplumber-0.4.13/src/config/bluetooth.conf    2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/bluetooth.conf    2023-03-09 
16:37:42.000000000 +0100
@@ -68,6 +68,9 @@
 
   # Provides factories to make session manager objects.
   { name = libpipewire-module-session-manager }
+
+  # Provides factories to make SPA node objects.
+  { name = libpipewire-module-spa-node-factory }
 ]
 
 wireplumber.components = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/config/bluetooth.lua.d/30-bluez-midi-monitor.lua 
new/wireplumber-0.4.14/src/config/bluetooth.lua.d/30-bluez-midi-monitor.lua
--- old/wireplumber-0.4.13/src/config/bluetooth.lua.d/30-bluez-midi-monitor.lua 
1970-01-01 01:00:00.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/bluetooth.lua.d/30-bluez-midi-monitor.lua 
2023-03-09 16:37:42.000000000 +0100
@@ -0,0 +1,18 @@
+bluez_midi_monitor = {}
+bluez_midi_monitor.properties = {}
+bluez_midi_monitor.rules = {}
+
+function bluez_midi_monitor.enable()
+  if bluez_midi_monitor.enabled == false then
+    return
+  end
+
+  load_monitor("bluez-midi", {
+    properties = bluez_midi_monitor.properties,
+    rules = bluez_midi_monitor.rules,
+  })
+
+  if bluez_midi_monitor.properties["with-logind"] then
+    load_optional_module("logind")
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/config/bluetooth.lua.d/50-bluez-config.lua 
new/wireplumber-0.4.14/src/config/bluetooth.lua.d/50-bluez-config.lua
--- old/wireplumber-0.4.13/src/config/bluetooth.lua.d/50-bluez-config.lua       
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/bluetooth.lua.d/50-bluez-config.lua       
2023-03-09 16:37:42.000000000 +0100
@@ -11,7 +11,7 @@
 
   -- See bluez-hardware.conf for the hardware database.
 
-  -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this
+  -- Enabled headset roles (default: [ hfp_hf hfp_ag ]), this
   -- property only applies to native backend. Currently some headsets
   -- (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag
   -- enabled, disable either hsp_ag or hfp_ag to work around it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/config/bluetooth.lua.d/50-bluez-midi-config.lua 
new/wireplumber-0.4.14/src/config/bluetooth.lua.d/50-bluez-midi-config.lua
--- old/wireplumber-0.4.13/src/config/bluetooth.lua.d/50-bluez-midi-config.lua  
1970-01-01 01:00:00.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/bluetooth.lua.d/50-bluez-midi-config.lua  
2023-03-09 16:37:42.000000000 +0100
@@ -0,0 +1,42 @@
+-- BLE MIDI is currently disabled by default, because it conflicts with
+-- the SELinux policy on Fedora 37 and potentially other systems using
+-- SELinux. For a workaround, see
+-- 
https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/plugins/bluez5/README-MIDI.md
+bluez_midi_monitor.enabled = false
+
+bluez_midi_monitor.properties = {
+  -- Enable the logind module, which arbitrates which user will be allowed
+  -- to have bluetooth audio enabled at any given time (particularly useful
+  -- if you are using GDM as a display manager, as the gdm user also launches
+  -- pipewire and wireplumber).
+  -- This requires access to the D-Bus user session; disable if you are running
+  -- a system-wide instance of wireplumber.
+  ["with-logind"] = true,
+
+  -- List of MIDI server node names. Each node name given will create a new 
instance
+  -- of a BLE MIDI service. Typical BLE MIDI instruments have on service 
instance,
+  -- so adding more than one here may confuse some clients. The node property 
matching
+  -- rules below apply also to these servers.
+  --["servers"] = { "bluez_midi.server" },
+}
+
+bluez_midi_monitor.rules = {
+  -- An array of matches/actions to evaluate.
+  {
+    matches = {
+      {
+        -- Matches all nodes.
+        { "node.name", "matches", "bluez_midi.*" },
+      },
+    },
+    apply_properties = {
+      --["node.nick"] = "My Node",
+      --["priority.driver"] = 100,
+      --["priority.session"] = 100,
+      --["node.pause-on-idle"] = false,
+      --["session.suspend-timeout-seconds"] = 5,  -- 0 disables suspend
+      --["monitor.channel-volumes"] = false,
+      --["node.latency-offset-msec"] = -10,  -- delay (<0) input to reduce 
jitter
+    },
+  },
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/config/bluetooth.lua.d/90-enable-all.lua 
new/wireplumber-0.4.14/src/config/bluetooth.lua.d/90-enable-all.lua
--- old/wireplumber-0.4.13/src/config/bluetooth.lua.d/90-enable-all.lua 
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/bluetooth.lua.d/90-enable-all.lua 
2023-03-09 16:37:42.000000000 +0100
@@ -1 +1,2 @@
 bluez_monitor.enable()
+bluez_midi_monitor.enable()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/config/main.lua.d/40-stream-defaults.lua 
new/wireplumber-0.4.14/src/config/main.lua.d/40-stream-defaults.lua
--- old/wireplumber-0.4.13/src/config/main.lua.d/40-stream-defaults.lua 
2022-12-13 10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/main.lua.d/40-stream-defaults.lua 
2023-03-09 16:37:42.000000000 +0100
@@ -7,6 +7,10 @@
 
   -- whether to restore the last stream target or not
   ["restore-target"] = true,
+
+  -- the default channel volume for new streams whose props were never saved
+  -- previously. This is only used if "restore-props" is set to true.
+  ["default-channel-volume"] = 1.0,
 }
 
 stream_defaults.rules = {
@@ -20,6 +24,7 @@
   --   apply_properties = {
   --     ["state.restore-props"] = false,
   --     ["state.restore-target"] = false,
+  --     ["state.default-channel-volume"] = 0.5,
   --   },
   -- },
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/src/config/wireplumber.conf 
new/wireplumber-0.4.14/src/config/wireplumber.conf
--- old/wireplumber-0.4.13/src/config/wireplumber.conf  2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/config/wireplumber.conf  2023-03-09 
16:37:42.000000000 +0100
@@ -71,6 +71,9 @@
 
   # Provides factories to make session manager objects.
   { name = libpipewire-module-session-manager }
+
+  # Provides factories to make SPA node objects.
+  { name = libpipewire-module-spa-node-factory }
 ]
 
 wireplumber.components = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/src/scripts/monitors/alsa.lua 
new/wireplumber-0.4.14/src/scripts/monitors/alsa.lua
--- old/wireplumber-0.4.13/src/scripts/monitors/alsa.lua        2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/scripts/monitors/alsa.lua        2023-03-09 
16:37:42.000000000 +0100
@@ -82,7 +82,9 @@
 
     priority = priority - (tonumber(dev) * 16) - tonumber(subdev)
 
-    if profile:find("^analog%-") then
+    if profile:find("^pro%-") then
+      priority = priority + 500
+    elseif profile:find("^analog%-") then
       priority = priority + 9
     elseif profile:find("^iec958%-") then
       priority = priority + 8
@@ -228,8 +230,11 @@
     local d = nil
     local f = properties["device.form-factor"]
     local c = properties["device.class"]
+    local n = properties["api.alsa.card.name"]
 
-    if f == "internal" then
+    if n == "Loopback" then
+      d = I18n.gettext("Loopback")
+    elseif f == "internal" then
       d = I18n.gettext("Built-in Audio")
     elseif c == "modem" then
       d = I18n.gettext("Modem")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/scripts/monitors/bluez-midi.lua 
new/wireplumber-0.4.14/src/scripts/monitors/bluez-midi.lua
--- old/wireplumber-0.4.13/src/scripts/monitors/bluez-midi.lua  1970-01-01 
01:00:00.000000000 +0100
+++ new/wireplumber-0.4.14/src/scripts/monitors/bluez-midi.lua  2023-03-09 
16:37:42.000000000 +0100
@@ -0,0 +1,187 @@
+-- WirePlumber
+--
+-- Copyright © 2022 Pauli Virtanen
+--    @author Pauli Virtanen
+--
+-- SPDX-License-Identifier: MIT
+
+local config = ... or {}
+
+-- unique device/node name tables
+node_names_table = nil
+id_to_name_table = nil
+
+-- preprocess rules and create Interest objects
+for _, r in ipairs(config.rules or {}) do
+  r.interests = {}
+  for _, i in ipairs(r.matches) do
+    local interest_desc = { type = "properties" }
+    for _, c in ipairs(i) do
+      c.type = "pw"
+      table.insert(interest_desc, Constraint(c))
+    end
+    local interest = Interest(interest_desc)
+    table.insert(r.interests, interest)
+  end
+  r.matches = nil
+end
+
+-- applies properties from config.rules when asked to
+function rulesApplyProperties(properties)
+  for _, r in ipairs(config.rules or {}) do
+    if r.apply_properties then
+      for _, interest in ipairs(r.interests) do
+        if interest:matches(properties) then
+          for k, v in pairs(r.apply_properties) do
+            properties[k] = v
+          end
+        end
+      end
+    end
+  end
+end
+
+function setLatencyOffset(node, offset_msec)
+  if not offset_msec then
+    return
+  end
+
+  local props = { "Spa:Pod:Object:Param:Props", "Props" }
+  props.latencyOffsetNsec = tonumber(offset_msec) * 1000000
+
+  local param = Pod.Object(props)
+  Log.debug(param, "setting latency offset on " .. tostring(node))
+  node:set_param("Props", param)
+end
+
+function createNode(parent, id, type, factory, properties)
+  properties["factory.name"] = factory
+
+  -- set the node description
+  local desc = properties["node.description"]
+  -- sanitize description, replace ':' with ' '
+  properties["node.description"] = desc:gsub("(:)", " ")
+
+  -- set the node name
+  local name =
+      "bluez_midi." .. properties["api.bluez5.address"]
+  -- sanitize name
+  name = name:gsub("([^%w_%-%.])", "_")
+  -- deduplicate nodes with the same name
+  properties["node.name"] = name
+  for counter = 2, 99, 1 do
+    if node_names_table[properties["node.name"]] ~= true then
+      node_names_table[properties["node.name"]] = true
+      break
+    end
+    properties["node.name"] = name .. "." .. counter
+  end
+
+  properties["api.glib.mainloop"] = "true"
+
+  -- apply properties from config.rules
+  rulesApplyProperties(properties)
+
+  local latency_offset = properties["node.latency-offset-msec"]
+  properties["node.latency-offset-msec"] = nil
+
+  -- create the node
+  -- it doesn't necessarily need to be a local node,
+  -- the other Bluetooth parts run in the local process,
+  -- so it's consistent to have also this here
+  local node = LocalNode("spa-node-factory", properties)
+  node:activate(Feature.Proxy.BOUND)
+  parent:store_managed_object(id, node)
+  id_to_name_table[id] = properties["node.name"]
+  setLatencyOffset(node, latency_offset)
+end
+
+function createMonitor()
+  local monitor_props = {}
+  for k, v in pairs(config.properties or {}) do
+    monitor_props[k] = v
+  end
+  monitor_props["server"] = nil
+
+  monitor_props["api.glib.mainloop"] = "true"
+
+  local monitor = SpaDevice("api.bluez5.midi.enum", monitor_props)
+  if monitor then
+    monitor:connect("create-object", createNode)
+    monitor:connect("object-removed", function (parent, id)
+        node_names_table[id_to_name_table[id]] = nil
+        id_to_name_table[id] = nil
+    end)
+  else
+    Log.message("PipeWire's BlueZ MIDI SPA missing or broken. Bluetooth not 
supported.")
+    return nil
+  end
+
+  -- reset the name tables to make sure names are recycled
+  node_names_table = {}
+  id_to_name_table = {}
+
+  monitor:activate(Feature.SpaDevice.ENABLED)
+  return monitor
+end
+
+function createServers()
+  local props = config.properties or {}
+
+  if not props["servers"] then
+    return nil
+  end
+
+  local servers = {}
+  local i = 1
+
+  for k, v in pairs(props["servers"]) do
+    local node_props = {
+      ["node.name"] = v,
+      ["node.description"] = string.format(I18n.gettext("BLE MIDI %d"), i),
+      ["api.bluez5.role"] = "server",
+      ["factory.name"] = "api.bluez5.midi.node",
+      ["api.glib.mainloop"] = "true",
+    }
+    rulesApplyProperties(node_props)
+
+    local latency_offset = node_props["node.latency-offset-msec"]
+    node_props["node.latency-offset-msec"] = nil
+
+    local node = LocalNode("spa-node-factory", node_props)
+    if node then
+      node:activate(Feature.Proxy.BOUND)
+      table.insert(servers, node)
+      setLatencyOffset(node, latency_offset)
+    else
+      Log.message("Failed to create BLE MIDI server.")
+    end
+    i = i + 1
+  end
+
+  return servers
+end
+
+logind_plugin = Plugin.find("logind")
+if logind_plugin then
+  -- if logind support is enabled, activate
+  -- the monitor only when the seat is active
+  function startStopMonitor(seat_state)
+    Log.info(logind_plugin, "Seat state changed: " .. seat_state)
+
+    if seat_state == "active" then
+      monitor = createMonitor()
+      servers = createServers()
+    elseif monitor then
+      monitor:deactivate(Feature.SpaDevice.ENABLED)
+      monitor = nil
+      servers = nil
+    end
+  end
+
+  logind_plugin:connect("state-changed", function(p, s) startStopMonitor(s) 
end)
+  startStopMonitor(logind_plugin:call("get-state"))
+else
+  monitor = createMonitor()
+  servers = createServers()
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/wireplumber-0.4.13/src/scripts/monitors/libcamera.lua 
new/wireplumber-0.4.14/src/scripts/monitors/libcamera.lua
--- old/wireplumber-0.4.13/src/scripts/monitors/libcamera.lua   2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/scripts/monitors/libcamera.lua   2023-03-09 
16:37:42.000000000 +0100
@@ -114,6 +114,9 @@
 
   -- apply properties from config.rules
   rulesApplyProperties(properties)
+  if properties ["node.disabled"] then
+    return
+  end
 
   -- create the node
   local node = Node("spa-node-factory", properties)
@@ -148,7 +151,9 @@
 
   -- apply properties from config.rules
   rulesApplyProperties(properties)
-
+  if properties ["device.disabled"] then
+    return
+  end
   -- create the device
   local device = SpaDevice(factory, properties)
   if device then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/src/scripts/policy-node.lua 
new/wireplumber-0.4.14/src/scripts/policy-node.lua
--- old/wireplumber-0.4.13/src/scripts/policy-node.lua  2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/scripts/policy-node.lua  2023-03-09 
16:37:42.000000000 +0100
@@ -98,6 +98,32 @@
     return
   end
 
+  si_link:connect("link-error", function (_, error_msg)
+    local ids = {si_id}
+    if si_flags[si_id] ~= nil then
+      table.insert (ids, si_flags[si_id].peer_id)
+    end
+
+    for _, id in ipairs (ids) do
+      local si = linkables_om:lookup {
+        Constraint { "id", "=", id, type = "gobject" },
+      }
+      if si then
+        local node = si:get_associated_proxy ("node")
+        local client_id = node.properties["client.id"]
+        if client_id then
+          local client = clients_om:lookup {
+            Constraint { "bound-id", "=", client_id, type = "gobject" }
+          }
+          if client then
+            Log.info (node, "sending client error: " .. error_msg)
+            client:send_error (node["bound-id"], -32, error_msg)
+          end
+        end
+      end
+    end
+  end)
+
   -- register
   si_flags[si_id].peer_id = si_target.id
   si_flags[si_id].failed_peer_id = si_target.id
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/src/scripts/restore-stream.lua 
new/wireplumber-0.4.14/src/scripts/restore-stream.lua
--- old/wireplumber-0.4.13/src/scripts/restore-stream.lua       2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/src/scripts/restore-stream.lua       2023-03-09 
16:37:42.000000000 +0100
@@ -13,6 +13,7 @@
 config.properties = config.properties or {}
 config_restore_props = config.properties["restore-props"] or false
 config_restore_target = config.properties["restore-target"] or false
+config_default_channel_volume = config.properties["default-channel-volume"] or 
1.0
 
 -- preprocess rules and create Interest objects
 for _, r in ipairs(config.rules or {}) do
@@ -322,6 +323,31 @@
   end
 end
 
+function build_default_channel_volumes (node)
+  local def_vol = config_default_channel_volume
+  local channels = 2
+  local res = {}
+
+  local str = node.properties["state.default-channel-volume"]
+  if str ~= nil then
+    def_vol = tonumber (str)
+  end
+
+  for pod in node:iterate_params("Format") do
+    local pod_parsed = pod:parse()
+    if pod_parsed ~= nil then
+      channels = pod_parsed.properties.channels
+      break
+    end
+  end
+
+  while (#res < channels) do
+    table.insert(res, def_vol)
+  end
+
+  return res;
+end
+
 function restoreStream(node)
   local stream_props = node.properties
   rulesApplyProperties(stream_props)
@@ -332,23 +358,19 @@
   end
 
   if config_restore_props and stream_props["state.restore-props"] ~= false then
-    local needsRestore = false
     local props = { "Spa:Pod:Object:Param:Props", "Props" }
 
     local str = state_table[key_base .. ":volume"]
-    needsRestore = str and true or needsRestore
     props.volume = str and tonumber(str) or nil
 
     local str = state_table[key_base .. ":mute"]
-    needsRestore = str and true or needsRestore
     props.mute = str and (str == "true") or nil
 
     local str = state_table[key_base .. ":channelVolumes"]
-    needsRestore = str and true or needsRestore
-    props.channelVolumes = str and parseArray(str, tonumber) or nil
+    props.channelVolumes = str and parseArray(str, tonumber) or
+        build_default_channel_volumes (node)
 
     local str = state_table[key_base .. ":channelMap"]
-    needsRestore = str and true or needsRestore
     props.channelMap = str and parseArray(str) or nil
 
     -- convert arrays to Spa Pod
@@ -361,13 +383,10 @@
       props.channelMap = Pod.Array(props.channelMap)
     end
 
-    if needsRestore then
-      Log.info(node, "restore values from " .. key_base)
-
-      local param = Pod.Object(props)
-      Log.debug(param, "setting props on " .. tostring(node))
-      node:set_param("Props", param)
-    end
+    Log.info(node, "restore values from " .. key_base)
+    local param = Pod.Object(props)
+    Log.debug(param, "setting props on " .. tostring(node))
+    node:set_param("Props", param)
   end
 
   if config_restore_target and stream_props["state.restore-target"] ~= false 
then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wireplumber-0.4.13/tests/wplua/scripts/json.lua 
new/wireplumber-0.4.14/tests/wplua/scripts/json.lua
--- old/wireplumber-0.4.13/tests/wplua/scripts/json.lua 2022-12-13 
10:39:14.000000000 +0100
+++ new/wireplumber-0.4.14/tests/wplua/scripts/json.lua 2023-03-09 
16:37:42.000000000 +0100
@@ -102,6 +102,19 @@
 assert (json:get_data() == "[[{\"key1\":1}, {\"key2\":2}]]")
 assert (json:get_data() == json:to_string())
 
+table = {}
+table[1] = 1
+table[2] = 2
+table[3] = 3
+table["4"] = 4
+json = Json.Array (table)
+assert (json:is_array())
+val = json:parse ()
+assert (val[1] == 1)
+assert (val[2] == 2)
+assert (val[3] == 3)
+assert (val["4"] == nil)
+
 -- Object
 json = Json.Object {
     key1 = Json.Null(),
@@ -134,6 +147,19 @@
 assert (not val.key7.key_nested3[3])
 assert (val.key7["Key with spaces and (special % characters)"] == 50.0)
 
+table = {}
+table["1"] = 1
+table["2"] = 2
+table["3"] = 3
+table[4] = 4
+json = Json.Object (table)
+assert (json:is_object())
+val = json:parse ()
+assert (val["1"] == 1)
+assert (val["2"] == 2)
+assert (val["3"] == 3)
+assert (val[4] == nil)
+
 -- Raw
 json = Json.Raw ("[\"foo\", \"bar\"]")
 assert (json:is_array())

++++++ wireplumber.obsinfo ++++++
--- /var/tmp/diff_new_pack.AdpzsZ/_old  2023-04-06 15:55:41.780212641 +0200
+++ /var/tmp/diff_new_pack.AdpzsZ/_new  2023-04-06 15:55:41.784212664 +0200
@@ -1,5 +1,5 @@
 name: wireplumber
-version: 0.4.13
-mtime: 1670924354
-commit: 7cb1b8b92e96ebd1b7e632cda32715fed713d333
+version: 0.4.14
+mtime: 1678376262
+commit: 6d0c7f7b7f484b3cd2aaf2e2b3cc902c095b4946
 

Reply via email to