Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pipewire for openSUSE:Factory 
checked in at 2025-04-15 16:45:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pipewire (Old)
 and      /work/SRC/openSUSE:Factory/.pipewire.new.1907 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pipewire"

Tue Apr 15 16:45:26 2025 rev:132 rq:1269258 version:1.4.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes        2025-03-16 
18:58:49.201055175 +0100
+++ /work/SRC/openSUSE:Factory/.pipewire.new.1907/pipewire.changes      
2025-04-15 16:48:31.977703958 +0200
@@ -1,0 +2,28 @@
+Mon Apr 14 11:11:32 UTC 2025 - Antonio Larrosa <alarr...@suse.com>
+
+- Update to version 1.4.2:
+  * Highlights
+    - Do extra checks for MIDI to avoid 100% CPU usage on older
+      kernels.
+    - Fix some potential crashes in POD builder.
+    - pw-cat streaming improvements on stdout/stdin.
+    - Small fixes and improvements.
+  * PipeWire
+    - Make the service files depend on DBus to avoid startup races.
+  * SPA
+    - Do extra checks for MIDI to avoid 100% CPU usage on older
+      kernels.
+    - Use Header metadata by default in videoadapter.
+    - Handle set_format result from v4l2 better.
+    - Handle crash when POD builder overflows in the filter.
+    - Work around a libebur128 bug. (#4646)
+  * Tools
+    - pw-cat prefers AU format when streaming on stdout/stdin.
+      (#4629)
+    - Improve pw-cat verbose sndfile format debug.
+    - Add the missing --channel-map long option to pw-loopback.
+  * GStreamer
+    - Fix a leak in the deviceprovider. (#4616)
+    - Fix negotiation and make renegotiation better.
+
+-------------------------------------------------------------------

Old:
----
  pipewire-1.4.1.obscpio

New:
----
  pipewire-1.4.2.obscpio

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

Other differences:
------------------
++++++ pipewire.spec ++++++
--- /var/tmp/diff_new_pack.aLSRh6/_old  2025-04-15 16:48:32.593729752 +0200
+++ /var/tmp/diff_new_pack.aLSRh6/_new  2025-04-15 16:48:32.597729919 +0200
@@ -69,7 +69,7 @@
 %bcond_with aptx
 
 Name:           pipewire
-Version:        1.4.1
+Version:        1.4.2
 Release:        0
 Summary:        A Multimedia Framework designed to be an audio and video 
server and more
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.aLSRh6/_old  2025-04-15 16:48:32.625731092 +0200
+++ /var/tmp/diff_new_pack.aLSRh6/_new  2025-04-15 16:48:32.633731427 +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.4.1</param>
+    <param name="revision">1.4.2</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <!--
     <param name="revision">60deeb25558a794e6e664bb832318b87958c18ea</param>

++++++ pipewire-1.4.1.obscpio -> pipewire-1.4.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/NEWS new/pipewire-1.4.2/NEWS
--- old/pipewire-1.4.1/NEWS     2025-03-14 11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/NEWS     2025-04-14 11:46:02.000000000 +0200
@@ -1,3 +1,37 @@
+# PipeWire 1.4.2 (2025-04-14)
+
+This is a bugfix release that is API and ABI compatible with
+previous 1.x releases.
+
+## Highlights
+  - Do extra checks for MIDI to avoid 100% CPU usage on older kernels.
+  - Fix some potential crashes in POD builder.
+  - pw-cat streaming improvements on stdout/stdin.
+  - Small fixes and improvements.
+
+
+## PipeWire
+  - Make the service files depend on DBus to avoid startup races.
+
+## SPA
+  - Do extra checks for MIDI to avoid 100% CPU usage on older kernels.
+  - Use Header metadata by default in videoadapter.
+  - Handle set_format result from v4l2 better.
+  - Handle crash when POD builder overflows in the filter.
+  - Work around a libebur128 bug. (#4646)
+
+## Tools
+  - pw-cat prefers AU format when streaming on stdout/stdin. (#4629)
+  - Improve pw-cat verbose sndfile format debug.
+  - Add the missing --channel-map long option to pw-loopback.
+
+## GStreamer
+  - Fix a leak in the deviceprovider. (#4616)
+  - Fix negotiation and make renegotiation better.
+
+
+Older versions:
+
 # PipeWire 1.4.1 (2025-03-14)
 
 This is a quick bugfix release that is API and ABI compatible with
@@ -35,9 +69,6 @@
 ## Bluetooth
   - Fix a crash with an incomming call.
 
-
-Older versions:
-
 # PipeWire 1.4.0 (2025-03-06)
 
 This is the 1.4 release that is API and ABI compatible with previous
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/doc/dox/programs/pw-link.1.md 
new/pipewire-1.4.2/doc/dox/programs/pw-link.1.md
--- old/pipewire-1.4.1/doc/dox/programs/pw-link.1.md    2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/doc/dox/programs/pw-link.1.md    2025-04-14 
11:46:02.000000000 +0200
@@ -37,7 +37,7 @@
 List output ports
 
 \par -i | \--input
-List output ports
+List input ports
 
 \par -l | \--links
 List links
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/meson.build 
new/pipewire-1.4.2/meson.build
--- old/pipewire-1.4.1/meson.build      2025-03-14 11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/meson.build      2025-04-14 11:46:02.000000000 +0200
@@ -1,5 +1,5 @@
 project('pipewire', ['c' ],
-  version : '1.4.1',
+  version : '1.4.2',
   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.4.1/spa/include/spa/pod/filter.h 
new/pipewire-1.4.2/spa/include/spa/pod/filter.h
--- old/pipewire-1.4.1/spa/include/spa/pod/filter.h     2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/include/spa/pod/filter.h     2025-04-14 
11:46:02.000000000 +0200
@@ -139,7 +139,7 @@
            const struct spa_pod_prop *p2)
 {
        const struct spa_pod *v1, *v2;
-       struct spa_pod_choice *nc;
+       struct spa_pod_choice *nc, dummy;
        uint32_t j, k, nalt1, nalt2;
        void *alt1, *alt2, *a1, *a2;
        uint32_t type, size, p1c, p2c;
@@ -175,6 +175,10 @@
        spa_pod_builder_prop(b, p1->key, p1->flags & p2->flags);
        spa_pod_builder_push_choice(b, &f, 0, 0);
        nc = (struct spa_pod_choice*)spa_pod_builder_frame(b, &f);
+       /* write to dummy value when builder overflows. We don't want to error
+        * because overflowing is a way to determine the required buffer size. 
*/
+       if (nc == NULL)
+               nc = &dummy;
 
        /* default value */
        spa_pod_builder_primitive(b, v1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/spa/plugins/alsa/alsa-seq.c 
new/pipewire-1.4.2/spa/plugins/alsa/alsa-seq.c
--- old/pipewire-1.4.1/spa/plugins/alsa/alsa-seq.c      2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/alsa/alsa-seq.c      2025-04-14 
11:46:02.000000000 +0200
@@ -44,9 +44,27 @@
 
 #ifdef HAVE_ALSA_UMP
        res = snd_seq_set_client_midi_version(conn->hndl, 
SND_SEQ_CLIENT_UMP_MIDI_2_0);
+       if (!res) {
+               snd_seq_client_info_t *info = NULL;
+
+               /* Double check client version */
+               res = snd_seq_client_info_malloc(&info);
+               if (!res)
+                       res = snd_seq_get_client_info(conn->hndl, info);
+               if (!res) {
+                       res = snd_seq_client_info_get_midi_version(info);
+                       if (res == SND_SEQ_CLIENT_UMP_MIDI_2_0)
+                               res = 0;
+                       else
+                               res = -EIO;
+               }
+               if (info)
+                       snd_seq_client_info_free(info);
+       }
 #else
        res = -EOPNOTSUPP;
 #endif
+
        if (res < 0) {
                spa_log_lev(state->log, (probe_ump ? SPA_LOG_LEVEL_INFO : 
SPA_LOG_LEVEL_ERROR),
                                "%p: ALSA failed to enable UMP MIDI: %s", 
state, snd_strerror(res));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.4.1/spa/plugins/audioconvert/audioadapter.c 
new/pipewire-1.4.2/spa/plugins/audioconvert/audioadapter.c
--- old/pipewire-1.4.1/spa/plugins/audioconvert/audioadapter.c  2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/audioconvert/audioadapter.c  2025-04-14 
11:46:02.000000000 +0200
@@ -997,6 +997,8 @@
        format = merge_objects(this, &b, SPA_PARAM_Format,
                        (struct spa_pod_object*)format,
                        (struct spa_pod_object*)def);
+       if (format == NULL)
+               return -ENOSPC;
 
        spa_pod_fixate(format);
 
@@ -1612,13 +1614,13 @@
        uint32_t count = 0;
        struct spa_result_node_params result;
 
-       spa_pod_builder_init(&b, buffer, sizeof(buffer));
-
        result.id = id;
        result.next = start;
 next:
        result.index = result.next;
 
+       spa_pod_builder_init(&b, buffer, sizeof(buffer));
+
        if (result.next < 0x100000) {
                /* Enumerate follower formats first, until we have enough or we 
run out */
                if ((res = node_port_enum_params_sync(this, this->follower, 
direction, port_id, id,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.4.1/spa/plugins/audioconvert/audioconvert.c 
new/pipewire-1.4.2/spa/plugins/audioconvert/audioconvert.c
--- old/pipewire-1.4.1/spa/plugins/audioconvert/audioconvert.c  2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/audioconvert/audioconvert.c  2025-04-14 
11:46:02.000000000 +0200
@@ -1214,7 +1214,7 @@
        while (true) {
                const char *name;
                struct spa_pod *pod;
-               char value[512];
+               char value[4096];
 
                if (spa_pod_parser_get_string(&prs, &name) < 0)
                        break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.4.1/spa/plugins/filter-graph/ebur128_plugin.c 
new/pipewire-1.4.2/spa/plugins/filter-graph/ebur128_plugin.c
--- old/pipewire-1.4.1/spa/plugins/filter-graph/ebur128_plugin.c        
2025-03-14 11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/filter-graph/ebur128_plugin.c        
2025-04-14 11:46:02.000000000 +0200
@@ -235,6 +235,8 @@
 static void ebur128_activate(void * Instance)
 {
        struct ebur128_impl *impl = Instance;
+       unsigned long max_window;
+       int major, minor, patch;
        int mode = 0, i;
        int modes[] = {
                EBUR128_MODE_M,
@@ -264,12 +266,17 @@
                        mode |= modes[i];
        }
 
+       ebur128_get_version(&major, &minor, &patch);
+       max_window = impl->max_window;
+       if (major == 1 && minor == 2 && (patch == 5 || patch == 6))
+               max_window = (max_window + 999) / 1000;
+
        for (i = 0; i < 7; i++) {
                impl->st[i] = ebur128_init(1, impl->rate, mode);
                if (impl->st[i]) {
                        ebur128_set_channel(impl->st[i], i, channels[i]);
                        ebur128_set_max_history(impl->st[i], impl->max_history);
-                       ebur128_set_max_window(impl->st[i], impl->max_window);
+                       ebur128_set_max_window(impl->st[i], max_window);
                }
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/spa/plugins/v4l2/v4l2-source.c 
new/pipewire-1.4.2/spa/plugins/v4l2/v4l2-source.c
--- old/pipewire-1.4.1/spa/plugins/v4l2/v4l2-source.c   2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/v4l2/v4l2-source.c   2025-04-14 
11:46:02.000000000 +0200
@@ -675,7 +675,7 @@
                           const struct spa_pod *format)
 {
        struct spa_video_info info;
-       int res;
+       int res = 0;
 
        spa_zero(info);
 
@@ -755,7 +755,7 @@
        emit_port_info(this, port, false);
        emit_node_info(this, false);
 
-       return 0;
+       return res;
 }
 
 static int impl_node_port_set_param(void *object,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.4.1/spa/plugins/videoconvert/videoadapter.c 
new/pipewire-1.4.2/spa/plugins/videoconvert/videoadapter.c
--- old/pipewire-1.4.1/spa/plugins/videoconvert/videoadapter.c  2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/spa/plugins/videoconvert/videoadapter.c  2025-04-14 
11:46:02.000000000 +0200
@@ -403,6 +403,7 @@
        uint32_t i, size, buffers, blocks, align, flags, stride = 0;
        uint32_t *aligns;
        struct spa_data *datas;
+       struct spa_meta metas[1];
        uint64_t follower_flags, conv_flags;
 
        spa_log_debug(this->log, "%p: n_buffers:%d", this, this->n_buffers);
@@ -484,9 +485,11 @@
                datas[i].maxsize = size;
                aligns[i] = align;
        }
+       metas[0].type = SPA_META_Header;
+       metas[0].size = sizeof(struct spa_meta_header);
 
        free(this->buffers);
-       this->buffers = spa_buffer_alloc_array(buffers, flags, 0, NULL, blocks, 
datas, aligns);
+       this->buffers = spa_buffer_alloc_array(buffers, flags, 1, metas, 
blocks, datas, aligns);
        if (this->buffers == NULL)
                return -errno;
        this->n_buffers = buffers;
@@ -961,6 +964,8 @@
        format = merge_objects(this, &b, SPA_PARAM_Format,
                        (struct spa_pod_object*)format,
                        (struct spa_pod_object*)def);
+       if (format == NULL)
+               return -ENOSPC;
 
        spa_pod_fixate(format);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/daemon/systemd/user/meson.build 
new/pipewire-1.4.2/src/daemon/systemd/user/meson.build
--- old/pipewire-1.4.1/src/daemon/systemd/user/meson.build      2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/daemon/systemd/user/meson.build      2025-04-14 
11:46:02.000000000 +0200
@@ -11,6 +11,12 @@
 systemd_config.set('PW_BINARY', pipewire_bindir / 'pipewire')
 systemd_config.set('PW_PULSE_BINARY', pipewire_bindir / 'pipewire-pulse')
 
+pw_service_reqs = ''
+if get_option('dbus').enabled()
+  pw_service_reqs += 'dbus.service '
+endif
+systemd_config.set('PW_SERVICE_REQS', pw_service_reqs)
+
 configure_file(input : 'pipewire.service.in',
                output : 'pipewire.service',
                configuration : systemd_config,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pipewire-1.4.1/src/daemon/systemd/user/pipewire.service.in 
new/pipewire-1.4.2/src/daemon/systemd/user/pipewire.service.in
--- old/pipewire-1.4.1/src/daemon/systemd/user/pipewire.service.in      
2025-03-14 11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/daemon/systemd/user/pipewire.service.in      
2025-04-14 11:46:02.000000000 +0200
@@ -13,7 +13,7 @@
 #
 # After=pipewire.socket is not needed, as it is already implicit in the
 # socket-service relationship, see systemd.socket(5).
-Requires=pipewire.socket
+Requires=pipewire.socket @PW_SERVICE_REQS@
 ConditionUser=!root
 
 [Service]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/gst/gstpipewiredeviceprovider.c 
new/pipewire-1.4.2/src/gst/gstpipewiredeviceprovider.c
--- old/pipewire-1.4.1/src/gst/gstpipewiredeviceprovider.c      2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/gst/gstpipewiredeviceprovider.c      2025-04-14 
11:46:02.000000000 +0200
@@ -327,6 +327,7 @@
                                             gst_object_ref_sink (device),
                                             compare_device_session_priority);
     } else {
+      gst_object_ref (device);
       gst_device_provider_device_add (GST_DEVICE_PROVIDER (self), device);
     }
   }
@@ -484,7 +485,8 @@
   }
 
   if (nd->dev != NULL) {
-    gst_device_provider_device_remove (provider, GST_DEVICE (nd->dev));
+    gst_device_provider_device_remove (provider, nd->dev);
+    gst_clear_object (&nd->dev);
   }
   if (nd->caps)
     gst_caps_unref(nd->caps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/gst/gstpipewireformat.c 
new/pipewire-1.4.2/src/gst/gstpipewireformat.c
--- old/pipewire-1.4.1/src/gst/gstpipewireformat.c      2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/gst/gstpipewireformat.c      2025-04-14 
11:46:02.000000000 +0200
@@ -1065,8 +1065,19 @@
     {
       if (n_items < 3)
         return;
-      gst_caps_set_simple (res, width, GST_TYPE_INT_RANGE, rect[1].width, 
rect[2].width,
-                                height, GST_TYPE_INT_RANGE, rect[1].height, 
rect[2].height, NULL);
+
+      if (rect[1].width == rect[2].width &&
+          rect[1].height == rect[2].height) {
+        gst_caps_set_simple (res,
+            width, G_TYPE_INT, rect[1].width,
+            height, G_TYPE_INT, rect[1].height,
+            NULL);
+      } else {
+        gst_caps_set_simple (res,
+            width, GST_TYPE_INT_RANGE, rect[1].width, rect[2].width,
+            height, GST_TYPE_INT_RANGE, rect[1].height, rect[2].height,
+            NULL);
+      }
       break;
     }
     case SPA_CHOICE_Enum:
@@ -1117,8 +1128,17 @@
     {
       if (n_items < 3)
         return;
-      gst_caps_set_simple (res, key, GST_TYPE_FRACTION_RANGE, fract[1].num, 
fract[1].denom,
-                                                              fract[2].num, 
fract[2].denom, NULL);
+
+      if (fract[1].num == fract[2].num &&
+          fract[1].denom == fract[2].denom) {
+        gst_caps_set_simple (res, key, GST_TYPE_FRACTION,
+            fract[1].num, fract[1].denom, NULL);
+      } else {
+        gst_caps_set_simple (res, key, GST_TYPE_FRACTION_RANGE,
+            fract[1].num, fract[1].denom,
+            fract[2].num, fract[2].denom,
+            NULL);
+      }
       break;
     }
     case SPA_CHOICE_Enum:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/gst/gstpipewiresink.c 
new/pipewire-1.4.2/src/gst/gstpipewiresink.c
--- old/pipewire-1.4.1/src/gst/gstpipewiresink.c        2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/gst/gstpipewiresink.c        2025-04-14 
11:46:02.000000000 +0200
@@ -305,6 +305,7 @@
   struct spa_pod_builder b = { NULL };
   uint8_t buffer[1024];
   struct spa_pod_frame f;
+  guint n_params = 0;
 
   config = gst_buffer_pool_get_config (GST_BUFFER_POOL (pool));
   gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers, 
&max_buffers);
@@ -325,20 +326,22 @@
                                                 (1<<SPA_DATA_MemFd) |
                                                 (1<<SPA_DATA_MemPtr)),
       0);
-  port_params[0] = spa_pod_builder_pop (&b, &f);
+  port_params[n_params++] = spa_pod_builder_pop (&b, &f);
 
-  port_params[1] = spa_pod_builder_add_object (&b,
+  port_params[n_params++] = spa_pod_builder_add_object (&b,
       SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
       SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Header),
       SPA_PARAM_META_size, SPA_POD_Int(sizeof (struct spa_meta_header)));
 
-  port_params[2] = spa_pod_builder_add_object (&b,
-      SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
-      SPA_PARAM_META_type, SPA_POD_Id(SPA_META_VideoCrop),
-      SPA_PARAM_META_size, SPA_POD_Int(sizeof (struct spa_meta_region)));
+  if (sink->is_video) {
+    port_params[n_params++] = spa_pod_builder_add_object (&b,
+        SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
+        SPA_PARAM_META_type, SPA_POD_Id(SPA_META_VideoCrop),
+        SPA_PARAM_META_size, SPA_POD_Int(sizeof (struct spa_meta_region)));
+  }
 
   pw_thread_loop_lock (sink->stream->core->loop);
-  pw_stream_update_params (sink->stream->pwstream, port_params, 3);
+  pw_stream_update_params (sink->stream->pwstream, port_params, n_params);
   pw_thread_loop_unlock (sink->stream->core->loop);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/gst/gstpipewiresrc.c 
new/pipewire-1.4.2/src/gst/gstpipewiresrc.c
--- old/pipewire-1.4.1/src/gst/gstpipewiresrc.c 2025-03-14 11:07:06.000000000 
+0100
+++ new/pipewire-1.4.2/src/gst/gstpipewiresrc.c 2025-04-14 11:46:02.000000000 
+0200
@@ -1091,14 +1091,34 @@
   }
 
   pw_peer_caps = gst_caps_from_format (param);
+
   if (pw_peer_caps && pwsrc->possible_caps) {
+    GST_DEBUG_OBJECT (pwsrc, "peer caps %" GST_PTR_FORMAT, pw_peer_caps);
+    GST_DEBUG_OBJECT (pwsrc, "possible caps %" GST_PTR_FORMAT, 
pwsrc->possible_caps);
+
     pwsrc->caps = gst_caps_intersect_full (pw_peer_caps,
                                            pwsrc->possible_caps,
                                            GST_CAPS_INTERSECT_FIRST);
+
+  /*
+   * We expect pw_peer_caps to be fixed caps as we receive that from
+   * PipeWire. See pw_context_find_format() and SPA_PARAM_Format.
+   * possible_caps can be non-fixated caps based on what is downstream
+   * in the pipeline.
+   *
+   * The intersection result above might give us non-fixated caps. A
+   * possible scenario for this is the below pipeline.
+   * pipewiresrc ! audioconvert ! audio/x-raw,rate=44100,channels=2 ! ..
+   *
+   * So we fixate the caps explicitly here.
+   */
+    pwsrc->caps = gst_caps_fixate (pwsrc->caps);
     gst_caps_maybe_fixate_dma_format (pwsrc->caps);
   }
 
-  if (pwsrc->caps && gst_caps_is_fixed (pwsrc->caps)) {
+  if (pwsrc->caps) {
+    g_return_if_fail (gst_caps_is_fixed (pwsrc->caps));
+
     pwsrc->negotiated = TRUE;
 
     structure = gst_caps_get_structure (pwsrc->caps, 0);
@@ -1127,14 +1147,15 @@
 #ifdef HAVE_GSTREAMER_DMA_DRM
       }
 #endif
+    } else {
+      /* Don't provide bufferpool for audio if not requested by the
+       * application/user */
+      if (pwsrc->use_bufferpool != USE_BUFFERPOOL_YES)
+        pwsrc->use_bufferpool = USE_BUFFERPOOL_NO;
     }
   } else {
     pwsrc->negotiated = FALSE;
     pwsrc->is_video = FALSE;
-
-    /* Don't provide bufferpool for audio if not requested by the 
application/user */
-    if (pwsrc->use_bufferpool != USE_BUFFERPOOL_YES)
-      pwsrc->use_bufferpool = USE_BUFFERPOOL_NO;
   }
 
   if (pwsrc->caps) {
@@ -1158,7 +1179,7 @@
                                                             pwsrc->min_buffers,
                                                             
pwsrc->max_buffers),
         SPA_PARAM_BUFFERS_blocks,  SPA_POD_CHOICE_RANGE_Int(0, 1, INT32_MAX),
-        SPA_PARAM_BUFFERS_size,    SPA_POD_CHOICE_RANGE_Int(0, 0, INT32_MAX),
+        SPA_PARAM_BUFFERS_size,    SPA_POD_CHOICE_RANGE_Int(0, 1, INT32_MAX),
         SPA_PARAM_BUFFERS_stride,  SPA_POD_CHOICE_RANGE_Int(0, 0, INT32_MAX),
         SPA_PARAM_BUFFERS_dataType, SPA_POD_CHOICE_FLAGS_Int(buffertypes));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/modules/module-raop-sink.c 
new/pipewire-1.4.2/src/modules/module-raop-sink.c
--- old/pipewire-1.4.1/src/modules/module-raop-sink.c   2025-03-14 
11:07:06.000000000 +0100
+++ new/pipewire-1.4.2/src/modules/module-raop-sink.c   2025-04-14 
11:46:02.000000000 +0200
@@ -1331,10 +1331,12 @@
 
 static int rtsp_do_post_auth_setup(struct impl *impl)
 {
-       static const unsigned char content[33] =
-               "\x01"
-               
"\x59\x02\xed\xe9\x0d\x4e\xf2\xbd\x4c\xb6\x8a\x63\x30\x03\x82\x07"
-               
"\xa9\x4d\xbd\x50\xd8\xaa\x46\x5b\x5d\x8c\x01\x2a\x0c\x7e\x1d\x4e";
+       static const uint8_t content[33] = {
+               0x01,
+               0x59, 0x02, 0xed, 0xe9, 0x0d, 0x4e, 0xf2, 0xbd,
+               0x4c, 0xb6, 0x8a, 0x63, 0x30, 0x03, 0x82, 0x07,
+               0xa9, 0x4d, 0xbd, 0x50, 0xd8, 0xaa, 0x46, 0x5b,
+               0x5d, 0x8c, 0x01, 0x2a, 0x0c, 0x7e, 0x1d, 0x4e };
 
        return pw_rtsp_client_url_send(impl->rtsp, "/auth-setup", "POST", 
&impl->headers->dict,
                                       "application/octet-stream", content, 
sizeof(content),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/pipewire/impl-link.c 
new/pipewire-1.4.2/src/pipewire/impl-link.c
--- old/pipewire-1.4.1/src/pipewire/impl-link.c 2025-03-14 11:07:06.000000000 
+0100
+++ new/pipewire-1.4.2/src/pipewire/impl-link.c 2025-04-14 11:46:02.000000000 
+0200
@@ -388,11 +388,10 @@
                }
        }
 
-       pw_log_pod(SPA_LOG_LEVEL_DEBUG, format);
-
        SPA_POD_OBJECT_ID(format) = SPA_PARAM_Format;
        pw_log_debug("%p: doing set format %p fixated:%d", this,
                        format, spa_pod_is_fixated(format));
+       pw_log_pod(SPA_LOG_LEVEL_INFO, format);
 
        if (out_state == PW_IMPL_PORT_STATE_CONFIGURE) {
                pw_log_debug("%p: doing set format on output", this);
@@ -405,7 +404,7 @@
                        goto error;
                }
                if (SPA_RESULT_IS_ASYNC(res)) {
-                       pw_log_info("output set format %d", res);
+                       pw_log_debug("output set format %d", res);
                        busy_id = pw_work_queue_add(impl->work, 
&this->output_link,
                                        spa_node_sync(output->node->node, res),
                                        complete_ready, this);
@@ -425,7 +424,7 @@
                        goto error;
                }
                if (SPA_RESULT_IS_ASYNC(res2)) {
-                       pw_log_info("input set format %d", res2);
+                       pw_log_debug("input set format %d", res2);
                        busy_id = pw_work_queue_add(impl->work, 
&this->input_link,
                                        spa_node_sync(input->node->node, res2),
                                        complete_ready, this);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/tools/pw-cat.c 
new/pipewire-1.4.2/src/tools/pw-cat.c
--- old/pipewire-1.4.1/src/tools/pw-cat.c       2025-03-14 11:07:06.000000000 
+0100
+++ new/pipewire-1.4.2/src/tools/pw-cat.c       2025-04-14 11:46:02.000000000 
+0200
@@ -1343,7 +1343,7 @@
                }
        }
        if (format == -1)
-               format = SF_FORMAT_WAV;
+               format = spa_streq(filename, "-") ? SF_FORMAT_AU : 
SF_FORMAT_WAV;
        if (format == SF_FORMAT_WAV && info->channels > 2)
                format = SF_FORMAT_WAVEX;
 
@@ -1436,6 +1436,21 @@
 }
 #endif
 
+static const char *endianness_to_name(int format)
+{
+       switch (format & SF_FORMAT_ENDMASK) {
+       case SF_ENDIAN_FILE:
+               return "Default Endian";
+       case SF_ENDIAN_LITTLE:
+               return "Little Endian";
+       case SF_ENDIAN_BIG:
+               return "Big Endian";
+       case SF_ENDIAN_CPU:
+               return "CPU Endian";
+       }
+       return "unknown";
+}
+
 static int setup_sndfile(struct data *data)
 {
        const struct format_info *fi = NULL;
@@ -1473,9 +1488,21 @@
                return -EIO;
        }
 
-       if (data->verbose)
-               fprintf(stderr, "sndfile: opened file \"%s\" format %08x 
channels:%d rate:%d\n",
-                               data->filename, info.format, info.channels, 
info.samplerate);
+       if (data->verbose) {
+               SF_FORMAT_INFO ti, sti;
+               spa_zero(ti);
+               ti.format = info.format & SF_FORMAT_TYPEMASK;
+               if (sf_command(NULL, SFC_GET_FORMAT_INFO, &ti, sizeof(ti)) != 0)
+                       ti.name = "unknown";
+               spa_zero(sti);
+               sti.format = info.format & SF_FORMAT_SUBMASK;
+               if (sf_command(NULL, SFC_GET_FORMAT_INFO, &sti, sizeof(sti)) != 
0)
+                       sti.name = "unknown";
+
+               fprintf(stderr, "sndfile: opened file \"%s\" format \"%s %s 
%s\" channels:%d rate:%d\n",
+                               data->filename, endianness_to_name(info.format),
+                               ti.name, sti.name, info.channels, 
info.samplerate);
+       }
        if (data->channels > 0 && info.channels != (int)data->channels) {
                fprintf(stderr, "sndfile: given channels (%u) don't match file 
channels (%d)\n",
                                data->channels, info.channels);
@@ -1511,7 +1538,6 @@
                /* try native format first, else decode to float */
                if ((fi = format_info_by_sf_format(info.format)) == NULL)
                        fi = format_info_by_sf_format(SF_FORMAT_FLOAT);
-
        }
        if (fi == NULL)
                return -EIO;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pipewire-1.4.1/src/tools/pw-loopback.c 
new/pipewire-1.4.2/src/tools/pw-loopback.c
--- old/pipewire-1.4.1/src/tools/pw-loopback.c  2025-03-14 11:07:06.000000000 
+0100
+++ new/pipewire-1.4.2/src/tools/pw-loopback.c  2025-04-14 11:46:02.000000000 
+0200
@@ -103,6 +103,7 @@
                { "group",              required_argument,      NULL, 'g' },
                { "name",               required_argument,      NULL, 'n' },
                { "channels",           required_argument,      NULL, 'c' },
+               { "channel-map",        required_argument,      NULL, 'm' },
                { "latency",            required_argument,      NULL, 'l' },
                { "delay",              required_argument,      NULL, 'd' },
                { "capture",            required_argument,      NULL, 'C' },

++++++ pipewire.obsinfo ++++++
--- /var/tmp/diff_new_pack.aLSRh6/_old  2025-04-15 16:48:33.385762917 +0200
+++ /var/tmp/diff_new_pack.aLSRh6/_new  2025-04-15 16:48:33.389763085 +0200
@@ -1,5 +1,5 @@
 name: pipewire
-version: 1.4.1
-mtime: 1741946826
-commit: 2eb8cf5dc780ca22b94545f1254497a428c412f5
+version: 1.4.2
+mtime: 1744623962
+commit: d20a1523b6770dfa93a270bdda5d7c800d7ec191
 

Reply via email to