Update to PipeWire 0.3.26 and enable JACK functionality

This updates to version 0.3.26, the version landing in Fedora 34 to resolve
a number of issues around Bluetooth audio.

Additionally, this release allows supporting JACK clients without a build dependency
on JACK itself and we can serve fully as a replacement for JACK at build-time too.

Reference upstream Fedora package commits:

* 81fb7bdd1f
* 0f423aee50
* 27a159e4ff
* fc1ac3105e

Relates: rhbz#1945951

Resolves: rhbz#1956854

Signed-off-by: Neal Gompa <ngompa13@gmail.com>
This commit is contained in:
Neal Gompa 2021-04-24 10:48:50 -04:00
parent 8074de36c9
commit 9f560c7d00
12 changed files with 45 additions and 565 deletions

2
.gitignore vendored
View File

@ -43,3 +43,5 @@
/pipewire-0.3.22.tar.gz
/pipewire-0.3.23.tar.gz
/pipewire-0.3.24.tar.gz
/pipewire-0.3.25.tar.gz
/pipewire-0.3.26.tar.gz

View File

@ -1,80 +0,0 @@
From 503feaa3fa857982c5f1b3c8cfc224ea99cd17a5 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Fri, 19 Mar 2021 12:46:05 +0100
Subject: [PATCH 02/10] pipewire-pulse: set correct errno values
errno should be set to the positive errno value.
This does not cause problems except for the pulse-server where the
errno value is negated and returned as an error result.
---
spa/plugins/alsa/alsa-pcm-device.c | 2 +-
spa/plugins/bluez5/bluez5-device.c | 4 ++--
spa/plugins/jack/jack-device.c | 2 +-
src/modules/module-protocol-pulse/module.c | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/spa/plugins/alsa/alsa-pcm-device.c b/spa/plugins/alsa/alsa-pcm-device.c
index 285a76f28..af30ed2da 100644
--- a/spa/plugins/alsa/alsa-pcm-device.c
+++ b/spa/plugins/alsa/alsa-pcm-device.c
@@ -355,7 +355,7 @@ static struct spa_pod *build_profile(struct impl *this, struct spa_pod_builder *
desc = "On";
break;
default:
- errno = -EINVAL;
+ errno = EINVAL;
return NULL;
}
diff --git a/spa/plugins/bluez5/bluez5-device.c b/spa/plugins/bluez5/bluez5-device.c
index 7a747f415..b8d8ae5a9 100644
--- a/spa/plugins/bluez5/bluez5-device.c
+++ b/spa/plugins/bluez5/bluez5-device.c
@@ -660,7 +660,7 @@ static struct spa_pod *build_profile(struct impl *this, struct spa_pod_builder *
break;
}
default:
- errno = -EINVAL;
+ errno = EINVAL;
return NULL;
}
@@ -775,7 +775,7 @@ static struct spa_pod *build_route(struct impl *this, struct spa_pod_builder *b,
snprintf(name, sizeof(name), "%s-output", name_prefix);
break;
default:
- errno = -EINVAL;
+ errno = EINVAL;
return NULL;
}
diff --git a/spa/plugins/jack/jack-device.c b/spa/plugins/jack/jack-device.c
index 75d6522e8..3c56e0a20 100644
--- a/spa/plugins/jack/jack-device.c
+++ b/spa/plugins/jack/jack-device.c
@@ -244,7 +244,7 @@ static struct spa_pod *build_profile(struct impl *this, struct spa_pod_builder *
desc = "On";
break;
default:
- errno = -EINVAL;
+ errno = EINVAL;
return NULL;
}
diff --git a/src/modules/module-protocol-pulse/module.c b/src/modules/module-protocol-pulse/module.c
index 52a90fbe3..987f65ef7 100644
--- a/src/modules/module-protocol-pulse/module.c
+++ b/src/modules/module-protocol-pulse/module.c
@@ -176,7 +176,7 @@ static struct module *create_module(struct client *client, const char *name, con
info = find_module_info(name);
if (info == NULL) {
- errno = -ENOENT;
+ errno = ENOENT;
return NULL;
}
module = info->create(impl, args);
--
2.26.3

View File

@ -1,67 +0,0 @@
From edf102a6659b4eb58eebf055d459e182508a521c Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Fri, 19 Mar 2021 15:51:17 +0100
Subject: [PATCH 03/10] media-session: check stream move after configuring a
new node
When a new node is configured, check if existing streams might need to
be moved to it.
This fixes the case where a stream has a target node set to some
bluetooth device and it starts playing to the default device because
the bluetooth device is not connected. When the BT device is then
connected and configured, the stream is moved to the new BT device.
---
src/examples/media-session/policy-node.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/examples/media-session/policy-node.c b/src/examples/media-session/policy-node.c
index 966da2fe3..7ed73e9a5 100644
--- a/src/examples/media-session/policy-node.c
+++ b/src/examples/media-session/policy-node.c
@@ -123,6 +123,8 @@ struct node {
unsigned int virtual:1;
};
+static int check_new_target(struct impl *impl, struct node *target);
+
static bool find_format(struct node *node)
{
struct impl *impl = node->impl;
@@ -210,6 +212,9 @@ static int configure_node(struct node *node, struct spa_audio_info *info, bool f
node->configured = true;
+ if (node->type == NODE_TYPE_DEVICE)
+ check_new_target(impl, node);
+
return 0;
}
@@ -970,6 +975,23 @@ static int handle_move(struct impl *impl, struct node *src_node, struct node *ds
return do_move_node(src_node, src_node->peer, dst_node);
}
+static int check_new_target(struct impl *impl, struct node *target)
+{
+ struct node *node;
+ const char *str = get_device_name(target);
+
+ spa_list_for_each(node, &impl->node_list, link) {
+ pw_log_debug(NAME" %p: node %d target '%s' find:%s", impl,
+ node->id, node->obj->target_node, str);
+
+ if (node->obj->target_node != NULL &&
+ strcmp(node->obj->target_node , str) == 0) {
+ handle_move(impl, node, target);
+ }
+ }
+ return 0;
+}
+
static int metadata_property(void *object, uint32_t subject,
const char *key, const char *type, const char *value)
{
--
2.26.3

View File

@ -1,51 +0,0 @@
From c0897f2f2cb02d1f1f7893e84c1961313d60c0aa Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
Date: Sat, 20 Mar 2021 15:02:55 +0200
Subject: [PATCH 04/10] pulse-server: don't send invalid port profile arrays
libpulse assumes in introspect.c:fill_card_port_info that port profile
array size <= card profile array size, and may crash otherwise.
Enforce this in fill_card_info. It can happen, if EnumRoute and
EnumProfile info is not in sync.
---
src/modules/module-protocol-pulse/pulse-server.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c
index cf15acce1..842abb16e 100644
--- a/src/modules/module-protocol-pulse/pulse-server.c
+++ b/src/modules/module-protocol-pulse/pulse-server.c
@@ -3933,7 +3933,7 @@ static int fill_card_info(struct client *client, struct message *m,
for (n = 0; n < n_ports; n++) {
struct spa_dict_item *items;
struct spa_dict *pdict = NULL, dict;
- uint32_t i;
+ uint32_t i, pi_n_profiles;
pi = &port_info[n];
@@ -3952,11 +3952,18 @@ static int fill_card_info(struct client *client, struct message *m,
TAG_PROPLIST, pdict, /* port proplist */
TAG_INVALID);
+ pi_n_profiles = SPA_MIN(pi->n_profiles, n_profiles);
+ if (pi->n_profiles != pi_n_profiles) {
+ /* libpulse assumes port profile array size <= n_profiles */
+ pw_log_error(NAME" %p: card %d port %d profiles inconsistent (%d < %d)",
+ client->impl, o->id, n, n_profiles, pi->n_profiles);
+ }
+
message_put(m,
- TAG_U32, pi->n_profiles, /* n_profiles */
+ TAG_U32, pi_n_profiles, /* n_profiles */
TAG_INVALID);
- for (i = 0; i < pi->n_profiles; i++) {
+ for (i = 0; i < pi_n_profiles; i++) {
uint32_t idx = pi->profiles[i];
message_put(m,
TAG_STRING, idx < n_profiles ?
--
2.26.3

View File

@ -1,39 +0,0 @@
From 00782c4d5b3fc0a6ec3ac8e6f14d317c609ecd7c Mon Sep 17 00:00:00 2001
From: Pauli Virtanen <pav@iki.fi>
Date: Sat, 20 Mar 2021 15:32:26 +0200
Subject: [PATCH 05/10] pulse-server: fix route profile numbering
Route profile numbers refer to profile ids, not indices.
---
src/modules/module-protocol-pulse/pulse-server.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c
index 842abb16e..7a6082198 100644
--- a/src/modules/module-protocol-pulse/pulse-server.c
+++ b/src/modules/module-protocol-pulse/pulse-server.c
@@ -3964,10 +3964,18 @@ static int fill_card_info(struct client *client, struct message *m,
TAG_INVALID);
for (i = 0; i < pi_n_profiles; i++) {
- uint32_t idx = pi->profiles[i];
+ uint32_t j;
+ const char *name = "off";
+
+ for (j = 0; j < n_profiles; ++j) {
+ if (profile_info[j].id == pi->profiles[i]) {
+ name = profile_info[j].name;
+ break;
+ }
+ }
+
message_put(m,
- TAG_STRING, idx < n_profiles ?
- profile_info[idx].name : "off", /* profile name */
+ TAG_STRING, name, /* profile name */
TAG_INVALID);
}
if (client->version >= 27) {
--
2.26.3

View File

@ -1,36 +0,0 @@
From f5aba5f0dcf63996bd2444da13f353b290da3601 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Tue, 23 Mar 2021 10:17:01 +0100
Subject: [PATCH 06/10] impl-node: first start the node, then make it
schedulable
We first need to issue the start command for driver nodes and then
we can add the node to be scheduled. Else we might end up with nodes
that receive the _process callback without the Start command being
called first and we can crash.
See #904
---
src/pipewire/impl-node.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c
index 0afcab53e..75a7d2a79 100644
--- a/src/pipewire/impl-node.c
+++ b/src/pipewire/impl-node.c
@@ -338,10 +338,11 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat
switch (state) {
case PW_NODE_STATE_RUNNING:
- pw_loop_invoke(node->data_loop, do_node_add, 1, NULL, 0, true, node);
if (node->driving && node->driver)
spa_node_send_command(node->node,
&SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start));
+
+ pw_loop_invoke(node->data_loop, do_node_add, 1, NULL, 0, true, node);
break;
default:
break;
--
2.26.3

View File

@ -1,41 +0,0 @@
From aaffc0947a8144b6cfaa5ccc076bc8a7b64fb755 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Wed, 24 Mar 2021 11:48:32 +0100
Subject: [PATCH 07/10] alsa: never queue buffers when rate matching
When we are following the resampler requested size in capture, never
keep queued buffers around or we might get out of sync with the
requested size and cause cracks and pops in the resampler.
See #805
---
spa/plugins/alsa/alsa-pcm.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
index 911f12ba2..00d554070 100644
--- a/spa/plugins/alsa/alsa-pcm.c
+++ b/spa/plugins/alsa/alsa-pcm.c
@@ -1147,6 +1147,9 @@ push_frames(struct state *state,
snd_pcm_readi(state->hndl, bufs[0], total_frames);
}
}
+ spa_log_trace_fp(state->log, NAME" %p: wrote %ld frames into buffer %d",
+ state, total_frames, b->id);
+
spa_list_append(&state->ready, &b->link);
}
return total_frames;
@@ -1307,7 +1310,8 @@ static int handle_capture(struct state *state, uint64_t nsec,
return 0;
io = state->io;
- if (io != NULL && io->status != SPA_STATUS_HAVE_DATA) {
+ if (io != NULL &&
+ (io->status != SPA_STATUS_HAVE_DATA || state->rate_match != NULL)) {
struct buffer *b;
if (io->buffer_id < state->n_buffers)
--
2.26.3

View File

@ -1,82 +0,0 @@
From e5a58f1abb75fd1d51f4e769f0fffdc287ecd2d1 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 25 Mar 2021 09:08:13 +0100
Subject: [PATCH 08/10] pulse-server: handle NULL proxy
The proxy could be removed before we get the global remove so we need
to handle the case where we access an object without a proxy and
avoid a crash.
---
src/modules/module-protocol-pulse/manager.c | 2 ++
src/modules/module-protocol-pulse/pulse-server.c | 14 ++++++++++++++
2 files changed, 16 insertions(+)
diff --git a/src/modules/module-protocol-pulse/manager.c b/src/modules/module-protocol-pulse/manager.c
index 184b08035..78b8d1bb8 100644
--- a/src/modules/module-protocol-pulse/manager.c
+++ b/src/modules/module-protocol-pulse/manager.c
@@ -711,6 +711,8 @@ int pw_manager_set_metadata(struct pw_manager *manager,
return -ENOTSUP;
if (!SPA_FLAG_IS_SET(metadata->permissions, PW_PERM_W|PW_PERM_X))
return -EACCES;
+ if (metadata->proxy == NULL)
+ return -ENOENT;
if (type != NULL) {
va_start(args, format);
diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c
index 7a6082198..8efd2d609 100644
--- a/src/modules/module-protocol-pulse/pulse-server.c
+++ b/src/modules/module-protocol-pulse/pulse-server.c
@@ -3034,6 +3034,8 @@ static int set_node_volume_mute(struct pw_manager_object *o,
if (!SPA_FLAG_IS_SET(o->permissions, PW_PERM_W | PW_PERM_X))
return -EACCES;
+ if (o->proxy == NULL)
+ return -ENOENT;
spa_pod_builder_push_object(&b, &f[0],
SPA_TYPE_OBJECT_Props, SPA_PARAM_Props);
@@ -3064,6 +3066,9 @@ static int set_card_volume_mute_delay(struct pw_manager_object *o, uint32_t id,
if (!SPA_FLAG_IS_SET(o->permissions, PW_PERM_W | PW_PERM_X))
return -EACCES;
+ if (o->proxy == NULL)
+ return -ENOENT;
+
spa_pod_builder_push_object(&b, &f[0],
SPA_TYPE_OBJECT_ParamRoute, SPA_PARAM_Route);
spa_pod_builder_add(&b,
@@ -3104,6 +3109,9 @@ static int set_card_port(struct pw_manager_object *o, uint32_t device_id,
if (!SPA_FLAG_IS_SET(o->permissions, PW_PERM_W | PW_PERM_X))
return -EACCES;
+ if (o->proxy == NULL)
+ return -ENOENT;
+
pw_device_set_param((struct pw_device*)o->proxy,
SPA_PARAM_Route, 0,
spa_pod_builder_add_object(&b,
@@ -4888,6 +4896,9 @@ static int do_set_profile(struct client *client, uint32_t command, uint32_t tag,
if (!SPA_FLAG_IS_SET(o->permissions, PW_PERM_W | PW_PERM_X))
return -EACCES;
+ if (o->proxy == NULL)
+ return -ENOENT;
+
pw_device_set_param((struct pw_device*)o->proxy,
SPA_PARAM_Profile, 0,
spa_pod_builder_add_object(&b,
@@ -4960,6 +4971,9 @@ static int do_suspend(struct client *client, uint32_t command, uint32_t tag, str
if ((o = find_device(client, id, name, sink)) == NULL)
return -ENOENT;
+ if (o->proxy == NULL)
+ return -ENOENT;
+
if (suspend) {
cmd = SPA_NODE_COMMAND_Suspend;
pw_node_send_command((struct pw_node*)o->proxy, &SPA_NODE_COMMAND_INIT(cmd));
--
2.26.3

View File

@ -1,99 +0,0 @@
From f918e5e2c782b0dbc9d189ebe330a121c829193f Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 25 Mar 2021 11:30:58 +0100
Subject: [PATCH 09/10] impl-port: only add the port when buffers are
negotiated
To avoid crashes when the node is scheduled but buffer have been
cleared.
See #904
---
src/pipewire/impl-port.c | 24 +++++++++++++++++++-----
src/pipewire/private.h | 5 +++--
2 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c
index bd6074d7f..9b1a0455b 100644
--- a/src/pipewire/impl-port.c
+++ b/src/pipewire/impl-port.c
@@ -961,8 +961,6 @@ int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node)
if (node->global)
pw_impl_port_register(port, NULL);
- pw_loop_invoke(node->data_loop, do_add_port, SPA_ID_INVALID, NULL, 0, false, port);
-
if (port->state <= PW_IMPL_PORT_STATE_INIT)
pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_CONFIGURE, 0, NULL);
@@ -1001,10 +999,13 @@ static void pw_impl_port_remove(struct pw_impl_port *port)
if (node == NULL)
return;
- pw_log_debug(NAME" %p: remove", port);
+ pw_log_debug(NAME" %p: remove added:%d", port, port->added);
- pw_loop_invoke(port->node->data_loop, do_remove_port,
- SPA_ID_INVALID, NULL, 0, true, port);
+ if (port->added) {
+ pw_loop_invoke(node->data_loop, do_remove_port,
+ SPA_ID_INVALID, NULL, 0, true, port);
+ port->added = false;
+ }
if (SPA_FLAG_IS_SET(port->flags, PW_IMPL_PORT_FLAG_TO_REMOVE)) {
if ((res = spa_node_remove_port(node->node, port->direction, port->port_id)) < 0)
@@ -1295,6 +1296,10 @@ int pw_impl_port_set_param(struct pw_impl_port *port, uint32_t id, uint32_t flag
if (id == SPA_PARAM_Format) {
pw_log_debug(NAME" %p: %d %p %d", port, port->state, param, res);
+ if (port->added) {
+ pw_loop_invoke(node->data_loop, do_remove_port, SPA_ID_INVALID, NULL, 0, true, port);
+ port->added = false;
+ }
/* setting the format always destroys the negotiated buffers */
pw_buffers_clear(&port->buffers);
pw_buffers_clear(&port->mix_buffers);
@@ -1327,6 +1332,11 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags,
pw_log_debug(NAME" %p: %d.%d negotiate %d buffers on node: %p",
port, port->direction, port->port_id, n_buffers, node->node);
+ if (port->added) {
+ pw_loop_invoke(node->data_loop, do_remove_port, SPA_ID_INVALID, NULL, 0, true, port);
+ port->added = false;
+ }
+
pw_buffers_clear(&port->mix_buffers);
if (n_buffers > 0) {
@@ -1356,6 +1366,10 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags,
pw_direction_reverse(port->direction), 0,
0, buffers, n_buffers);
}
+ if (!port->added && n_buffers > 0) {
+ pw_loop_invoke(node->data_loop, do_add_port, SPA_ID_INVALID, NULL, 0, false, port);
+ port->added = true;
+ }
return res;
}
diff --git a/src/pipewire/private.h b/src/pipewire/private.h
index 186de6fd1..e6b6788aa 100644
--- a/src/pipewire/private.h
+++ b/src/pipewire/private.h
@@ -786,9 +786,10 @@ struct pw_impl_port {
struct spa_list mix_list;
struct spa_list node_link;
} rt; /**< data only accessed from the data thread */
+ unsigned int added:1;
- void *owner_data; /**< extra owner data */
- void *user_data; /**< extra user data */
+ void *owner_data; /**< extra owner data */
+ void *user_data; /**< extra user data */
};
struct pw_control_link {
--
2.26.3

View File

@ -1,48 +0,0 @@
From d53adf0ba12761fa690ce1b8e1d4f85dc961338d Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 25 Mar 2021 15:33:18 +0100
Subject: [PATCH 10/10] pulse-server: avoid returning NULL strings
Don't return a NULL string when converting an id to a string because
some callers don't expect this and crash.
---
src/modules/module-protocol-pulse/format.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/modules/module-protocol-pulse/format.c b/src/modules/module-protocol-pulse/format.c
index 33d8ffb48..f4424cd3f 100644
--- a/src/modules/module-protocol-pulse/format.c
+++ b/src/modules/module-protocol-pulse/format.c
@@ -129,7 +129,8 @@ static inline const char *format_id2paname(uint32_t id)
{
size_t i;
for (i = 0; i < SPA_N_ELEMENTS(audio_formats); i++) {
- if (id == audio_formats[i].id)
+ if (id == audio_formats[i].id &&
+ audio_formats[i].name != NULL)
return audio_formats[i].name;
}
return "invalid";
@@ -371,7 +372,8 @@ static inline const char *channel_id2paname(uint32_t id, uint32_t *aux)
{
size_t i;
for (i = 0; i < SPA_N_ELEMENTS(audio_channels); i++) {
- if (id == audio_channels[i].channel)
+ if (id == audio_channels[i].channel &&
+ audio_channels[i].name != NULL)
return audio_channels[i].name;
}
return audio_channels[CHANNEL_POSITION_AUX0 + (*aux)++].name;
@@ -512,7 +514,8 @@ static const char *encoding_names[] = {
static inline const char *format_encoding2name(enum encoding enc)
{
- if (enc >= 0 && enc < (int)SPA_N_ELEMENTS(encoding_names))
+ if (enc >= 0 && enc < (int)SPA_N_ELEMENTS(encoding_names) &&
+ encoding_names[enc] != NULL)
return encoding_names[enc];
return "INVALID";
}
--
2.26.3

View File

@ -1,6 +1,6 @@
%global majorversion 0
%global minorversion 3
%global microversion 24
%global microversion 26
%global apiversion 0.3
%global spaversion 0.2
@ -8,7 +8,7 @@
%global libversion %{soversion}.%(bash -c '((intversion = (%{minorversion} * 100) + %{microversion})); echo ${intversion}').0
# For rpmdev-bumpspec and releng automation
%global baserelease 5
%global baserelease 1
#global snapdate 20210107
#global gitcommit b17db2cebc1a5ab2c01851d29c05f79cd2f262bb
@ -27,18 +27,19 @@
# Features disabled for RHEL 8
%if 0%{?rhel} && 0%{?rhel} < 9
%bcond_with pulse
%bcond_with jack
%else
%bcond_without pulse
%bcond_without jack
%endif
# Features disabled for RHEL
%if 0%{?rhel}
%bcond_with jack
%bcond_with jackserver_plugin
%else
%bcond_without jack
%bcond_without jackserver_plugin
%endif
Name: pipewire
Summary: Media Sharing Server
Version: %{majorversion}.%{minorversion}.%{microversion}
@ -48,7 +49,7 @@ URL: https://pipewire.org/
%if 0%{?snapdate}
Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{gitcommit}/pipewire-%{shortcommit}.tar.gz
%else
Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{version}/pipewire-%{version}.tar.gz
Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{version}/pipewire-%{version}.tar.gz
%endif
## upstream patches
@ -56,16 +57,7 @@ Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{version}/p
## upstreamable patches
## fedora patches
Patch0: 0001-conf-start-media-session-through-pipewire.patch
Patch1: 0002-pipewire-pulse-set-correct-errno-values.patch
Patch2: 0003-media-session-check-stream-move-after-configuring-a-.patch
Patch3: 0004-pulse-server-don-t-send-invalid-port-profile-arrays.patch
Patch4: 0005-pulse-server-fix-route-profile-numbering.patch
Patch5: 0006-impl-node-first-start-the-node-then-make-it-schedula.patch
Patch6: 0007-alsa-never-queue-buffers-when-rate-matching.patch
Patch7: 0008-pulse-server-handle-NULL-proxy.patch
Patch8: 0009-impl-port-only-add-the-port-when-buffers-are-negotia.patch
Patch9: 0010-pulse-server-avoid-returning-NULL-strings.patch
Patch1001: 0001-conf-start-media-session-through-pipewire.patch
BuildRequires: gettext
@ -179,7 +171,6 @@ Summary: PipeWire JACK implementation
License: MIT
Recommends: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-libjack%{?_isa} = %{version}-%{release}
BuildRequires: jack-audio-connection-kit-devel >= 1.9.10
Conflicts: jack-audio-connection-kit
Conflicts: jack-audio-connection-kit-dbus
# Fixed jack subpackages
@ -200,6 +191,19 @@ Obsoletes: jack-audio-connection-kit < 1.9.16-2
%description jack-audio-connection-kit
This package provides a JACK implementation based on PipeWire
%package jack-audio-connection-kit-devel
Summary: Development files for %{name}-jack-audio-connection-kit
License: MIT
Requires: %{name}-jack-audio-connection-kit%{?_isa} = %{version}-%{release}
Conflicts: jack-audio-connection-kit-devel
Enhances: %{name}-jack-audio-connection-kit
%description jack-audio-connection-kit-devel
This package provides development files for building JACK applications
using PipeWire's JACK library.
%endif
%if %{with jackserver_plugin}
%package plugin-jack
Summary: PipeWire media server JACK support
License: MIT
@ -262,7 +266,9 @@ This package provides a PulseAudio implementation based on PipeWire
%ifarch s390x
-D bluez5-codec-ldac=disabled \
%endif
%{!?with_jack:-D jack=disabled -D pipewire-jack=disabled} \
%{!?with_jack:-D pipewire-jack=disabled} \
%{!?with_jackserver_plugin:-D jack=disabled} \
%{?with_jack:-D jack-devel=enabled} \
%{!?with_alsa:-D pipewire-alsa=disabled} \
%{?with_vulkan:-D vulkan=enabled}
%meson_build
@ -402,6 +408,8 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || :
%{_bindir}/pw-dot
%{_bindir}/pw-cat
%{_bindir}/pw-dump
%{_bindir}/pw-link
%{_bindir}/pw-loopback
%{_bindir}/pw-play
%{_bindir}/pw-profiler
%{_bindir}/pw-record
@ -436,13 +444,22 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || :
%files jack-audio-connection-kit
%{_bindir}/pw-jack
%{_mandir}/man1/pw-jack.1*
%{_libdir}/pipewire-%{apiversion}/jack/libjack.so*
%{_libdir}/pipewire-%{apiversion}/jack/libjacknet.so*
%{_libdir}/pipewire-%{apiversion}/jack/libjackserver.so*
%{_libdir}/pipewire-%{apiversion}/jack/libjack.so.*
%{_libdir}/pipewire-%{apiversion}/jack/libjacknet.so.*
%{_libdir}/pipewire-%{apiversion}/jack/libjackserver.so.*
%config(noreplace) %{_sysconfdir}/pipewire/jack.conf
%config(noreplace) %{_sysconfdir}/pipewire/media-session.d/with-jack
%{_sysconfdir}/ld.so.conf.d/pipewire-jack-%{_arch}.conf
%files jack-audio-connection-kit-devel
%{_includedir}/jack/
%{_libdir}/pipewire-%{apiversion}/jack/libjack.so
%{_libdir}/pipewire-%{apiversion}/jack/libjacknet.so
%{_libdir}/pipewire-%{apiversion}/jack/libjackserver.so
%{_libdir}/pkgconfig/jack.pc
%endif
%if %{with jackserver_plugin}
%files plugin-jack
%{_libdir}/spa-%{spaversion}/jack/
%endif
@ -456,6 +473,10 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || :
%endif
%changelog
* Sat Apr 24 2021 Neal Gompa <ngompa13@gmail.com> - 0.3.26-1
- Update to 0.3.26
- Add jack-devel subpackage, enable JACK support on RHEL 9+ (#1945951)
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 0.3.24-5
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937

View File

@ -1 +1 @@
SHA512 (pipewire-0.3.24.tar.gz) = be1fd3b15aae4fc276dd7e4be385cd58e6e9626d6e0a42b7bc3eb46ba324759c05320547aa857510ecf24b1628b76555222d342350d6406ad4d7b536cb3db497
SHA512 (pipewire-0.3.26.tar.gz) = d771956a42801a6e07fac48a175363eb4107a9fba13d649ff5c2cdc40044c84a61bf56050783507f6dd8efae8c59a2be07ec67433827335ae60f8116c4a4e178