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-03-10 17:46:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pipewire (Old) and /work/SRC/openSUSE:Factory/.pipewire.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pipewire" Tue Mar 10 17:46:58 2026 rev:150 rq:1337634 version:1.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/pipewire/pipewire.changes 2026-03-04 21:03:40.852623151 +0100 +++ /work/SRC/openSUSE:Factory/.pipewire.new.8177/pipewire.changes 2026-03-10 17:47:19.780727828 +0100 @@ -1,0 +2,28 @@ +Mon Mar 9 10:31:43 UTC 2026 - Antonio Larrosa <[email protected]> + +- Update to version 1.6.1: + * This is a bugfix release that is API and ABI compatible with + the previous 1.6.x releases. + * Highlights + - Fix socket activation, which could cause a failure to start + PipeWire in some setups. + - Fix crashes in many JACK apps when nodes/ports are quickly + added/removed such as when there are notifications (like + when changing the volume in KDE). + - Fix playback of encoded formats in pw-cat again. + - Some other smaller fixes and improvements. + * Modules + - Fix socket activation. (#5140 (closed)) + - Remove node.link-group from driver nodes. + * SPA + - Fix the libcamera stop sequence. + * JACK + - Never return NULL from jack_port_by_id(). (#3512 (closed)) + * GStreamer + - Improve the timestamps on buffers. + * Tools + - Fix playback of encoded formats. (#5155 (closed)) +- Remove patch which is already merged in 1.6.1: + * 0002-module-protocol-native-Fix-socket-activation.patch + +------------------------------------------------------------------- Old: ---- 0002-module-protocol-native-Fix-socket-activation.patch pipewire-1.6.0.obscpio New: ---- pipewire-1.6.1.obscpio ----------(Old B)---------- Old:- Remove patch which is already merged in 1.6.1: * 0002-module-protocol-native-Fix-socket-activation.patch ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pipewire.spec ++++++ --- /var/tmp/diff_new_pack.vAtVEl/_old 2026-03-10 17:47:20.792769605 +0100 +++ /var/tmp/diff_new_pack.vAtVEl/_new 2026-03-10 17:47:20.792769605 +0100 @@ -71,7 +71,7 @@ %bcond_with aptx Name: pipewire -Version: 1.6.0 +Version: 1.6.1 Release: 0 Summary: A Multimedia Framework designed to be an audio and video server and more License: MIT @@ -82,7 +82,6 @@ # PATCH-FIX-OPENSUSE reduce-meson-dependency.patch Patch0: reduce-meson-dependency.patch Patch1: 0001-pulse-server-add-client-props-to-sink_input_source_output.patch -Patch2: 0002-module-protocol-native-Fix-socket-activation.patch Patch3: 0003-modules-improve-error-reporting.patch BuildRequires: docutils ++++++ _service ++++++ --- /var/tmp/diff_new_pack.vAtVEl/_old 2026-03-10 17:47:20.852772081 +0100 +++ /var/tmp/diff_new_pack.vAtVEl/_new 2026-03-10 17:47:20.860772412 +0100 @@ -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.0</param> + <param name="revision">1.6.1</param> <param name="versionformat">@PARENT_TAG@</param> <!-- <param name="revision">636cbae9b6cebc4ba55903e2a686f4c4a2bd4193</param> ++++++ pipewire-1.6.0.obscpio -> pipewire-1.6.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/NEWS new/pipewire-1.6.1/NEWS --- old/pipewire-1.6.0/NEWS 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/NEWS 2026-03-09 10:17:11.000000000 +0100 @@ -1,3 +1,35 @@ +# PipeWire 1.6.1 (2026-03-09) + +This is a bugfix release that is API and ABI compatible with the previous +1.6.x releases. + +## Highlights + - Fix socket activation, which could cause a failure to start PipeWire in + some setups. + - Fix crashes in many JACK apps when nodes/ports are quickly added/removed + such as when there are notifications (like when changing the volume in + KDE). + - Fix playback of encoded formats in pw-cat again. + - Some other smaller fixes and improvements. + +## Modules + - Fix socket activation. (#5140) + - Remove node.link-group from driver nodes. + +## SPA + - Fix the libcamera stop sequence. + +## JACK + - Never return NULL from jack_port_by_id(). (#3512) + +## GStreamer + - Improve the timestamps on buffers. + +## Tools + - Fix playback of encoded formats. (#5155) + +Older versions: + # PipeWire 1.6.0 (2026-02-19) This is the 1.6 release that is API and ABI compatible with previous @@ -95,8 +127,6 @@ - Add some more options to pw-cat to list supported containers and formats. (#5117) -Older versions: - # PipeWire 1.5.85 (2026-01-19) This is the fifth and hopefully last 1.6 release candidate that diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/meson.build new/pipewire-1.6.1/meson.build --- old/pipewire-1.6.0/meson.build 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/meson.build 2026-03-09 10:17:11.000000000 +0100 @@ -1,5 +1,5 @@ project('pipewire', ['c' ], - version : '1.6.0', + version : '1.6.1', 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.0/pipewire-jack/src/pipewire-jack.c new/pipewire-1.6.1/pipewire-jack/src/pipewire-jack.c --- old/pipewire-1.6.0/pipewire-jack/src/pipewire-jack.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/pipewire-jack/src/pipewire-jack.c 2026-03-09 10:17:11.000000000 +0100 @@ -492,6 +492,8 @@ jack_position_t jack_position; jack_transport_state_t jack_state; struct frame_times jack_times; + + struct object dummy_port; }; #define return_val_if_fail(expr, val) \ @@ -4468,6 +4470,11 @@ 0, NULL, &client->info); client->info.change_mask = 0; + client->dummy_port.type = INTERFACE_Port; + snprintf(client->dummy_port.port.name, sizeof(client->dummy_port.port.name), "%s:dummy", client_name); + snprintf(client->dummy_port.port.alias1, sizeof(client->dummy_port.port.alias1), "%s:dummy", client_name); + snprintf(client->dummy_port.port.alias2, sizeof(client->dummy_port.port.alias2), "%s:dummy", client_name); + client->show_monitor = pw_properties_get_bool(client->props, "jack.show-monitor", true); client->show_midi = pw_properties_get_bool(client->props, "jack.show-midi", true); client->merge_monitor = pw_properties_get_bool(client->props, "jack.merge-monitor", true); @@ -5951,9 +5958,7 @@ { const char *name; struct client *c = o->client; - if (c == NULL) - return NULL; - if (c->default_as_system && is_port_default(c, o)) + if (c != NULL && c->default_as_system && is_port_default(c, o)) name = o->port.system; else name = o->port.name; @@ -6999,13 +7004,11 @@ pthread_mutex_lock(&c->context.lock); res = find_by_serial(c, port_id); - if (res && res->type != INTERFACE_Port) - res = NULL; - pw_log_debug("%p: port %d -> %p", c, port_id, res); pthread_mutex_unlock(&c->context.lock); + if (res == NULL || res->type != INTERFACE_Port) + res = &c->dummy_port; - if (res == NULL) - pw_log_info("%p: port %d not found", c, port_id); + pw_log_debug("%p: port %d -> %p", c, port_id, res); return object_to_port(res); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/spa/plugins/alsa/acp/acp.c new/pipewire-1.6.1/spa/plugins/alsa/acp/acp.c --- old/pipewire-1.6.0/spa/plugins/alsa/acp/acp.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/spa/plugins/alsa/acp/acp.c 2026-03-09 10:17:11.000000000 +0100 @@ -485,13 +485,11 @@ if ((n_capture == 1 && n_playback == 1) || is_firewire) { PA_IDXSET_FOREACH(m, ap->output_mappings, idx) { pa_proplist_setf(m->output_proplist, "node.group", "pro-audio-%u", index); - pa_proplist_setf(m->output_proplist, "node.link-group", "pro-audio-%u", index); pa_proplist_setf(m->output_proplist, "api.alsa.auto-link", "true"); pa_proplist_setf(m->output_proplist, "api.alsa.disable-tsched", "true"); } PA_IDXSET_FOREACH(m, ap->input_mappings, idx) { pa_proplist_setf(m->input_proplist, "node.group", "pro-audio-%u", index); - pa_proplist_setf(m->input_proplist, "node.link-group", "pro-audio-%u", index); pa_proplist_setf(m->input_proplist, "api.alsa.auto-link", "true"); pa_proplist_setf(m->input_proplist, "api.alsa.disable-tsched", "true"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/spa/plugins/libcamera/libcamera-source.cpp new/pipewire-1.6.1/spa/plugins/libcamera/libcamera-source.cpp --- old/pipewire-1.6.0/spa/plugins/libcamera/libcamera-source.cpp 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/spa/plugins/libcamera/libcamera-source.cpp 2026-03-09 10:17:11.000000000 +0100 @@ -184,9 +184,6 @@ 0, nullptr, 0, this ); - if (source.fd >= 0) - spa_system_close(system, std::exchange(source.fd, -1)); - camera->requestCompleted.disconnect(this, &impl::requestComplete); if (int res = camera->stop(); res < 0) { @@ -194,6 +191,9 @@ camera->id().c_str(), spa_strerror(res)); } + if (source.fd >= 0) + spa_system_close(system, std::exchange(source.fd, -1)); + completed_requests_rb = SPA_RINGBUFFER_INIT(); active = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/gst/gstpipewiresrc.c new/pipewire-1.6.1/src/gst/gstpipewiresrc.c --- old/pipewire-1.6.0/src/gst/gstpipewiresrc.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/gst/gstpipewiresrc.c 2026-03-09 10:17:11.000000000 +0100 @@ -531,6 +531,7 @@ src->autoconnect = DEFAULT_AUTOCONNECT; src->min_latency = 0; src->max_latency = GST_CLOCK_TIME_NONE; + src->last_buffer_clock_time = GST_CLOCK_TIME_NONE; src->n_buffers = 0; src->flushing_on_remove_buffer = FALSE; src->on_disconnect = DEFAULT_ON_DISCONNECT; @@ -1598,16 +1599,31 @@ GST_LOG_OBJECT (pwsrc, "EOS, send last buffer"); break; } else if (timeout && pwsrc->last_buffer != NULL) { + buf = gst_buffer_copy (pwsrc->last_buffer); update_time = TRUE; - buf = gst_buffer_ref(pwsrc->last_buffer); GST_LOG_OBJECT (pwsrc, "timeout, send keepalive buffer"); break; } else { buf = dequeue_buffer (pwsrc); GST_LOG_OBJECT (pwsrc, "popped buffer %p", buf); if (buf != NULL) { - if (pwsrc->resend_last || pwsrc->keepalive_time > 0) - gst_buffer_replace (&pwsrc->last_buffer, buf); + if (pwsrc->resend_last || pwsrc->keepalive_time > 0) { + GstClock *clock; + GstBuffer *old; + + old = pwsrc->last_buffer; + pwsrc->last_buffer = gst_buffer_copy (buf); + gst_buffer_unref (old); + gst_buffer_add_parent_buffer_meta (pwsrc->last_buffer, buf); + + clock = gst_element_get_clock (GST_ELEMENT_CAST (pwsrc)); + if (clock != NULL) { + pwsrc->last_buffer_clock_time = gst_clock_get_time (clock); + gst_object_unref (clock); + } else { + pwsrc->last_buffer_clock_time = GST_CLOCK_TIME_NONE; + } + } break; } } @@ -1632,21 +1648,33 @@ if (update_time) { GstClock *clock; - GstClockTime pts, dts; + GstClockTime current_clock_time; clock = gst_element_get_clock (GST_ELEMENT_CAST (pwsrc)); if (clock != NULL) { - pts = dts = gst_clock_get_time (clock); + current_clock_time = gst_clock_get_time (clock); gst_object_unref (clock); } else { - pts = dts = GST_CLOCK_TIME_NONE; + current_clock_time = GST_CLOCK_TIME_NONE; } - GST_BUFFER_PTS (*buffer) = pts; - GST_BUFFER_DTS (*buffer) = dts; + if (GST_CLOCK_TIME_IS_VALID (current_clock_time) && + GST_CLOCK_TIME_IS_VALID (pwsrc->last_buffer_clock_time) && + GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (*buffer)) && + GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (*buffer))) { + GstClockTime diff; + + diff = current_clock_time - pwsrc->last_buffer_clock_time; + + GST_BUFFER_PTS (*buffer) += diff; + GST_BUFFER_DTS (*buffer) += diff; + } else { + GST_BUFFER_PTS (*buffer) = GST_BUFFER_DTS (*buffer) = current_clock_time; + } GST_LOG_OBJECT (pwsrc, "Sending keepalive buffer pts/dts: %" GST_TIME_FORMAT - " (%" G_GUINT64_FORMAT ")", GST_TIME_ARGS (pts), pts); + " (%" G_GUINT64_FORMAT ")", GST_TIME_ARGS (current_clock_time), + current_clock_time); } return GST_FLOW_OK; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/gst/gstpipewiresrc.h new/pipewire-1.6.1/src/gst/gstpipewiresrc.h --- old/pipewire-1.6.0/src/gst/gstpipewiresrc.h 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/gst/gstpipewiresrc.h 2026-03-09 10:17:11.000000000 +0100 @@ -83,6 +83,7 @@ GstClockTime max_latency; GstBuffer *last_buffer; + GstClockTime last_buffer_clock_time; enum spa_meta_videotransform_value transform_value; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/modules/module-ffado-driver.c new/pipewire-1.6.1/src/modules/module-ffado-driver.c --- old/pipewire-1.6.0/src/modules/module-ffado-driver.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/modules/module-ffado-driver.c 2026-03-09 10:17:11.000000000 +0100 @@ -1556,8 +1556,6 @@ pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); if (pw_properties_get(props, PW_KEY_NODE_GROUP) == NULL) pw_properties_set(props, PW_KEY_NODE_GROUP, "ffado-group"); - if (pw_properties_get(props, PW_KEY_NODE_LINK_GROUP) == NULL) - pw_properties_set(props, PW_KEY_NODE_LINK_GROUP, "ffado-group"); if (pw_properties_get(props, PW_KEY_NODE_PAUSE_ON_IDLE) == NULL) pw_properties_set(props, PW_KEY_NODE_PAUSE_ON_IDLE, "false"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/modules/module-netjack2-manager.c new/pipewire-1.6.1/src/modules/module-netjack2-manager.c --- old/pipewire-1.6.0/src/modules/module-netjack2-manager.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/modules/module-netjack2-manager.c 2026-03-09 10:17:11.000000000 +0100 @@ -1393,8 +1393,6 @@ pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true"); if (pw_properties_get(props, PW_KEY_NODE_NETWORK) == NULL) pw_properties_set(props, PW_KEY_NODE_NETWORK, "true"); - if (pw_properties_get(props, PW_KEY_NODE_LINK_GROUP) == NULL) - pw_properties_set(props, PW_KEY_NODE_LINK_GROUP, "jack-group"); if (pw_properties_get(props, PW_KEY_NODE_ALWAYS_PROCESS) == NULL) pw_properties_set(props, PW_KEY_NODE_ALWAYS_PROCESS, "true"); if (pw_properties_get(props, PW_KEY_NODE_LOCK_QUANTUM) == NULL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/modules/module-protocol-native.c new/pipewire-1.6.1/src/modules/module-protocol-native.c --- old/pipewire-1.6.0/src/modules/module-protocol-native.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/modules/module-protocol-native.c 2026-03-09 10:17:11.000000000 +0100 @@ -907,7 +907,7 @@ bool activated = false; { - int i, n = listen_fd(); + int i, n = listen_fds(); for (i = 0; i < n; ++i) { if (is_socket_unix(LISTEN_FDS_START + i, SOCK_STREAM, s->addr.sun_path) > 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/modules/module-protocol-pulse/server.c new/pipewire-1.6.1/src/modules/module-protocol-pulse/server.c --- old/pipewire-1.6.0/src/modules/module-protocol-pulse/server.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/modules/module-protocol-pulse/server.c 2026-03-09 10:17:11.000000000 +0100 @@ -576,7 +576,7 @@ static int check_socket_activation(const char *path) { - const int n = listen_fd(); + const int n = listen_fds(); for (int i = 0; i < n; i++) { const int fd = LISTEN_FDS_START + i; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/modules/network-utils.h new/pipewire-1.6.1/src/modules/network-utils.h --- old/pipewire-1.6.0/src/modules/network-utils.h 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/modules/network-utils.h 2026-03-09 10:17:11.000000000 +0100 @@ -143,7 +143,7 @@ /* Returns the number of file descriptors passed for socket activation. * Returns 0 if none, -1 on error. */ -static inline int listen_fd(void) +static inline int listen_fds(void) { uint32_t n; int i, flags; @@ -161,8 +161,6 @@ return -1; } - unsetenv("LISTEN_FDS"); - return (int)n; } @@ -192,12 +190,10 @@ if (addr.sun_family != AF_UNIX) return 0; size_t length = strlen(path); - if (length > 0) { - if (len < offsetof(struct sockaddr_un, sun_path) + length) - return 0; - if (memcmp(addr.sun_path, path, length) != 0) - return 0; - } + if (len < offsetof(struct sockaddr_un, sun_path) + length + 1) + return 0; + if (memcmp(addr.sun_path, path, length + 1) != 0) + return 0; } return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pipewire-1.6.0/src/tools/pw-cat.c new/pipewire-1.6.1/src/tools/pw-cat.c --- old/pipewire-1.6.0/src/tools/pw-cat.c 2026-02-19 09:59:34.000000000 +0100 +++ new/pipewire-1.6.1/src/tools/pw-cat.c 2026-03-09 10:17:11.000000000 +0100 @@ -196,55 +196,60 @@ }; static const struct format_info { - const char *name; + const char *sf_name; int sf_format; + uint32_t sf_width; + const char *spa_name; uint32_t spa_format; - uint32_t width; + uint32_t spa_width; +#define FORMAT_ENCODED (1<<0) + uint32_t flags; } format_info[] = { - { "ulaw", SF_FORMAT_ULAW, SPA_AUDIO_FORMAT_ULAW, 1 }, - { "alaw", SF_FORMAT_ULAW, SPA_AUDIO_FORMAT_ALAW, 1 }, - { "s8", SF_FORMAT_PCM_S8, SPA_AUDIO_FORMAT_S8, 1 }, - { "u8", SF_FORMAT_PCM_U8, SPA_AUDIO_FORMAT_U8, 1 }, - { "s16", SF_FORMAT_PCM_16, SPA_AUDIO_FORMAT_S16, 2 }, - { "s24", SF_FORMAT_PCM_24, SPA_AUDIO_FORMAT_S24, 3 }, - { "s32", SF_FORMAT_PCM_32, SPA_AUDIO_FORMAT_S32, 4 }, - { "f32", SF_FORMAT_FLOAT, SPA_AUDIO_FORMAT_F32, 4 }, - { "f64", SF_FORMAT_DOUBLE, SPA_AUDIO_FORMAT_F32, 8 }, - - { "mp1", SF_FORMAT_MPEG_LAYER_I, SPA_AUDIO_FORMAT_F32, 1 }, - { "mp2", SF_FORMAT_MPEG_LAYER_II, SPA_AUDIO_FORMAT_F32, 1 }, - { "mp3", SF_FORMAT_MPEG_LAYER_III, SPA_AUDIO_FORMAT_F32, 1 }, - { "vorbis", SF_FORMAT_VORBIS, SPA_AUDIO_FORMAT_F32, 1 }, - { "opus", SF_FORMAT_OPUS, SPA_AUDIO_FORMAT_F32, 1 }, - - { "ima-adpcm", SF_FORMAT_IMA_ADPCM, SPA_AUDIO_FORMAT_F32, 1 }, - { "ms-adpcm", SF_FORMAT_MS_ADPCM, SPA_AUDIO_FORMAT_F32, 1 }, - { "nms-adpcm-16", SF_FORMAT_NMS_ADPCM_16, SPA_AUDIO_FORMAT_F32, 1 }, - { "nms-adpcm-24", SF_FORMAT_NMS_ADPCM_24, SPA_AUDIO_FORMAT_F32, 1 }, - { "nms-adpcm-32", SF_FORMAT_NMS_ADPCM_32, SPA_AUDIO_FORMAT_F32, 1 }, - - { "alac-16", SF_FORMAT_ALAC_16, SPA_AUDIO_FORMAT_F32, 1 }, - { "alac-20", SF_FORMAT_ALAC_20, SPA_AUDIO_FORMAT_F32, 1 }, - { "alac-24", SF_FORMAT_ALAC_24, SPA_AUDIO_FORMAT_F32, 1 }, - { "alac-32", SF_FORMAT_ALAC_32, SPA_AUDIO_FORMAT_F32, 1 }, - - { "gsm610", SF_FORMAT_GSM610, SPA_AUDIO_FORMAT_F32, 1 }, - { "g721-32", SF_FORMAT_G721_32, SPA_AUDIO_FORMAT_F32, 1 }, - { "g723-24", SF_FORMAT_G723_24, SPA_AUDIO_FORMAT_F32, 1 }, - { "g723-40", SF_FORMAT_G723_40, SPA_AUDIO_FORMAT_F32, 1 }, - { "dwvw-12", SF_FORMAT_DWVW_12, SPA_AUDIO_FORMAT_F32, 1 }, - { "dwvw-16", SF_FORMAT_DWVW_16, SPA_AUDIO_FORMAT_F32, 1 }, - { "dwvw-24", SF_FORMAT_DWVW_24, SPA_AUDIO_FORMAT_F32, 1 }, - { "vox", SF_FORMAT_VOX_ADPCM, SPA_AUDIO_FORMAT_F32, 1 }, - { "dpcm-16", SF_FORMAT_DPCM_16, SPA_AUDIO_FORMAT_F32, 1 }, - { "dpcm-8", SF_FORMAT_DPCM_8, SPA_AUDIO_FORMAT_F32, 1 }, + { "ulaw", SF_FORMAT_ULAW, 1, "ulaw", SPA_AUDIO_FORMAT_ULAW, 1, 0 }, + { "alaw", SF_FORMAT_ULAW, 1, "alaw", SPA_AUDIO_FORMAT_ALAW, 1, 0 }, + { "s8", SF_FORMAT_PCM_S8, 1, "s8", SPA_AUDIO_FORMAT_S8, 1, 0 }, + { "u8", SF_FORMAT_PCM_U8, 1, "u8", SPA_AUDIO_FORMAT_U8, 1, 0 }, + { "s16", SF_FORMAT_PCM_16, 2, "s16", SPA_AUDIO_FORMAT_S16, 2, 0 }, + /* we read and write S24 as S32 with sndfile */ + { "s24", SF_FORMAT_PCM_24, 3, "s32", SPA_AUDIO_FORMAT_S32, 4, 0 }, + { "s32", SF_FORMAT_PCM_32, 4, "s32", SPA_AUDIO_FORMAT_S32, 4, 0 }, + { "f32", SF_FORMAT_FLOAT, 4, "f32", SPA_AUDIO_FORMAT_F32, 4, 0 }, + { "f64", SF_FORMAT_DOUBLE, 8, "f64", SPA_AUDIO_FORMAT_F32, 8, 0 }, + + { "mp1", SF_FORMAT_MPEG_LAYER_I, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "mp2", SF_FORMAT_MPEG_LAYER_II, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "mp3", SF_FORMAT_MPEG_LAYER_III, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "vorbis", SF_FORMAT_VORBIS, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "opus", SF_FORMAT_OPUS, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + + { "ima-adpcm", SF_FORMAT_IMA_ADPCM, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "ms-adpcm", SF_FORMAT_MS_ADPCM, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "nms-adpcm-16", SF_FORMAT_NMS_ADPCM_16, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "nms-adpcm-24", SF_FORMAT_NMS_ADPCM_24, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "nms-adpcm-32", SF_FORMAT_NMS_ADPCM_32, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + + { "alac-16", SF_FORMAT_ALAC_16, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "alac-20", SF_FORMAT_ALAC_20, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "alac-24", SF_FORMAT_ALAC_24, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "alac-32", SF_FORMAT_ALAC_32, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + + { "gsm610", SF_FORMAT_GSM610, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "g721-32", SF_FORMAT_G721_32, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "g723-24", SF_FORMAT_G723_24, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "g723-40", SF_FORMAT_G723_40, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "dwvw-12", SF_FORMAT_DWVW_12, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "dwvw-16", SF_FORMAT_DWVW_16, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "dwvw-24", SF_FORMAT_DWVW_24, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "vox", SF_FORMAT_VOX_ADPCM, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "dpcm-16", SF_FORMAT_DPCM_16, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, + { "dpcm-8", SF_FORMAT_DPCM_8, 1, "f32", SPA_AUDIO_FORMAT_F32, 4, FORMAT_ENCODED }, }; static const struct format_info *format_info_by_name(const char *str) { SPA_FOR_EACH_ELEMENT_VAR(format_info, i) - if (spa_streq(str, i->name)) + if (spa_streq(str, i->sf_name)) return i; return NULL; } @@ -263,7 +268,7 @@ fprintf(stdout, _("Supported formats:\n")); SPA_FOR_EACH_ELEMENT_VAR(format_info, i) - fprintf(stdout, " %s\n", i->name); + fprintf(stdout, " %s\n", i->sf_name); } static int sf_playback_fill_x8(struct data *d, void *dest, unsigned int n_frames, bool *null_frame) @@ -1676,8 +1681,13 @@ if (info == NULL) return -EINVAL; + if (info->flags & FORMAT_ENCODED) { + fprintf(stderr, "raw: raw encoded format %s not supported\n", info->sf_name); + return -ENOTSUP; + } + data->spa_format = info->spa_format; - data->stride = info->width * data->channels; + data->stride = info->spa_width * data->channels; data->fill = data->mode == mode_playback ? raw_play : raw_record; if (spa_streq(data->filename, "-")) { @@ -1696,7 +1706,7 @@ if (data->verbose) fprintf(stderr, "raw: rate=%u channels=%u fmt=%s samplesize=%u stride=%u\n", data->rate, data->channels, - info->name, info->width, data->stride); + info->spa_name, info->spa_width, data->stride); return 0; } @@ -2034,14 +2044,10 @@ if (data->verbose) fprintf(stderr, "PCM: fmt:%s rate:%u channels:%u width:%u\n", - fi->name, data->rate, data->channels, fi->width); - - /* we read and write S24 as S32 with sndfile */ - if (fi->spa_format == SPA_AUDIO_FORMAT_S24) - fi = format_info_by_sf_format(SF_FORMAT_PCM_32); + fi->spa_name, data->rate, data->channels, fi->spa_width); data->spa_format = fi->spa_format; - data->stride = fi->width * data->channels; + data->stride = fi->spa_width * data->channels; data->fill = data->mode == mode_playback ? playback_fill_fn(data->spa_format) : record_fill_fn(data->spa_format); ++++++ pipewire.obsinfo ++++++ --- /var/tmp/diff_new_pack.vAtVEl/_old 2026-03-10 17:47:22.960859102 +0100 +++ /var/tmp/diff_new_pack.vAtVEl/_new 2026-03-10 17:47:22.964859268 +0100 @@ -1,5 +1,5 @@ name: pipewire -version: 1.6.0 -mtime: 1771491574 -commit: 700cea78dbe7564131d51b21a7795e2567ee048a +version: 1.6.1 +mtime: 1773047831 +commit: b7341d068947225fcdf62d39277606e8516d7f52
