Projects
Essentials
pipewire-aptx
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 67
View file
pipewire-aptx.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Wed May 27 08:06:05 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.6.6 + +------------------------------------------------------------------- Thu May 14 17:45:09 UTC 2026 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.6.5
View file
pipewire-aptx.spec
Changed
@@ -8,7 +8,7 @@ %define minimum_version 1.6.0 Name: pipewire-aptx -Version: 1.6.5 +Version: 1.6.6 Release: 0 Summary: PipeWire Bluetooth aptX codec plugin License: MIT
View file
_service:download_files:pipewire-1.6.5.tar.bz2/NEWS -> _service:download_files:pipewire-1.6.6.tar.bz2/NEWS
Changed
@@ -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
View file
_service:download_files:pipewire-1.6.5.tar.bz2/meson.build -> _service:download_files:pipewire-1.6.6.tar.bz2/meson.build
Changed
@@ -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',
View file
_service:download_files:pipewire-1.6.5.tar.bz2/spa/plugins/audioconvert/audioconvert.c -> _service:download_files:pipewire-1.6.6.tar.bz2/spa/plugins/audioconvert/audioconvert.c
Changed
@@ -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->datass->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->datass->in_idx, c->n_samples); @@ -3685,7 +3686,7 @@ struct dir *dir = &impl->dirSPA_DIRECTION_OUTPUT; void *remap_datasMAX_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->datass->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->datass->out_idx, c->n_samples); else convert_process(&dir->conv, c->datass->out_idx, (const void **)src, c->n_samples); @@ -3733,11 +3734,11 @@ /* set bits for things we need to do */ dir = &this->dirSPA_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->dirSPA_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);
View file
_service:download_files:pipewire-1.6.5.tar.bz2/spa/plugins/audioconvert/fmt-ops.c -> _service:download_files:pipewire-1.6.6.tar.bz2/spa/plugins/audioconvert/fmt-ops.c
Changed
@@ -630,7 +630,8 @@ for (i = 0; i < RANDOM_SIZE; i++) conv->randomi = 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;
View file
_service:download_files:pipewire-1.6.5.tar.bz2/spa/plugins/audioconvert/fmt-ops.h -> _service:download_files:pipewire-1.6.6.tar.bz2/spa/plugins/audioconvert/fmt-ops.h
Changed
@@ -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)
View file
_service:download_files:pipewire-1.6.5.tar.bz2/spa/plugins/filter-graph/filter-graph.c -> _service:download_files:pipewire-1.6.6.tar.bz2/spa/plugins/filter-graph/filter-graph.c
Changed
@@ -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->maxn_port - vol->minn_port) + vol->minn_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 modulePATH_MAX; - char factory_name256, dsp_ptr256; + char factory_name256, dsp_ptr256, filter16; 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;
View file
_service:download_files:pipewire-1.6.5.tar.bz2/spa/plugins/filter-graph/plugin_ladspa.c -> _service:download_files:pipewire-1.6.6.tar.bz2/spa/plugins/filter-graph/plugin_ladspa.c
Changed
@@ -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 filenamePATH_MAX; size_t len; + if (!impl->filter_path && path0 == '/') + 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->itemsi.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",
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-native/connection.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-native/connection.c
Changed
@@ -538,7 +538,8 @@ size -= impl->hdr_size; buf->msg.fds = &buf->fdsbuf->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)
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c
Changed
@@ -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) {
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-pulse/modules/module-ladspa-source.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-pulse/modules/module-ladspa-source.c
Changed
@@ -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) {
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-pulse/pulse-server.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-pulse/pulse-server.c
Changed
@@ -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");
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-pulse/server.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-pulse/server.c
Changed
@@ -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)
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/modules/module-protocol-pulse/stream.h -> _service:download_files:pipewire-1.6.6.tar.bz2/src/modules/module-protocol-pulse/stream.h
Changed
@@ -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,
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/pipewire/impl-metadata.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/pipewire/impl-metadata.c
Changed
@@ -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);
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/pipewire/impl-node.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/pipewire/impl-node.c
Changed
@@ -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);
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/tools/midifile.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/tools/midifile.c
Changed
@@ -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 buf2 = { 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 buf4 = { 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->tracks0; 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 buf4 = { 0x00, 0xff, 0x2f, 0x00 }; - CHECK_RES(write_n(mf->file, buf, 4)); + CHECK_RES(write_n(mf, buf, 4)); mf->tracks0.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 ev32; + uint8_t ev32, *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_data0 == 0xf0 || ev_data0 == 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;
View file
_service:download_files:pipewire-1.6.5.tar.bz2/src/tools/pw-cat.c -> _service:download_files:pipewire-1.6.6.tar.bz2/src/tools/pw-cat.c
Changed
@@ -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,
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.