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