Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pipewire for openSUSE:Factory 
checked in at 2026-05-28 17:24:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pipewire (Old)
 and      /work/SRC/openSUSE:Factory/.pipewire.new.1937 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pipewire"

Thu May 28 17:24:01 2026 rev:156 rq:1355396 version:1.6.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes        2026-05-16 
19:25:27.108312773 +0200
+++ /work/SRC/openSUSE:Factory/.pipewire.new.1937/pipewire.changes      
2026-05-28 17:24:41.554139319 +0200
@@ -1,0 +2,39 @@
+Tue May 26 16:34:26 UTC 2026 - Antonio Larrosa <[email protected]>
+
+- Update to version 1.6.6
+  * This is a bugfix release that is API and ABI compatible with
+    the previous 1.6.x releases.
+  * Highlights
+    - Fix a bug in the server code that could leave snap clients
+      without sound. (#5270 (closed))
+    - Relax LADSPA path loading again, absolute paths are only
+      blocked in unsafe cases.
+    - Fix a volume restore issue in filter-graph when using custom
+      volume controls.
+    - Small fixes and improvements.
+  * PipeWire
+    - Fix the meta permission check on metadata.
+    - Make sure we don't accept too many fds.
+    - Fix potential race with buffer allocation and Suspend.
+      (#3547)
+  * SPA
+    - Relax LADSPA path loading. Absolute paths are allowed when
+      loading modules from a config file. They are now only blocked
+      when loading the pulse ladspa modules and filter-chains in
+      nodes because those can load ladspa plugins in other 
+      processes. (#5222 (closed))
+    - Fix a regression in the dither noise that was silent when no
+      input was available. (#5260 (closed))
+    - Fix volume initialization in filter-graph. (#5192 (closed))
+  * Pulse-server
+    - Fix a bug in the server code that could leave snap clients
+      without sound. (#5270 (closed))
+    - Be more careful with the stream suspend messages and only
+      send them when the stream is monitoring. (#5273 (closed))
+    - Fix monitor mode in pavucontrol.
+  * Tools
+    - Fix midifile SysEx writing in pw-cat and ensure the header
+      is written correctly on close.
+    - Make sure pw-cat does not try to convert Midi to UMP.
+
+-------------------------------------------------------------------

Old:
----
  pipewire-1.6.5.tar.xz

New:
----
  pipewire-1.6.6.tar.xz

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

Other differences:
------------------
++++++ pipewire.spec ++++++
--- /var/tmp/diff_new_pack.JGLJ2z/_old  2026-05-28 17:24:43.158205717 +0200
+++ /var/tmp/diff_new_pack.JGLJ2z/_new  2026-05-28 17:24:43.158205717 +0200
@@ -71,7 +71,7 @@
 %bcond_with aptx
 
 Name:           pipewire
-Version:        1.6.5
+Version:        1.6.6
 Release:        0
 Summary:        A Multimedia Framework designed to be an audio and video 
server and more
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.JGLJ2z/_old  2026-05-28 17:24:43.198207372 +0200
+++ /var/tmp/diff_new_pack.JGLJ2z/_new  2026-05-28 17:24:43.202207538 +0200
@@ -3,7 +3,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param 
name="url">https://gitlab.freedesktop.org/pipewire/pipewire.git</param>
-    <param name="revision">1.6.5</param>
+    <param name="revision">1.6.6</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <!--
     <param name="revision">636cbae9b6cebc4ba55903e2a686f4c4a2bd4193</param>

++++++ pipewire-1.6.5.tar.xz -> pipewire-1.6.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/NEWS new/pipewire-1.6.6/NEWS
--- old/pipewire-1.6.5/NEWS     2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/NEWS     2026-05-26 10:09:28.000000000 +0200
@@ -1,3 +1,46 @@
+# PipeWire 1.6.6 (2026-05-26)
+
+This is a bugfix release that is API and ABI compatible with the previous
+1.6.x releases.
+
+## Highlights
+  - Fix a bug in the server code that could leave snap clients without
+    sound. (#5270)
+  - Relax LADSPA path loading again, absolute paths are only blocked in
+    unsafe cases.
+  - Fix a volume restore issue in filter-graph when using custom volume
+    controls.
+  - Small fixes and improvements.
+
+
+## PipeWire
+  - Fix the meta permission check on metadata.
+  - Make sure we don't accept too many fds.
+  - Fix potential race with buffer allocation and Suspend. (#3547)
+
+## SPA
+  - Relax LADSPA path loading. Absolute paths are allowed when loading
+    modules from a config file. They are now only blocked when loading
+    the pulse ladspa modules and filter-chains in nodes because those
+    can load ladspa plugins in other processes. (#5222)
+  - Fix a regression in the dither noise that was silent when no input
+    was available. (#5260)
+  - Fix volume initialization in filter-graph. (#5192)
+
+## Pulse-server
+  - Fix a bug in the server code that could leave snap clients without
+    sound. (#5270)
+  - Be more careful with the stream suspend messages and only send them
+    when the stream is monitoring. (#5273)
+  - Fix monitor mode in pavucontrol.
+
+## Tools
+  - Fix midifile SysEx writing in pw-cat and ensure the header is written
+    correctly on close.
+  - Make sure pw-cat does not try to convert Midi to UMP.
+
+Older versions:
+
 # PipeWire 1.6.5 (2026-05-13)
 
 This is a bugfix release that is API and ABI compatible with the previous
@@ -30,9 +73,6 @@
 ## Pulse-server
   - A whole bunch of extra security checks and hardening fixes.
 
-
-Older versions:
-
 # PipeWire 1.6.4 (2026-04-22)
 
 This is a bugfix release that is API and ABI compatible with the previous
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/meson.build 
new/pipewire-1.6.6/meson.build
--- old/pipewire-1.6.5/meson.build      2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/meson.build      2026-05-26 10:09:28.000000000 +0200
@@ -1,5 +1,5 @@
 project('pipewire', ['c' ],
-  version : '1.6.5',
+  version : '1.6.6',
   license : [ 'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' ],
   meson_version : '>= 0.61.1',
   default_options : [ 'warning_level=3',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/spa/plugins/audioconvert/audioconvert.c 
new/pipewire-1.6.6/spa/plugins/audioconvert/audioconvert.c
--- old/pipewire-1.6.5/spa/plugins/audioconvert/audioconvert.c  2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/spa/plugins/audioconvert/audioconvert.c  2026-05-26 
10:09:28.000000000 +0200
@@ -1417,6 +1417,7 @@
                                &SPA_DICT_ITEMS(
                                        SPA_DICT_ITEM(SPA_KEY_LIBRARY_NAME, 
"filter-graph/libspa-filter-graph"),
                                        SPA_DICT_ITEM("clock.quantum-limit", 
qlimit),
+                                       SPA_DICT_ITEM("library.filter-path", 
"true"),
                                        SPA_DICT_ITEM("filter.graph", graph)));
                if (new_handle == NULL)
                        goto error;
@@ -2113,8 +2114,8 @@
        if ((res = convert_init(&in->conv)) < 0)
                return res;
 
-       spa_log_debug(this->log, "%p: got converter features %08x:%08x 
passthrough:%d remap:%d %s", this,
-                       this->cpu_flags, in->conv.cpu_flags, 
in->conv.is_passthrough,
+       spa_log_debug(this->log, "%p: got converter features %08x:%08x 
flags:%08x remap:%d %s", this,
+                       this->cpu_flags, in->conv.cpu_flags, in->conv.flags,
                        remap, in->conv.func_name);
 
        return 0;
@@ -2410,9 +2411,9 @@
                return res;
 
        spa_log_debug(this->log, "%p: got converter features %08x:%08x 
quant:%d:%d"
-                       " passthrough:%d remap:%d %s", this,
+                       " flags:%08x remap:%d %s", this,
                        this->cpu_flags, out->conv.cpu_flags, out->conv.method,
-                       out->conv.noise_bits, out->conv.is_passthrough, remap, 
out->conv.func_name);
+                       out->conv.noise_bits, out->conv.flags, remap, 
out->conv.func_name);
 
        return 0;
 }
@@ -3571,7 +3572,7 @@
        } else {
                dst = c->datas[s->out_idx];
        }
-       if (c->empty && dir->conv.clear)
+       if (c->empty && dir->conv.clear && 
convert_is_clear_on_empty(&dir->conv))
                convert_clear(&dir->conv, dst, c->n_samples);
        else
                convert_process(&dir->conv, dst, (const 
void**)c->datas[s->in_idx], c->n_samples);
@@ -3685,7 +3686,7 @@
        struct dir *dir = &impl->dir[SPA_DIRECTION_OUTPUT];
        void *remap_datas[MAX_PORTS], **src;
 
-       spa_log_trace_fp(impl->log, "%p: output convert %d", impl, 
c->n_samples);
+       spa_log_trace_fp(impl->log, "%p: output convert %d %d", impl, 
c->n_samples, c->empty);
        if (dir->need_remap) {
                uint32_t i;
                for (i = 0; i < dir->conv.n_channels; i++) {
@@ -3696,7 +3697,7 @@
        } else {
                src = c->datas[s->in_idx];
        }
-       if (c->empty && dir->conv.clear)
+       if (c->empty && dir->conv.clear && 
convert_is_clear_on_empty(&dir->conv))
                convert_clear(&dir->conv, c->datas[s->out_idx], c->n_samples);
        else
                convert_process(&dir->conv, c->datas[s->out_idx], (const void 
**)src, c->n_samples);
@@ -3733,11 +3734,11 @@
 
        /* set bits for things we need to do */
        dir = &this->dir[SPA_DIRECTION_INPUT];
-       SPA_FLAG_UPDATE(ctx->bits, SRC_CONVERT_BIT, !dir->conv.is_passthrough);
+       SPA_FLAG_UPDATE(ctx->bits, SRC_CONVERT_BIT, 
!convert_is_passthrough(&dir->conv));
        in_need_remap = dir->need_remap;
 
        dir = &this->dir[SPA_DIRECTION_OUTPUT];
-       SPA_FLAG_UPDATE(ctx->bits, DST_CONVERT_BIT, !dir->conv.is_passthrough);
+       SPA_FLAG_UPDATE(ctx->bits, DST_CONVERT_BIT, 
!convert_is_passthrough(&dir->conv));
        out_need_remap = dir->need_remap;
 
        this->resample_passthrough = resample_is_passthrough(this);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/spa/plugins/audioconvert/fmt-ops.c 
new/pipewire-1.6.6/spa/plugins/audioconvert/fmt-ops.c
--- old/pipewire-1.6.5/spa/plugins/audioconvert/fmt-ops.c       2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/spa/plugins/audioconvert/fmt-ops.c       2026-05-26 
10:09:28.000000000 +0200
@@ -630,7 +630,8 @@
        for (i = 0; i < RANDOM_SIZE; i++)
                conv->random[i] = random();
 
-       conv->is_passthrough = conv->src_fmt == conv->dst_fmt;
+       SPA_FLAG_UPDATE(conv->flags, CONVERT_FLAG_CLEAR_ON_EMPTY, 
conv->noise_bits == 0);
+       SPA_FLAG_UPDATE(conv->flags, CONVERT_FLAG_PASSTHROUGH, conv->src_fmt == 
conv->dst_fmt);
        conv->cpu_flags = info->cpu_flags;
        conv->update_noise = ninfo->noise;
        conv->process = info->process;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/spa/plugins/audioconvert/fmt-ops.h 
new/pipewire-1.6.6/spa/plugins/audioconvert/fmt-ops.h
--- old/pipewire-1.6.5/spa/plugins/audioconvert/fmt-ops.h       2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/spa/plugins/audioconvert/fmt-ops.h       2026-05-26 
10:09:28.000000000 +0200
@@ -221,7 +221,9 @@
        uint32_t cpu_flags;
        const char *func_name;
 
-       unsigned int is_passthrough:1;
+#define CONVERT_FLAG_PASSTHROUGH       (1u<<0)
+#define CONVERT_FLAG_CLEAR_ON_EMPTY    (1u<<1)
+       uint32_t flags;
 
        float scale;
        uint32_t *random;
@@ -282,6 +284,9 @@
 #define convert_clear(conv,...)                (conv)->clear(conv, __VA_ARGS__)
 #define convert_free(conv)             (conv)->free(conv)
 
+#define convert_is_passthrough(conv)   SPA_FLAG_IS_SET((conv)->flags, 
CONVERT_FLAG_PASSTHROUGH)
+#define convert_is_clear_on_empty(conv)        SPA_FLAG_IS_SET((conv)->flags, 
CONVERT_FLAG_CLEAR_ON_EMPTY)
+
 #define DEFINE_NOISE_FUNCTION(name,arch)                               \
 void conv_noise_##name##_##arch(struct convert *conv, float *noise,    \
                                        uint32_t n_samples)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/spa/plugins/filter-graph/filter-graph.c 
new/pipewire-1.6.6/spa/plugins/filter-graph/filter-graph.c
--- old/pipewire-1.6.5/spa/plugins/filter-graph/filter-graph.c  2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/spa/plugins/filter-graph/filter-graph.c  2026-05-26 
10:09:28.000000000 +0200
@@ -230,6 +230,7 @@
        uint32_t quantum_limit;
        uint32_t max_align;
        long unsigned rate;
+       bool filter_path;
 
        struct spa_list plugin_list;
 
@@ -739,6 +740,9 @@
                }
                v = v * (vol->max[n_port] - vol->min[n_port]) + 
vol->min[n_port];
 
+               p->control_initialized = true;
+               p->control_current = v;
+
                n_hndl = SPA_MAX(1u, p->node->n_hndl);
                res += port_id_set_control_value(p, i % n_hndl, v);
        }
@@ -884,7 +888,7 @@
        struct spa_handle *hndl = NULL;
        struct plugin *plugin;
        char module[PATH_MAX];
-       char factory_name[256], dsp_ptr[256];
+       char factory_name[256], dsp_ptr[256], filter[16];
        void *iface;
        int res;
 
@@ -902,11 +906,14 @@
                        "filter.graph.plugin.%s", type);
        spa_scnprintf(dsp_ptr, sizeof(dsp_ptr),
                        "pointer:%p", impl->dsp);
+       spa_scnprintf(filter, sizeof(filter),
+                       "%s", impl->filter_path ? "true" : "false");
 
        hndl = spa_plugin_loader_load(impl->loader, factory_name,
                        &SPA_DICT_ITEMS(
                                SPA_DICT_ITEM(SPA_KEY_LIBRARY_NAME, module),
                                SPA_DICT_ITEM("filter.graph.path", path),
+                               SPA_DICT_ITEM("library.filter-path", filter),
                                SPA_DICT_ITEM("filter.graph.audio.dsp", 
dsp_ptr)));
 
        if (hndl == NULL) {
@@ -2400,6 +2407,8 @@
                        spa_atou32(s, &impl->info.n_inputs, 0);
                if (spa_streq(k, "filter-graph.n_outputs"))
                        spa_atou32(s, &impl->info.n_outputs, 0);
+               if (spa_streq(k, "library.filter-path"))
+                       impl->filter_path = spa_atob(s);
        }
        if (impl->quantum_limit == 0)
                return -EINVAL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/spa/plugins/filter-graph/plugin_ladspa.c 
new/pipewire-1.6.6/spa/plugins/filter-graph/plugin_ladspa.c
--- old/pipewire-1.6.5/spa/plugins/filter-graph/plugin_ladspa.c 2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/spa/plugins/filter-graph/plugin_ladspa.c 2026-05-26 
10:09:28.000000000 +0200
@@ -21,6 +21,7 @@
 struct plugin {
        struct spa_handle handle;
        struct spa_fga_plugin plugin;
+       bool filter_path;
 
        struct spa_log *log;
 
@@ -233,13 +234,13 @@
        return s;
 }
 
-static void make_search_paths(const char **path, const char **search_dirs)
+static void make_search_paths(const char **path, const char **search_dirs, 
bool filter)
 {
-       const char *p;
-
-       while ((p = strstr(*path, "../")) != NULL)
-               *path = p + 3;
-
+       if (filter) {
+               const char *p;
+               while ((p = strstr(*path, "../")) != NULL)
+                       *path = p + 3;
+       }
        *search_dirs = getenv("LADSPA_PATH");
        if (!*search_dirs)
                *search_dirs = "/usr/lib64/ladspa:/usr/lib/ladspa:" LIBDIR;
@@ -252,6 +253,8 @@
        char filename[PATH_MAX];
        size_t len;
 
+       if (!impl->filter_path && path[0] == '/')
+               return ladspa_handle_load_by_path(impl, path);
        /*
         * set the errno for the case when `ladspa_handle_load_by_path()`
         * is never called, which can only happen if the supplied
@@ -337,11 +340,13 @@
                const char *s = info->items[i].value;
                if (spa_streq(k, "filter.graph.path"))
                        path = s;
+               else if (spa_streq(k, "library.filter-path"))
+                       impl->filter_path = spa_atob(s);
        }
        if (path == NULL)
                return -EINVAL;
 
-       make_search_paths(&path, &search_dirs);
+       make_search_paths(&path, &search_dirs, impl->filter_path);
 
        if ((res = load_ladspa_plugin(impl, path, search_dirs)) < 0) {
                spa_log_error(impl->log, "failed to load plugin '%s' in '%s': 
%s",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-native/connection.c 
new/pipewire-1.6.6/src/modules/module-protocol-native/connection.c
--- old/pipewire-1.6.5/src/modules/module-protocol-native/connection.c  
2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/src/modules/module-protocol-native/connection.c  
2026-05-26 10:09:28.000000000 +0200
@@ -538,7 +538,8 @@
        size -= impl->hdr_size;
        buf->msg.fds = &buf->fds[buf->fds_offset];
 
-       if (buf->msg.n_fds + buf->fds_offset > buf->n_fds)
+       if (buf->msg.n_fds > MAX_FDS ||
+           buf->msg.n_fds + buf->fds_offset > buf->n_fds)
                return -EPROTO;
 
        if (size < len)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c
 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c
--- 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c
   2026-05-13 16:58:43.000000000 +0200
+++ 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c
   2026-05-26 10:09:28.000000000 +0200
@@ -200,6 +200,7 @@
        } else {
                pw_properties_set(props, PW_KEY_NODE_DESCRIPTION, str);
        }
+       pw_properties_set(props, "library.filter-path", "true");
 
        if ((str = pw_properties_get(props, "master")) != NULL ||
            (str = pw_properties_get(props, "sink_master")) != NULL) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/modules/module-ladspa-source.c
 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/modules/module-ladspa-source.c
--- 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/modules/module-ladspa-source.c
 2026-05-13 16:58:43.000000000 +0200
+++ 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/modules/module-ladspa-source.c
 2026-05-26 10:09:28.000000000 +0200
@@ -200,6 +200,7 @@
        } else {
                pw_properties_set(props, PW_KEY_NODE_DESCRIPTION, str);
        }
+       pw_properties_set(props, "library.filter-path", "true");
 
        if ((str = pw_properties_get(props, "master")) != NULL ||
            (str = pw_properties_get(props, "source_master")) != NULL) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/pulse-server.c 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/pulse-server.c
--- old/pipewire-1.6.5/src/modules/module-protocol-pulse/pulse-server.c 
2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/src/modules/module-protocol-pulse/pulse-server.c 
2026-05-26 10:09:28.000000000 +0200
@@ -1164,16 +1164,16 @@
                break;
        }
 
-       /* Don't emit suspended if we are creating a corked stream, as that 
will have a quick
-        * RUNNING/SUSPENDED transition for initial negotiation */
+       /* Only emit suspended if we are created and not a corked stream, this 
means the
+        * paused on our stream needs to be caused by the sink suspend or an 
unlink. */
        if (stream->create_tag == SPA_ID_INVALID && !stream->corked) {
                if (old == PW_STREAM_STATE_PAUSED && state == 
PW_STREAM_STATE_STREAMING &&
-                   stream->is_suspended) {
+                   stream->dont_inhibit_auto_suspend && stream->is_suspended) {
                        stream_send_suspended(stream, false);
                        stream->is_suspended = false;
                }
                if (old == PW_STREAM_STATE_STREAMING && state == 
PW_STREAM_STATE_PAUSED &&
-                   !stream->is_suspended) {
+                   stream->dont_inhibit_auto_suspend && !stream->is_suspended) 
{
                        if (stream->fail_on_suspend) {
                                stream->killed = true;
                                destroy_stream = true;
@@ -1790,6 +1790,7 @@
        stream->is_underrun = true;
        stream->underrun_for = -1;
        stream->fail_on_suspend = fail_on_suspend;
+       stream->dont_inhibit_auto_suspend = dont_inhibit_auto_suspend;
 
        pw_properties_set(props, "pulse.corked", corked ? "true" : "false");
 
@@ -2066,6 +2067,7 @@
        stream->muted = muted;
        stream->muted_set = muted_set;
        stream->fail_on_suspend = fail_on_suspend;
+       stream->dont_inhibit_auto_suspend = dont_inhibit_auto_suspend;
 
        if (client->quirks & QUIRK_REMOVE_CAPTURE_DONT_MOVE)
                no_move = false;
@@ -2110,10 +2112,10 @@
                        pw_properties_set(props,
                                        PW_KEY_TARGET_OBJECT, source_name);
                }
-               if (is_monitor)
-                       pw_properties_set(props,
-                                       PW_KEY_STREAM_CAPTURE_SINK, "true");
        }
+       if (is_monitor)
+               pw_properties_set(props,
+                               PW_KEY_STREAM_CAPTURE_SINK, "true");
        if (dont_inhibit_auto_suspend)
                pw_properties_set(props, PW_KEY_NODE_PASSIVE, "true");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/server.c 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/server.c
--- old/pipewire-1.6.5/src/modules/module-protocol-pulse/server.c       
2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/src/modules/module-protocol-pulse/server.c       
2026-05-26 10:09:28.000000000 +0200
@@ -444,10 +444,10 @@
 
 #ifdef SO_PRIORITY
                val = 6;
-               if (setsockopt(client_fd, SOL_SOCKET, SO_PRIORITY, &val, 
sizeof(val)) < 0)
+               if (setsockopt(client->source->fd, SOL_SOCKET, SO_PRIORITY, 
&val, sizeof(val)) < 0)
                        pw_log_warn("setsockopt(SO_PRIORITY) failed: %m");
 #endif
-               pid = get_client_pid(client, client_fd);
+               pid = get_client_pid(client, client->source->fd);
                if (pid != 0 && pw_check_flatpak(pid, &app_id, &instance_id, 
&devices) == 1) {
                        /*
                         * XXX: we should really use Portal client access here
@@ -483,7 +483,7 @@
                }
                // check SNAP permissions
 #ifdef HAVE_SNAP
-               snap_access = pw_snap_get_audio_permissions(client, client_fd, 
&snap_app_id);
+               snap_access = pw_snap_get_audio_permissions(client, 
client->source->fd, &snap_app_id);
                if ((snap_access & PW_SANDBOX_ACCESS_NOT_A_SANDBOX) == 0) {
                        pw_properties_set(client->props, PW_KEY_SNAP_ID, 
snap_app_id);
 
@@ -500,12 +500,12 @@
        else if (server->addr.ss_family == AF_INET || server->addr.ss_family == 
AF_INET6) {
 
                val = 1;
-               if (setsockopt(client_fd, IPPROTO_TCP, TCP_NODELAY, &val, 
sizeof(val)) < 0)
+               if (setsockopt(client->source->fd, IPPROTO_TCP, TCP_NODELAY, 
&val, sizeof(val)) < 0)
                        pw_log_warn("setsockopt(TCP_NODELAY) failed: %m");
 
                if (server->addr.ss_family == AF_INET) {
                        val = IPTOS_LOWDELAY;
-                       if (setsockopt(client_fd, IPPROTO_IP, IP_TOS, &val, 
sizeof(val)) < 0)
+                       if (setsockopt(client->source->fd, IPPROTO_IP, IP_TOS, 
&val, sizeof(val)) < 0)
                                pw_log_warn("setsockopt(IP_TOS) failed: %m");
                }
                if (client_access == NULL)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.6.5/src/modules/module-protocol-pulse/stream.h 
new/pipewire-1.6.6/src/modules/module-protocol-pulse/stream.h
--- old/pipewire-1.6.5/src/modules/module-protocol-pulse/stream.h       
2026-05-13 16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/src/modules/module-protocol-pulse/stream.h       
2026-05-26 10:09:28.000000000 +0200
@@ -101,6 +101,7 @@
        unsigned int is_paused:1;
        unsigned int fail_on_suspend:1;
        unsigned int is_suspended:1;
+       unsigned int dont_inhibit_auto_suspend:1;
 };
 
 struct stream *stream_new(struct client *client, enum stream_type type, 
uint32_t create_tag,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/src/pipewire/impl-metadata.c 
new/pipewire-1.6.6/src/pipewire/impl-metadata.c
--- old/pipewire-1.6.5/src/pipewire/impl-metadata.c     2026-05-13 
16:58:43.000000000 +0200
+++ new/pipewire-1.6.6/src/pipewire/impl-metadata.c     2026-05-26 
10:09:28.000000000 +0200
@@ -407,7 +407,7 @@
        struct pw_impl_client *client = pw_resource_get_client(resource);
        int res;
 
-       if ((res = pw_impl_client_check_permissions(client, subject, 
PW_PERM_R)) < 0)
+       if ((res = pw_impl_client_check_permissions(client, subject, PW_PERM_R 
| PW_PERM_M)) < 0)
                goto error;
 
        pw_metadata_set_property(impl->metadata, subject, key, type, value);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/src/pipewire/impl-node.c 
new/pipewire-1.6.6/src/pipewire/impl-node.c
--- old/pipewire-1.6.5/src/pipewire/impl-node.c 2026-05-13 16:58:43.000000000 
+0200
+++ new/pipewire-1.6.6/src/pipewire/impl-node.c 2026-05-26 10:09:28.000000000 
+0200
@@ -554,16 +554,18 @@
                if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, 
NULL)) < 0)
                        pw_log_warn("%p: error unset format input: %s",
                                        this, spa_strerror(res));
-               /* force CONFIGURE in case of async */
-               p->state = PW_IMPL_PORT_STATE_CONFIGURE;
+               /* force CONFIGURE in case of async, use update_state to
+                * notify links so they can cancel pending work */
+               pw_impl_port_update_state(p, PW_IMPL_PORT_STATE_CONFIGURE, 0, 
NULL);
        }
 
        spa_list_for_each(p, &this->output_ports, link) {
                if ((res = pw_impl_port_set_param(p, SPA_PARAM_Format, 0, 
NULL)) < 0)
                        pw_log_warn("%p: error unset format output: %s",
                                        this, spa_strerror(res));
-               /* force CONFIGURE in case of async */
-               p->state = PW_IMPL_PORT_STATE_CONFIGURE;
+               /* force CONFIGURE in case of async, use update_state to
+                * notify links so they can cancel pending work */
+               pw_impl_port_update_state(p, PW_IMPL_PORT_STATE_CONFIGURE, 0, 
NULL);
        }
 
        node_update_state(this, PW_NODE_STATE_SUSPENDED, 0, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/src/tools/midifile.c 
new/pipewire-1.6.6/src/tools/midifile.c
--- old/pipewire-1.6.5/src/tools/midifile.c     2026-05-13 16:58:43.000000000 
+0200
+++ new/pipewire-1.6.6/src/tools/midifile.c     2026-05-26 10:09:28.000000000 
+0200
@@ -209,21 +209,24 @@
        return res;
 }
 
-static inline int write_n(FILE *file, const void *buf, int count)
+static inline int write_n(struct midi_file *mf, const void *buf, int count)
 {
-       return fwrite(buf, 1, count, file) == (size_t)count ? count : -errno;
+       if (fwrite(buf, 1, count, mf->file) != (size_t)count)
+               return -errno;
+       mf->pos += count;
+       return count;
 }
 
-static inline int write_be16(FILE *file, uint16_t val)
+static inline int write_be16(struct midi_file *mf, uint16_t val)
 {
        uint8_t buf[2] = { val >> 8, val };
-       return write_n(file, buf, 2);
+       return write_n(mf, buf, 2);
 }
 
-static inline int write_be32(FILE *file, uint32_t val)
+static inline int write_be32(struct midi_file *mf, uint32_t val)
 {
        uint8_t buf[4] = { val >> 24, val >> 16, val >> 8, val };
-       return write_n(file, buf, 4);
+       return write_n(mf, buf, 4);
 }
 
 #define CHECK_RES(expr) if ((res = (expr)) < 0) return res
@@ -233,17 +236,18 @@
        struct midi_track *tr = &mf->tracks[0];
        int res;
 
-       mf_seek(mf, 0);
+       if ((res = mf_seek(mf, 0)) < 0)
+               return -res;
 
        mf->length = 6;
-       CHECK_RES(write_n(mf->file, "MThd", 4));
-       CHECK_RES(write_be32(mf->file, mf->length));
-       CHECK_RES(write_be16(mf->file, mf->info.format));
-       CHECK_RES(write_be16(mf->file, mf->info.ntracks));
-       CHECK_RES(write_be16(mf->file, mf->info.division));
+       CHECK_RES(write_n(mf, "MThd", 4));
+       CHECK_RES(write_be32(mf, mf->length));
+       CHECK_RES(write_be16(mf, mf->info.format));
+       CHECK_RES(write_be16(mf, mf->info.ntracks));
+       CHECK_RES(write_be16(mf, mf->info.division));
 
-       CHECK_RES(write_n(mf->file, "MTrk", 4));
-       CHECK_RES(write_be32(mf->file, tr->size));
+       CHECK_RES(write_n(mf, "MTrk", 4));
+       CHECK_RES(write_be32(mf, tr->size));
 
        return 0;
 }
@@ -314,7 +318,7 @@
 
        if (mf->mode == 2) {
                uint8_t buf[4] = { 0x00, 0xff, 0x2f, 0x00 };
-               CHECK_RES(write_n(mf->file, buf, 4));
+               CHECK_RES(write_n(mf, buf, 4));
                mf->tracks[0].size += 4;
                CHECK_RES(write_headers(mf));
        } else if (mf->mode != 1)
@@ -490,7 +494,7 @@
        }
         do  {
                b = buffer & 0xff;
-               CHECK_RES(write_n(mf->file, &b, 1));
+               CHECK_RES(write_n(mf, &b, 1));
                tr->size++;
                buffer >>= 8;
        } while (b & 0x80);
@@ -502,10 +506,10 @@
 {
        struct midi_track *tr;
        uint32_t tick;
-       void *data, *ev_data;
+       void *data;
        size_t size;
        int res, ev_size;
-       uint8_t ev[32];
+       uint8_t ev[32], *ev_data;
        uint64_t state = 0;
 
        spa_return_val_if_fail(event != NULL, -EINVAL);
@@ -539,7 +543,18 @@
                CHECK_RES(write_varlen(mf, tr, tick - tr->tick));
                tr->tick = tick;
 
-               CHECK_RES(write_n(mf->file, ev_data, ev_size));
+               if (ev_size > 0 &&
+                   (ev_data[0] == 0xf0 || ev_data[0] == 0xf7)) {
+                       CHECK_RES(write_n(mf, ev_data, 1));
+                       ev_size -= 1;
+                       ev_data += 1;
+
+                       CHECK_RES(write_varlen(mf, tr, ev_size));
+
+                       tr->size += 1;
+               }
+
+               CHECK_RES(write_n(mf, ev_data, ev_size));
                tr->size += ev_size;
        }
        return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.6.5/src/tools/pw-cat.c 
new/pipewire-1.6.6/src/tools/pw-cat.c
--- old/pipewire-1.6.5/src/tools/pw-cat.c       2026-05-13 16:58:43.000000000 
+0200
+++ new/pipewire-1.6.6/src/tools/pw-cat.c       2026-05-26 10:09:28.000000000 
+0200
@@ -1218,7 +1218,7 @@
             "      --volume                          Stream volume 0-1.0 
(default %.3f)\n"
             "  -q  --quality                         Resampler quality (0 - 
15) (default %d)\n"
             "  -a, --raw                             RAW mode\n"
-            "  -M, --force-midi                      Force midi format, one of 
\"midi\" or \"ump\", (default ump)\n"
+            "  -M, --force-midi                      Force midi format, one of 
\"none\", \"midi\" or \"ump\", (default none)\n"
             "  -n, --sample-count COUNT              Stop after COUNT 
samples\n"
             "\n"),
             DEFAULT_RATE,
@@ -2192,7 +2192,7 @@
        /* negative means no volume adjustment */
        data.volume = -1.0;
        data.quality = -1;
-       data.midi.force_type = MIDI_FORCE_UMP;
+       data.midi.force_type = MIDI_FORCE_NONE;
        data.props = pw_properties_new(
                        PW_KEY_APP_NAME, prog,
                        PW_KEY_NODE_NAME, prog,

++++++ pipewire.obsinfo ++++++
--- /var/tmp/diff_new_pack.JGLJ2z/_old  2026-05-28 17:24:44.370255888 +0200
+++ /var/tmp/diff_new_pack.JGLJ2z/_new  2026-05-28 17:24:44.374256053 +0200
@@ -1,5 +1,5 @@
 name: pipewire
-version: 1.6.5
-mtime: 1778684323
-commit: 55848f4260a2d2302f9f6bd304d82616976ef9af
+version: 1.6.6
+mtime: 1779782968
+commit: a1c1d9f9f128ec987f23a0140a1704b8f8781787
 

Reply via email to