Projects
home:zaitor:branches:Essentials
pipewire-aptx
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 4
View file
pipewire-aptx.spec
Changed
@@ -8,7 +8,7 @@ %define minimum_version 1.6.0 Name: pipewire-aptx -Version: 1.6.3 +Version: 1.6.4 Release: 0 Summary: PipeWire Bluetooth aptX codec plugin License: MIT
View file
_service:download_files:pipewire-1.6.3.tar.bz2/NEWS -> _service:download_files:pipewire-1.6.4.tar.bz2/NEWS
Changed
@@ -1,5 +1,44 @@ +# PipeWire 1.6.4 (2026-04-22) + +This is a bugfix release that is API and ABI compatible with the previous +1.6.x releases. + +## Highlights + - Small improvements and seqfault fixes. + - Try to not emit ports that JACK doesn't understand. Fixes glitches in + ardour and other JACK apps. + + +## PipeWire + - Refuse to load plugins and crash when pw_init() was not called. (!2784) + +## SPA + - Fix LADSPA plugin loading, support LADSPA_PATH ending with / + - Fix segfault in alsa-seq when removing devices in some cases. (#5221) + - Allow negative gain in mixer. (#5228) + - Improve alsa-seq port names, add : between client and port. (#5229) + - ACP: don’t override user-selected port on availability changes. + +## Bluetooth + - Backport some important fixes and minor improvements. + +## JACK + - Ignore non DSP ports to avoid emitting extra callbacks. + +## GStreamer + - Fix crop metadata. + +## Tools + - Fix WAVEX saving in pw-cat. (#5233) + + +Older versions: + # PipeWire 1.6.3 (2026-04-09) +This is a bugfix release that is API and ABI compatible with the previous +1.6.x releases. + ## Highlights - Fix some RAOP compatibility regressions. - Fix segfault in the mixer in some cases. @@ -34,9 +73,6 @@ - Make sure timebase callback is never called with 0 frames. - Increase the notify queue to avoid losing notifications. - -Older versions: - # PipeWire 1.6.2 (2026-03-16) This is a bugfix release that is API and ABI compatible with the previous
View file
_service:download_files:pipewire-1.6.3.tar.bz2/meson.build -> _service:download_files:pipewire-1.6.4.tar.bz2/meson.build
Changed
@@ -1,5 +1,5 @@ project('pipewire', 'c' , - version : '1.6.3', + version : '1.6.4', 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.3.tar.bz2/pipewire-jack/src/pipewire-jack.c -> _service:download_files:pipewire-1.6.4.tar.bz2/pipewire-jack/src/pipewire-jack.c
Changed
@@ -73,7 +73,6 @@ #define TYPE_ID_IS_EVENT(t) ((t) >= TYPE_ID_MIDI && (t) <= TYPE_ID_UMP) #define TYPE_ID_CAN_OSC(t) ((t) == TYPE_ID_MIDI || (t) == TYPE_ID_OSC) -#define TYPE_ID_IS_HIDDEN(t) ((t) >= TYPE_ID_OTHER) #define TYPE_ID_IS_COMPATIBLE(a,b)(((a) == (b)) || (TYPE_ID_IS_EVENT(a) && TYPE_ID_IS_EVENT(b))) #define SELF_CONNECT_ALLOW 0 @@ -3894,8 +3893,9 @@ const char *name; if ((str = spa_dict_lookup(props, PW_KEY_FORMAT_DSP)) == NULL) - str = "other"; - if ((type_id = string_to_type(str)) == SPA_ID_INVALID) + goto exit; + if ((type_id = string_to_type(str)) == SPA_ID_INVALID || + !type_is_dsp(type_id)) goto exit; if ((str = spa_dict_lookup(props, PW_KEY_NODE_ID)) == NULL) @@ -5531,7 +5531,8 @@ return NULL; } - if ((type_id = string_to_type(port_type)) == SPA_ID_INVALID) { + if ((type_id = string_to_type(port_type)) == SPA_ID_INVALID || + !type_is_dsp(type_id)) { pw_log_warn("unknown port type %s", port_type); return NULL; } @@ -6935,8 +6936,6 @@ continue; pw_log_debug("%p: check port type:%d flags:%08lx name:\"%s\"", c, o->port.type_id, o->port.flags, o->port.name); - if (TYPE_ID_IS_HIDDEN(o->port.type_id)) - continue; if (!SPA_FLAG_IS_SET(o->port.flags, flags)) continue; if (str != NULL && o->port.node != NULL) {
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/alsa/alsa-acp-device.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/alsa/alsa-acp-device.c
Changed
@@ -990,11 +990,22 @@ for (i = 0; i < p->n_devices; i++) { struct acp_device *d = p->devicesi; + struct acp_port *active_port = NULL; + uint32_t j; uint32_t best; if (!(d->flags & ACP_DEVICE_ACTIVE)) continue; + for (j = 0; j < d->n_ports; j++) { + if (d->portsj->flags & ACP_PORT_ACTIVE) { + active_port = d->portsj; + break; + } + } + if (active_port != NULL && active_port->available != ACP_AVAILABLE_NO) + continue; + best = acp_device_find_best_port_index(d, NULL); acp_device_set_port(d, best, 0); }
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/alsa/alsa-seq-bridge.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/alsa/alsa-seq-bridge.c
Changed
@@ -261,7 +261,7 @@ if (spa_strstartswith(pn, client_name)) pn += strlen(client_name); - snprintf(name, sizeof(name), "%s%s%s (%s)", prefix, + snprintf(name, sizeof(name), "%s%s:%s (%s)", prefix, client_name, pn, dir); clean_name(name); @@ -388,13 +388,29 @@ return port; } +static int do_port_clear(struct spa_loop *loop, bool async, uint32_t seq, + const void *data, size_t size, void *user_data) +{ + struct seq_port *port = user_data; + port->io = NULL; + if (port->mixing) { + spa_list_remove(&port->mix_link); + port->mixing = false; + } + return 0; +} + static void free_port(struct seq_state *state, struct seq_stream *stream, struct seq_port *port) { stream->portsport->id = NULL; spa_list_remove(&port->link); + spa_loop_locked(state->data_loop, + do_port_clear, SPA_ID_INVALID, NULL, 0, port); + spa_node_emit_port_info(&state->hooks, port->direction, port->id, NULL); + spa_zero(*port); spa_list_append(&state->free_list, &port->link); } @@ -441,7 +457,7 @@ struct seq_port *port = find_port(state, stream, addr); if (info == NULL) { - spa_log_debug(state->log, "free port %d.%d", addr->client, addr->port); + spa_log_debug(state->log, "free port %d.%d %p", addr->client, addr->port, port); if (port) free_port(state, stream, port); } else { @@ -453,7 +469,7 @@ init_port(state, port, addr, snd_seq_port_info_get_type(info)); } else if (port != NULL) { if ((caps & stream->caps) != stream->caps) { - spa_log_debug(state->log, "free port %d.%d", addr->client, addr->port); + spa_log_debug(state->log, "free port %d.%d %p", addr->client, addr->port, port); free_port(state, stream, port); } else { @@ -470,8 +486,8 @@ struct seq_state *state = data; if (info == NULL) { - update_stream_port(state, &state->streamsSPA_DIRECTION_INPUT, addr, 0, info); - update_stream_port(state, &state->streamsSPA_DIRECTION_OUTPUT, addr, 0, info); + update_stream_port(state, &state->streamsSPA_DIRECTION_INPUT, addr, 0, NULL); + update_stream_port(state, &state->streamsSPA_DIRECTION_OUTPUT, addr, 0, NULL); } else { unsigned int caps = snd_seq_port_info_get_capability(info); @@ -820,7 +836,7 @@ info.data = data; info.size = size; - spa_log_debug(this->log, "%p: io %d.%d %d %p %zd", this, + spa_log_debug(this->log, "%p: %p: io %d.%d %d %p %zd", this, port, direction, port_id, id, data, size); switch (id) { @@ -841,7 +857,7 @@ spa_return_val_if_fail(this != NULL, -EINVAL); - spa_return_val_if_fail(!CHECK_PORT(this, SPA_DIRECTION_OUTPUT, port_id), -EINVAL); + spa_return_val_if_fail(CHECK_PORT(this, SPA_DIRECTION_OUTPUT, port_id), -EINVAL); port = GET_PORT(this, SPA_DIRECTION_OUTPUT, port_id);
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/alsa/mixer/paths/analog-output-headphones.conf -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/alsa/mixer/paths/analog-output-headphones.conf
Changed
@@ -93,6 +93,12 @@ override-map.1 = all override-map.2 = all-left,all-right +; Keep Line Out disabled in the headphones path so selecting headphones +; does not also drive speaker/line outputs on shared controls. +Element Line Out +switch = off +volume = off + ; This path is intended to control the first headphones, not ; the second headphones. But it should not hurt if we leave the second ; headphone jack enabled nonetheless.
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/alsa/mixer/paths/analog-output-lineout.conf -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/alsa/mixer/paths/analog-output-lineout.conf
Changed
@@ -113,10 +113,23 @@ override-map.2 = all-left,all-right required-any = any +Element Line Out +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + Element Master Mono switch = off volume = off +; Prefer manual routing decisions by disabling codec auto-mute here. +Element Auto-Mute Mode +enumeration = select + +Option Auto-Mute Mode:Disabled +name = analog-output-lineout + Element Line HP Swap switch = off required-any = any
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/audioconvert/audioconvert.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/audioconvert/audioconvert.c
Changed
@@ -1284,7 +1284,7 @@ return -ENOMEM; } this->tmp_datas0i = SPA_PTR_ALIGN(this->tmp0i, MAX_ALIGN, void); - this->tmp_datas0i = SPA_PTR_ALIGN(this->tmp0i, MAX_ALIGN, void); + this->tmp_datas1i = SPA_PTR_ALIGN(this->tmp1i, MAX_ALIGN, void); } this->scratch_ports = maxports; }
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/a2dp-codec-aac.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/a2dp-codec-aac.c
Changed
@@ -286,7 +286,7 @@ return NULL; if (settings == NULL || (str = spa_dict_lookup(settings, "bluez5.a2dp.aac.bitratemode")) == NULL) - str = "0"; + str = "5"; p->bitratemode = SPA_CLAMP(atoi(str), 0, 5); return p; @@ -380,8 +380,12 @@ // Fragmentation is not implemented yet, // so make sure every encoded AAC frame fits in (mtu - header) this->max_bitrate = ((this->mtu - sizeof(struct rtp_header)) * 8 * this->rate) / 1024; - this->max_bitrate = SPA_MIN(this->max_bitrate, get_valid_aac_bitrate(conf)); - this->cur_bitrate = this->max_bitrate; + this->cur_bitrate = SPA_MIN(this->max_bitrate, get_valid_aac_bitrate(conf)); + spa_log_debug(log, "AAC: max (peak) bitrate: %d, cur bitrate: %d, mode: %d (vbr: %d)", + this->max_bitrate, + this->cur_bitrate, + bitratemode, + conf->vbr); res = aacEncoder_SetParam(this->aacenc, AACENC_BITRATE, this->cur_bitrate); if (res != AACENC_OK) @@ -391,6 +395,15 @@ if (res != AACENC_OK) goto error; + // Assume >110 kbit/s as a "high bitrate" CBR and increase the + // band pass cutout up to 19.3 kHz (as in mode 5 VBR). + if (!conf->vbr && this->cur_bitrate > 110000) { + res = aacEncoder_SetParam(this->aacenc, AACENC_BANDWIDTH, + 19293); + if (res != AACENC_OK) + goto error; + } + res = aacEncoder_SetParam(this->aacenc, AACENC_TRANSMUX, TT_MP4_LATM_MCP1); if (res != AACENC_OK) goto error;
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/backend-native.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/backend-native.c
Changed
@@ -904,7 +904,7 @@ { int res; bool alt6_ok = true, alt1_ok = true; - bool msbc_alt6_ok = true, msbc_alt1_ok = true; + bool msbc_alt6_ok = true, msbc_alt1_ok = true, lc3_a127_ok = true; uint32_t bt_features; if (device->adapter == NULL) @@ -913,6 +913,7 @@ if (backend->quirks && spa_bt_quirks_get_features(backend->quirks, device->adapter, device, &bt_features) == 0) { msbc_alt1_ok = (bt_features & (SPA_BT_FEATURE_MSBC_ALT1 | SPA_BT_FEATURE_MSBC_ALT1_RTL)); msbc_alt6_ok = (bt_features & SPA_BT_FEATURE_MSBC); + lc3_a127_ok = (bt_features & SPA_BT_FEATURE_LC3_A127); } switch (codec) { @@ -922,6 +923,10 @@ alt1_ok = msbc_alt1_ok; alt6_ok = msbc_alt6_ok; break; + case SPA_BLUETOOTH_AUDIO_CODEC_LC3_A127: + alt1_ok = false; + alt6_ok = lc3_a127_ok; + break; case SPA_BLUETOOTH_AUDIO_CODEC_LC3_SWB: default: /* LC3-SWB has same transport requirements as msbc. @@ -986,8 +991,11 @@ for (i = 0; backend->codecsi; ++i) { const struct media_codec *codec = backend->codecsi; + if (codec->kind != MEDIA_CODEC_HFP) continue; + if (!spa_bt_get_hfp_codec(backend->monitor, codec->codec_id)) + continue; if (device_supports_codec(backend, device, codec->id)) codec_list_add(codec_list, codec); }
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/bap-codec-lc3.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/bap-codec-lc3.c
Changed
@@ -1503,6 +1503,10 @@ struct ltv_writer writer = LTV_WRITER(caps, *caps_size); const struct bap_qos *preset = NULL; + uint32_t retransmissions = 0; + uint8_t rtn_manual_set = 0; + uint32_t max_transport_latency = 0; + uint32_t presentation_delay = 0; *caps_size = 0; if (settings) { @@ -1511,6 +1515,14 @@ sscanf(settings->itemsi.value, "%"PRIu32, &channel_allocation); if (spa_streq(settings->itemsi.key, "preset")) preset_name = settings->itemsi.value; + if (spa_streq(settings->itemsi.key, "max_transport_latency")) + spa_atou32(settings->itemsi.value, &max_transport_latency, 0); + if (spa_streq(settings->itemsi.key, "presentation_delay")) + spa_atou32(settings->itemsi.value, &presentation_delay, 0); + if (spa_streq(settings->itemsi.key, "retransmissions")) { + spa_atou32(settings->itemsi.value, &retransmissions, 0); + rtn_manual_set = 1; + } } } @@ -1537,9 +1549,9 @@ else qos->framing = 0; qos->sdu = preset->framelen * get_channel_count(channel_allocation); - qos->retransmission = preset->retransmission; - qos->latency = preset->latency; - qos->delay = preset->delay; + qos->retransmission = rtn_manual_set ? retransmissions : preset->retransmission; + qos->latency = max_transport_latency ? max_transport_latency : preset->latency; + qos->delay = presentation_delay ? presentation_delay : preset->delay; qos->phy = 2; qos->interval = (preset->frame_duration == LC3_CONFIG_DURATION_7_5 ? 7500 : 10000);
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/bluez-hardware.conf -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/bluez-hardware.conf
Changed
@@ -15,6 +15,7 @@ # sbc-xq "nonstandard" SBC codec setting with better sound quality # faststream FastStream codec support # a2dp-duplex A2DP duplex codec support +# lc3-a127 HFP LC3-24KHz codec support # # Features are disabled with the key "no-features" whose value is an # array of strings in the match rule. @@ -83,6 +84,12 @@ # Realtek Semiconductor Corp. { bus-type = "usb", vendor-id = "usb:0bda" }, + # Mediatek MT7925, #pipewire-5213 + { bus-type = "usb", vendor-id = "usb:0e8d", product-id = "~(e025)", no-features = lc3-a127 }, + { bus-type = "usb", vendor-id = "usb:0489", product-id = "~(e111|e113|e118|e11e|e124|e139|e14e|e14f|e150|e151)", no-features = lc3-a127 }, + { bus-type = "usb", vendor-id = "usb:13d3", product-id = "~(3602|3603|3604|3608|3613|3627|3628|3630)", no-features = lc3-a127 }, + { bus-type = "usb", vendor-id = "usb:2c7c", product-id = "~(7009)", no-features = lc3-a127 }, + # Generic USB adapters { bus-type = "usb", no-features = msbc-alt1-rtl },
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/bluez5-dbus.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/bluez5-dbus.c
Changed
@@ -188,9 +188,16 @@ uint8_t valueMETADATA_MAX_LEN - 1; }; +#define RTN_MAX 0x1E +#define MAX_TRANSPORT_LATENCY_MIN 0x5 +#define MAX_TRANSPORT_LATENCY_MAX 0x0FA0 + struct spa_bt_bis { struct spa_list link; char qos_preset255; + int retransmissions; + int rtn_manual_set; + int max_transport_latency; int channel_allocation; struct spa_list metadata_list; }; @@ -6192,8 +6199,11 @@ struct bap_codec_qos qos; struct spa_bt_metadata *metadata_entry; struct spa_dict settings; - struct spa_dict_item setting_items2; + struct spa_dict_item setting_items4; + uint32_t n_items = 0; char channel_allocation64 = {0}; + char retransmissions3 = {0}; + char max_transport_latency5 = {0}; int mse = 0; int options = 0; @@ -6218,12 +6228,27 @@ metadata_size += metadata_entry->length - 1; } + spa_log_debug(monitor->log, "bis->channel_allocation %d", bis->channel_allocation); - if (bis->channel_allocation) + if (bis->channel_allocation) { spa_scnprintf(channel_allocation, sizeof(channel_allocation), "%"PRIu32, bis->channel_allocation); - setting_items0 = SPA_DICT_ITEM_INIT("channel_allocation", channel_allocation); - setting_items1 = SPA_DICT_ITEM_INIT("preset", bis->qos_preset); - settings = SPA_DICT_INIT(setting_items, 2); + } + spa_log_debug(monitor->log, "bis->rtn_manual_set %d", bis->rtn_manual_set); + spa_log_debug(monitor->log, "bis->retransmissions %d", bis->retransmissions); + if (bis->rtn_manual_set) { + spa_scnprintf(retransmissions, sizeof(retransmissions), "%"PRIu8, bis->retransmissions); + setting_itemsn_items++ = SPA_DICT_ITEM_INIT("retransmissions", retransmissions); + } + spa_log_debug(monitor->log, "bis->max_transport_latency %d", bis->max_transport_latency); + if (bis->max_transport_latency) { + spa_scnprintf(max_transport_latency, sizeof(max_transport_latency), "%"PRIu32, bis->max_transport_latency); + setting_itemsn_items++ = SPA_DICT_ITEM_INIT("max_transport_latency", max_transport_latency); + } + + setting_itemsn_items++ = SPA_DICT_ITEM_INIT("preset", bis->qos_preset); + setting_itemsn_items++ = SPA_DICT_ITEM_INIT("channel_allocation", channel_allocation); + + settings = SPA_DICT_INIT(setting_items, n_items); caps_size = sizeof(caps); ret = codec->get_bis_config(codec, caps, &caps_size, &settings, &qos); @@ -7126,6 +7151,20 @@ if (spa_json_get_string(&it1, bis_entry->qos_preset, sizeof(bis_entry->qos_preset)) <= 0) goto parse_failed; spa_log_debug(monitor->log, "bis_entry->qos_preset %s", bis_entry->qos_preset); + } else if (spa_streq(bis_key, "retransmissions")) { + if (spa_json_get_int(&it2, &bis_entry->retransmissions) <= 0) + goto parse_failed; + if (bis_entry->retransmissions > RTN_MAX) + goto parse_failed; + bis_entry->rtn_manual_set = 1; + spa_log_debug(monitor->log, "bis_entry->retransmissions %d", bis_entry->retransmissions); + } else if (spa_streq(bis_key, "max_transport_latency")) { + if (spa_json_get_int(&it2, &bis_entry->max_transport_latency) <= 0) + goto parse_failed; + if (bis_entry->max_transport_latency < MAX_TRANSPORT_LATENCY_MIN && + bis_entry->max_transport_latency > MAX_TRANSPORT_LATENCY_MAX) + goto parse_failed; + spa_log_debug(monitor->log, "bis_entry->max_transport_latency %d", bis_entry->max_transport_latency); } else if (spa_streq(bis_key, "audio_channel_allocation")) { if (spa_json_get_int(&it1, &bis_entry->channel_allocation) <= 0) goto parse_failed;
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/defs.h -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/defs.h
Changed
@@ -811,6 +811,7 @@ SPA_BT_FEATURE_SBC_XQ = (1 << 5), SPA_BT_FEATURE_FASTSTREAM = (1 << 6), SPA_BT_FEATURE_A2DP_DUPLEX = (1 << 7), + SPA_BT_FEATURE_LC3_A127 = (1 << 8), }; struct spa_bt_quirks;
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/iso-io.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/iso-io.c
Changed
@@ -411,7 +411,7 @@ /* Ensure controller fill level */ fill_count = UINT_MAX; spa_list_for_each(stream, &group->streams, link) { - if (!stream->sink || !group->started) + if (!stream->sink || !group->started || !stream->tx_latency.enabled) continue; if (stream->tx_latency.queue < MIN_FILL) fill_count = SPA_MIN(fill_count, MIN_FILL - stream->tx_latency.queue);
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/bluez5/quirks.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/bluez5/quirks.c
Changed
@@ -52,6 +52,7 @@ int force_sbc_xq; int force_faststream; int force_a2dp_duplex; + int force_lc3_a127; char *device_rules; char *adapter_rules; @@ -69,6 +70,7 @@ { "sbc-xq", SPA_BT_FEATURE_SBC_XQ }, { "faststream", SPA_BT_FEATURE_FASTSTREAM }, { "a2dp-duplex", SPA_BT_FEATURE_A2DP_DUPLEX }, + { "lc3-a127", SPA_BT_FEATURE_LC3_A127 }, }; SPA_FOR_EACH_ELEMENT_VAR(feature_keys, f) { if (spa_streq(str, f->key)) @@ -228,6 +230,7 @@ this->force_hw_volume = parse_force_flag(info, "bluez5.enable-hw-volume"); this->force_faststream = parse_force_flag(info, "bluez5.enable-faststream"); this->force_a2dp_duplex = parse_force_flag(info, "bluez5.enable-a2dp-duplex"); + this->force_lc3_a127 = parse_force_flag(info, "bluez5.enable-lc3-a127"); if ((str = spa_dict_lookup(info, "bluez5.hardware-database")) != NULL) { spa_log_debug(this->log, "loading session manager provided data"); @@ -385,6 +388,9 @@ if (this->force_a2dp_duplex != -1) SPA_FLAG_UPDATE(*features, SPA_BT_FEATURE_A2DP_DUPLEX, this->force_a2dp_duplex); + if (this->force_lc3_a127 != -1) + SPA_FLAG_UPDATE(*features, SPA_BT_FEATURE_LC3_A127, this->force_lc3_a127); + return 0; }
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/filter-graph/plugin_builtin.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/filter-graph/plugin_builtin.c
Changed
@@ -201,42 +201,42 @@ { .index = 9, .name = "Gain 1", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 10, .name = "Gain 2", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 11, .name = "Gain 3", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 12, .name = "Gain 4", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 13, .name = "Gain 5", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 14, .name = "Gain 6", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 15, .name = "Gain 7", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 16, .name = "Gain 8", .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, - .def = 1.0f, .min = 0.0f, .max = 10.0f + .def = 1.0f, .min = -10.0f, .max = 10.0f }, };
View file
_service:download_files:pipewire-1.6.3.tar.bz2/spa/plugins/filter-graph/plugin_ladspa.c -> _service:download_files:pipewire-1.6.4.tar.bz2/spa/plugins/filter-graph/plugin_ladspa.c
Changed
@@ -265,7 +265,7 @@ if (len == 0 || len >= sizeof(filename)) continue; - if (strncmp(path, p, len) == 0 && pathlen == '/') + if (strncmp(path, p, len) == 0 && (pathlen-1 == '/' || pathlen == '/')) namelen = snprintf(filename, sizeof(filename), "%s", path); else namelen = snprintf(filename, sizeof(filename), "%.*s/%s.so", (int) len, p, path);
View file
_service:download_files:pipewire-1.6.3.tar.bz2/src/gst/gstpipewiresink.c -> _service:download_files:pipewire-1.6.4.tar.bz2/src/gst/gstpipewiresink.c
Changed
@@ -655,7 +655,7 @@ data->crop->region.position.x = meta->x; data->crop->region.position.y = meta->y; data->crop->region.size.width = meta->width; - data->crop->region.size.height = meta->width; + data->crop->region.size.height = meta->height; } } data->b->size = 0;
View file
_service:download_files:pipewire-1.6.3.tar.bz2/src/modules/module-jack-tunnel/weakjack.h -> _service:download_files:pipewire-1.6.4.tar.bz2/src/modules/module-jack-tunnel/weakjack.h
Changed
@@ -178,7 +178,7 @@ if (len == 0 || len >= sizeof(path)) continue; - if (strncmp(lib, p, len) == 0 && liblen == '/') + if (strncmp(lib, p, len) == 0 && (liblen-1 == '/' || liblen == '/')) pathlen = snprintf(path, sizeof(path), "%s", lib); else pathlen = snprintf(path, sizeof(path), "%.*s/%s", (int) len, p, lib);
View file
_service:download_files:pipewire-1.6.3.tar.bz2/src/pipewire/pipewire.c -> _service:download_files:pipewire-1.6.4.tar.bz2/src/pipewire/pipewire.c
Changed
@@ -300,10 +300,18 @@ const struct spa_support support) { struct spa_handle *handle; + struct support *sup = &global_support; pthread_mutex_lock(&support_lock); + if (sup->init_count == 0) + goto error; handle = load_spa_handle(lib, factory_name, info, n_support, support); pthread_mutex_unlock(&support_lock); return handle; +error: + pw_log_error("load lib: pw_init() was not called"); + pthread_mutex_unlock(&support_lock); + errno = EBADFD; + return NULL; } static struct handle *find_handle(struct spa_handle *handle)
View file
_service:download_files:pipewire-1.6.3.tar.bz2/src/tools/pw-cat.c -> _service:download_files:pipewire-1.6.4.tar.bz2/src/tools/pw-cat.c
Changed
@@ -1821,6 +1821,7 @@ case SF_FORMAT_FLAC: case SF_FORMAT_MPEG: case SF_FORMAT_AIFF: + case SF_FORMAT_WAVEX: info->format |= SF_ENDIAN_FILE; break; default:
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
.