Accepting request 821839 from GNOME:Factory
(forwarded request 821248 from alarrosa) OBS-URL: https://build.opensuse.org/request/show/821839 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/pipewire?expand=0&rev=12
This commit is contained in:
parent
f98e8c4f0d
commit
924112441d
79
0001-client-node-fix-buffer-size-calculation.patch
Normal file
79
0001-client-node-fix-buffer-size-calculation.patch
Normal file
@ -0,0 +1,79 @@
|
||||
From 61c1fe546e374db03f3b05749123cf9739b966f2 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Mon, 15 Jun 2020 20:44:08 +0200
|
||||
Subject: [PATCH] client-node: fix buffer size calculation
|
||||
|
||||
Calculate the size of the buffer as the difference between the first
|
||||
byte and the last byte. This takes into account the alignment.
|
||||
---
|
||||
src/modules/module-client-node/client-node.c | 13 ++++++-------
|
||||
src/modules/module-client-node/remote-node.c | 6 +++---
|
||||
2 files changed, 9 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c
|
||||
index 43bd8570..09980bd1 100644
|
||||
--- a/src/modules/module-client-node/client-node.c
|
||||
+++ b/src/modules/module-client-node/client-node.c
|
||||
@@ -769,8 +769,7 @@ do_port_use_buffers(struct impl *impl,
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &mix->buffers[i];
|
||||
struct pw_memblock *mem, *m;
|
||||
- size_t data_size;
|
||||
- void *baseptr;
|
||||
+ void *baseptr, *endptr;
|
||||
|
||||
b->outbuf = buffers[i];
|
||||
memcpy(&b->buffer, buffers[i], sizeof(struct spa_buffer));
|
||||
@@ -787,14 +786,14 @@ do_port_use_buffers(struct impl *impl,
|
||||
if ((mem = pw_mempool_find_ptr(impl->context->pool, baseptr)) == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
- data_size = buffers[i]->n_datas * sizeof(struct spa_chunk);
|
||||
+ endptr = SPA_MEMBER(baseptr, buffers[i]->n_datas * sizeof(struct spa_chunk), void);
|
||||
for (j = 0; j < buffers[i]->n_metas; j++) {
|
||||
- data_size += SPA_ROUND_UP_N(buffers[i]->metas[j].size, 8);
|
||||
+ endptr = SPA_MEMBER(endptr, SPA_ROUND_UP_N(buffers[i]->metas[j].size, 8), void);
|
||||
}
|
||||
for (j = 0; j < buffers[i]->n_datas; j++) {
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
if (d->type == SPA_DATA_MemPtr)
|
||||
- data_size += d->maxsize;
|
||||
+ endptr = SPA_MEMBER(d->data, d->maxsize, void);
|
||||
}
|
||||
|
||||
m = pw_mempool_import_block(this->client->pool, mem);
|
||||
@@ -805,8 +804,8 @@ do_port_use_buffers(struct impl *impl,
|
||||
|
||||
mb[i].buffer = &b->buffer;
|
||||
mb[i].mem_id = m->id;
|
||||
- mb[i].offset = SPA_PTRDIFF(baseptr, SPA_MEMBER(mem->map->ptr, 0, void));
|
||||
- mb[i].size = data_size;
|
||||
+ mb[i].offset = SPA_PTRDIFF(baseptr, mem->map->ptr);
|
||||
+ mb[i].size = SPA_PTRDIFF(endptr, baseptr);
|
||||
spa_log_debug(this->log, NAME" %p: buffer %d %d %d %d", this, i, mb[i].mem_id,
|
||||
mb[i].offset, mb[i].size);
|
||||
|
||||
diff --git a/src/modules/module-client-node/remote-node.c b/src/modules/module-client-node/remote-node.c
|
||||
index a68e7507..8ab1bac3 100644
|
||||
--- a/src/modules/module-client-node/remote-node.c
|
||||
+++ b/src/modules/module-client-node/remote-node.c
|
||||
@@ -653,7 +653,7 @@ client_node_port_use_buffers(void *object,
|
||||
b->datas = SPA_MEMBER(b->metas, sizeof(struct spa_meta) * b->n_metas,
|
||||
struct spa_data);
|
||||
|
||||
- pw_log_debug("add buffer %d %d %u %u %p", mm->block->id,
|
||||
+ pw_log_debug("add buffer mem:%d id:%d offset:%u size:%u %p", mm->block->id,
|
||||
bid->id, buffers[i].offset, buffers[i].size, bid->buf);
|
||||
|
||||
offset = 0;
|
||||
@@ -696,8 +696,8 @@ client_node_port_use_buffers(void *object,
|
||||
int offs = SPA_PTR_TO_INT(d->data);
|
||||
d->data = SPA_MEMBER(mm->ptr, offs, void);
|
||||
d->fd = -1;
|
||||
- pw_log_debug(" data %d %u -> mem %p maxsize %d",
|
||||
- j, bid->id, d->data, d->maxsize);
|
||||
+ pw_log_debug(" data %d id:%u -> mem:%p offs:%d maxsize:%d",
|
||||
+ j, bid->id, d->data, offs, d->maxsize);
|
||||
} else {
|
||||
pw_log_warn("unknown buffer data type %d", d->type);
|
||||
}
|
73
0002-gst-fix-proxy-leaks.patch
Normal file
73
0002-gst-fix-proxy-leaks.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From cd7a56a71c76e6a4d4158bf739fd61644d325584 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Tue, 16 Jun 2020 11:02:16 +0200
|
||||
Subject: [PATCH] gst: fix proxy leaks
|
||||
|
||||
---
|
||||
src/gst/gstpipewiredeviceprovider.c | 22 +++++++++++++++++++++-
|
||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/gst/gstpipewiredeviceprovider.c b/src/gst/gstpipewiredeviceprovider.c
|
||||
index e0b8d855..ca7f7306 100644
|
||||
--- a/src/gst/gstpipewiredeviceprovider.c
|
||||
+++ b/src/gst/gstpipewiredeviceprovider.c
|
||||
@@ -404,6 +404,13 @@ static const struct pw_node_events node_events = {
|
||||
.info = node_event_info
|
||||
};
|
||||
|
||||
+static void
|
||||
+removed_node (void *data)
|
||||
+{
|
||||
+ struct node_data *nd = data;
|
||||
+ pw_proxy_destroy((struct pw_proxy*)nd->proxy);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
destroy_node (void *data)
|
||||
{
|
||||
@@ -428,9 +435,17 @@ destroy_node (void *data)
|
||||
|
||||
static const struct pw_proxy_events proxy_node_events = {
|
||||
PW_VERSION_PROXY_EVENTS,
|
||||
+ .removed = removed_node,
|
||||
.destroy = destroy_node,
|
||||
};
|
||||
|
||||
+static void
|
||||
+removed_port (void *data)
|
||||
+{
|
||||
+ struct port_data *pd = data;
|
||||
+ pw_proxy_destroy((struct pw_proxy*)pd->proxy);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
destroy_port (void *data)
|
||||
{
|
||||
@@ -442,6 +457,7 @@ destroy_port (void *data)
|
||||
|
||||
static const struct pw_proxy_events proxy_port_events = {
|
||||
PW_VERSION_PROXY_EVENTS,
|
||||
+ .removed = removed_port,
|
||||
.destroy = destroy_port,
|
||||
};
|
||||
|
||||
@@ -563,6 +579,7 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (self, "disconnect");
|
||||
+ pw_proxy_destroy ((struct pw_proxy*)data->registry);
|
||||
pw_core_disconnect (self->core);
|
||||
pw_context_destroy (c);
|
||||
pw_loop_destroy (l);
|
||||
@@ -654,7 +671,10 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider)
|
||||
GstPipeWireDeviceProvider *self = GST_PIPEWIRE_DEVICE_PROVIDER (provider);
|
||||
|
||||
GST_DEBUG_OBJECT (self, "stopping provider");
|
||||
-
|
||||
+ if (self->registry) {
|
||||
+ pw_proxy_destroy ((struct pw_proxy*)self->registry);
|
||||
+ self->registry = NULL;
|
||||
+ }
|
||||
if (self->core) {
|
||||
pw_core_disconnect (self->core);
|
||||
self->core = NULL;
|
@ -0,0 +1,39 @@
|
||||
From 9c8279aa6e45398b745e99b889963a36bdbe7ebe Mon Sep 17 00:00:00 2001
|
||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
||||
Date: Wed, 17 Jun 2020 17:17:51 +0300
|
||||
Subject: [PATCH] pulse: fix pa_card_info.profiles2 array to be NULL terminated
|
||||
|
||||
profiles2 is meant to be NULL terminated, according to its documentation
|
||||
Fixes a crash in pavucontrol-qt
|
||||
---
|
||||
pipewire-pulseaudio/src/introspect.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pipewire-pulseaudio/src/introspect.c b/pipewire-pulseaudio/src/introspect.c
|
||||
index 526ddda8..5b2a7a1c 100644
|
||||
--- a/pipewire-pulseaudio/src/introspect.c
|
||||
+++ b/pipewire-pulseaudio/src/introspect.c
|
||||
@@ -1239,13 +1239,13 @@ static void card_callback(struct card_data *d)
|
||||
{
|
||||
struct global *g = d->global;
|
||||
pa_card_info *i = &g->card_info.info;
|
||||
- int n_profiles, j;
|
||||
+ int n_profiles, j = 0;
|
||||
struct param *p;
|
||||
|
||||
n_profiles = g->card_info.n_profiles;
|
||||
|
||||
i->profiles = alloca(sizeof(pa_card_profile_info) * n_profiles);
|
||||
- i->profiles2 = alloca(sizeof(pa_card_profile_info2 *) * n_profiles);
|
||||
+ i->profiles2 = alloca(sizeof(pa_card_profile_info2 *) * n_profiles + 1);
|
||||
i->n_profiles = 0;
|
||||
|
||||
pw_log_debug("context %p: info for %d", g->context, g->id);
|
||||
@@ -1282,6 +1282,7 @@ static void card_callback(struct card_data *d)
|
||||
i->active_profile2 = i->profiles2[j];
|
||||
}
|
||||
}
|
||||
+ i->profiles2[j] = NULL;
|
||||
d->cb(d->context, i, 0, d->userdata);
|
||||
}
|
||||
|
22
0004-pulse-fix-size-calculation.patch
Normal file
22
0004-pulse-fix-size-calculation.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From ba57de9b81cb9841b7183f57f300112458f5ee73 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Wed, 17 Jun 2020 16:56:40 +0200
|
||||
Subject: [PATCH] pulse: fix size calculation
|
||||
|
||||
---
|
||||
pipewire-pulseaudio/src/introspect.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pipewire-pulseaudio/src/introspect.c b/pipewire-pulseaudio/src/introspect.c
|
||||
index 5b2a7a1c..f0512ead 100644
|
||||
--- a/pipewire-pulseaudio/src/introspect.c
|
||||
+++ b/pipewire-pulseaudio/src/introspect.c
|
||||
@@ -1245,7 +1245,7 @@ static void card_callback(struct card_data *d)
|
||||
n_profiles = g->card_info.n_profiles;
|
||||
|
||||
i->profiles = alloca(sizeof(pa_card_profile_info) * n_profiles);
|
||||
- i->profiles2 = alloca(sizeof(pa_card_profile_info2 *) * n_profiles + 1);
|
||||
+ i->profiles2 = alloca(sizeof(pa_card_profile_info2 *) * (n_profiles + 1));
|
||||
i->n_profiles = 0;
|
||||
|
||||
pw_log_debug("context %p: info for %d", g->context, g->id);
|
@ -0,0 +1,22 @@
|
||||
From a108752514dafa5c6555050991406decc9bff5f2 Mon Sep 17 00:00:00 2001
|
||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
||||
Date: Wed, 17 Jun 2020 14:28:42 +0300
|
||||
Subject: [PATCH] jack: fix crash on close when metadata are not available
|
||||
|
||||
---
|
||||
pipewire-jack/src/pipewire-jack.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c
|
||||
index 28a8ff82..5d4ee7b7 100644
|
||||
--- a/pipewire-jack/src/pipewire-jack.c
|
||||
+++ b/pipewire-jack/src/pipewire-jack.c
|
||||
@@ -2400,7 +2400,7 @@ int jack_client_close (jack_client_t *client)
|
||||
|
||||
if (c->registry)
|
||||
pw_proxy_destroy((struct pw_proxy*)c->registry);
|
||||
- if (c->metadata->proxy)
|
||||
+ if (c->metadata && c->metadata->proxy)
|
||||
pw_proxy_destroy((struct pw_proxy*)c->metadata->proxy);
|
||||
pw_core_disconnect(c->core);
|
||||
pw_context_destroy(c->context.context);
|
@ -0,0 +1,25 @@
|
||||
From 1f1386879b8dd3d3be9a54f749bb839ae2281223 Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Wed, 17 Jun 2020 13:36:05 -0400
|
||||
Subject: [PATCH] a2dpsink: only request new data when buffer is done
|
||||
|
||||
---
|
||||
spa/plugins/bluez5/a2dp-sink.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/spa/plugins/bluez5/a2dp-sink.c b/spa/plugins/bluez5/a2dp-sink.c
|
||||
index 2ef5317f..575234f2 100644
|
||||
--- a/spa/plugins/bluez5/a2dp-sink.c
|
||||
+++ b/spa/plugins/bluez5/a2dp-sink.c
|
||||
@@ -563,7 +563,10 @@ static int flush_data(struct impl *this, uint64_t now_time)
|
||||
if (written > 0 && l1 > 0)
|
||||
written += add_data(this, src, l1);
|
||||
if (written <= 0) {
|
||||
- port->need_data = true;
|
||||
+ /* only request new data when the current buffer will be fully processed in the next iteration */
|
||||
+ if (port->ready_offset + (this->frame_count * this->codesize) >= d[0].chunk->size)
|
||||
+ port->need_data = true;
|
||||
+
|
||||
if (written < 0 && written != -ENOSPC) {
|
||||
spa_list_remove(&b->link);
|
||||
b->outstanding = true;
|
@ -0,0 +1,29 @@
|
||||
From 715be5dfe779e73139904461b5e3da53e030ead6 Mon Sep 17 00:00:00 2001
|
||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
||||
Date: Wed, 17 Jun 2020 18:01:17 +0300
|
||||
Subject: [PATCH] pulse: fix counter while populating card_info profiles
|
||||
|
||||
---
|
||||
pipewire-pulseaudio/src/introspect.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pipewire-pulseaudio/src/introspect.c b/pipewire-pulseaudio/src/introspect.c
|
||||
index f0512ead..67f1bd54 100644
|
||||
--- a/pipewire-pulseaudio/src/introspect.c
|
||||
+++ b/pipewire-pulseaudio/src/introspect.c
|
||||
@@ -1262,7 +1262,6 @@ static void card_callback(struct card_data *d)
|
||||
continue;
|
||||
}
|
||||
|
||||
- j = i->n_profiles++;
|
||||
i->profiles[j].name = name;
|
||||
i->profiles[j].description = name;
|
||||
i->profiles[j].n_sinks = 1;
|
||||
@@ -1281,6 +1280,7 @@ static void card_callback(struct card_data *d)
|
||||
i->active_profile = &i->profiles[j];
|
||||
i->active_profile2 = i->profiles2[j];
|
||||
}
|
||||
+ j = ++i->n_profiles;
|
||||
}
|
||||
i->profiles2[j] = NULL;
|
||||
d->cb(d->context, i, 0, d->userdata);
|
26
0008-impl-link-reset-state-before-starting-allocation.patch
Normal file
26
0008-impl-link-reset-state-before-starting-allocation.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From ebede9123918ca01a6004fb28a4a8b6c24f4732e Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Fri, 19 Jun 2020 12:12:48 +0200
|
||||
Subject: [PATCH] impl-link: reset state before starting allocation
|
||||
|
||||
Reset our state before checking the state of the ports or else
|
||||
we might still think a port has buffers while they are being
|
||||
allocated.
|
||||
---
|
||||
src/pipewire/impl-link.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/pipewire/impl-link.c b/src/pipewire/impl-link.c
|
||||
index aeda03f8..c0095f0a 100644
|
||||
--- a/src/pipewire/impl-link.c
|
||||
+++ b/src/pipewire/impl-link.c
|
||||
@@ -411,6 +411,9 @@ static int do_allocation(struct pw_impl_link *this)
|
||||
pw_log_debug(NAME" %p: out-node:%p in-node:%p: out-flags:%08x in-flags:%08x",
|
||||
this, output->node, input->node, out_flags, in_flags);
|
||||
|
||||
+ this->rt.in_mix.have_buffers = false;
|
||||
+ this->rt.out_mix.have_buffers = false;
|
||||
+
|
||||
if (out_flags & SPA_PORT_FLAG_LIVE) {
|
||||
pw_log_debug(NAME" %p: setting link as live", this);
|
||||
output->node->live = true;
|
24
0009-impl-core-clear-the-mempool.patch
Normal file
24
0009-impl-core-clear-the-mempool.patch
Normal file
@ -0,0 +1,24 @@
|
||||
From f78e44c28ac1767ee1ae916b0d4bb8f2d19dd2d6 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Fri, 19 Jun 2020 15:20:50 +0200
|
||||
Subject: [PATCH] impl-core: clear the mempool
|
||||
|
||||
When a client sends hello, clear the mempool again to make sure
|
||||
it get's the new memory.
|
||||
---
|
||||
src/pipewire/impl-core.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/pipewire/impl-core.c b/src/pipewire/impl-core.c
|
||||
index e1b494e4..103c2863 100644
|
||||
--- a/src/pipewire/impl-core.c
|
||||
+++ b/src/pipewire/impl-core.c
|
||||
@@ -162,6 +162,8 @@ static int core_hello(void *object, uint32_t version)
|
||||
pw_log_debug(NAME" %p: hello %d from resource %p", context, version, resource);
|
||||
pw_map_for_each(&client->objects, destroy_resource, client);
|
||||
|
||||
+ pw_mempool_clear(client->pool);
|
||||
+
|
||||
this->info.change_mask = PW_CORE_CHANGE_MASK_ALL;
|
||||
pw_core_resource_info(resource, &this->info);
|
||||
|
22
0010-mem-reset-the-map-in-clear.patch
Normal file
22
0010-mem-reset-the-map-in-clear.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From 95192b21f152ba6fa769049a2298aba1221f794d Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Fri, 19 Jun 2020 16:58:22 +0200
|
||||
Subject: [PATCH] mem: reset the map in clear
|
||||
|
||||
Or else the free list is not cleared.
|
||||
---
|
||||
src/pipewire/mem.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/pipewire/mem.c b/src/pipewire/mem.c
|
||||
index 79d94672..94b62049 100644
|
||||
--- a/src/pipewire/mem.c
|
||||
+++ b/src/pipewire/mem.c
|
||||
@@ -164,6 +164,7 @@ void pw_mempool_clear(struct pw_mempool *pool)
|
||||
|
||||
spa_list_consume(b, &impl->blocks, link)
|
||||
pw_memblock_free(&b->this);
|
||||
+ pw_map_reset(&impl->map);
|
||||
}
|
||||
|
||||
void pw_mempool_destroy(struct pw_mempool *pool)
|
63
0011-avoid-uninitialized-variables.patch
Normal file
63
0011-avoid-uninitialized-variables.patch
Normal file
@ -0,0 +1,63 @@
|
||||
From f08c35259c3d87adaeb9fa09c1c471d7357cec86 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 15:25:27 +0200
|
||||
Subject: [PATCH] avoid uninitialized variables
|
||||
|
||||
---
|
||||
spa/examples/adapter-control.c | 6 +++---
|
||||
src/tools/pw-profiler.c | 13 ++++++-------
|
||||
2 files changed, 9 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/spa/examples/adapter-control.c b/spa/examples/adapter-control.c
|
||||
index 8a3daf59..499d4d60 100644
|
||||
--- a/spa/examples/adapter-control.c
|
||||
+++ b/spa/examples/adapter-control.c
|
||||
@@ -490,10 +490,10 @@ static int negotiate_formats(struct data *data)
|
||||
if (spa_node_port_enum_params_sync(data->source_follower_node,
|
||||
SPA_DIRECTION_OUTPUT, 0,
|
||||
SPA_PARAM_Buffers, &state, filter, ¶m, &b) != 1)
|
||||
- return res;
|
||||
+ return -ENOTSUP;
|
||||
spa_pod_fixate(param);
|
||||
- if (spa_pod_parse_object(param, SPA_TYPE_OBJECT_ParamBuffers, NULL,
|
||||
- SPA_PARAM_BUFFERS_size, SPA_POD_Int(&buffer_size)) < 0)
|
||||
+ if ((res = spa_pod_parse_object(param, SPA_TYPE_OBJECT_ParamBuffers, NULL,
|
||||
+ SPA_PARAM_BUFFERS_size, SPA_POD_Int(&buffer_size))) < 0)
|
||||
return res;
|
||||
|
||||
/* set the sink and source formats */
|
||||
diff --git a/src/tools/pw-profiler.c b/src/tools/pw-profiler.c
|
||||
index e0a7492a..5cc09ca3 100644
|
||||
--- a/src/tools/pw-profiler.c
|
||||
+++ b/src/tools/pw-profiler.c
|
||||
@@ -114,15 +114,14 @@ static int process_clock(struct data *d, const struct spa_pod *pod, struct point
|
||||
|
||||
static int process_driver_block(struct data *d, const struct spa_pod *pod, struct point *point)
|
||||
{
|
||||
- union {
|
||||
- char *s;
|
||||
- } dummy;
|
||||
- uint32_t driver_id;
|
||||
+ char *name = NULL;
|
||||
+ uint32_t driver_id = 0;
|
||||
struct measurement driver;
|
||||
|
||||
+ spa_zero(driver);
|
||||
spa_pod_parse_struct(pod,
|
||||
SPA_POD_Int(&driver_id),
|
||||
- SPA_POD_String(&dummy.s),
|
||||
+ SPA_POD_String(&name),
|
||||
SPA_POD_Long(&driver.prev_signal),
|
||||
SPA_POD_Long(&driver.signal),
|
||||
SPA_POD_Long(&driver.awake),
|
||||
@@ -169,8 +168,8 @@ static int add_follower(struct data *d, uint32_t id, const char *name)
|
||||
|
||||
static int process_follower_block(struct data *d, const struct spa_pod *pod, struct point *point)
|
||||
{
|
||||
- uint32_t id;
|
||||
- const char *name;
|
||||
+ uint32_t id = 0;
|
||||
+ const char *name = NULL;
|
||||
struct measurement m;
|
||||
int idx;
|
||||
|
55
0012-dlclose-on-errors.patch
Normal file
55
0012-dlclose-on-errors.patch
Normal file
@ -0,0 +1,55 @@
|
||||
From 35bb7d794bf975e82d04bdd0d3f3c7907a679ce6 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 15:25:45 +0200
|
||||
Subject: [PATCH] dlclose on errors
|
||||
|
||||
---
|
||||
spa/plugins/audioconvert/test-helper.h | 21 +++++++++++++--------
|
||||
1 file changed, 13 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/spa/plugins/audioconvert/test-helper.h b/spa/plugins/audioconvert/test-helper.h
|
||||
index 8f7b7206..d95317b4 100644
|
||||
--- a/spa/plugins/audioconvert/test-helper.h
|
||||
+++ b/spa/plugins/audioconvert/test-helper.h
|
||||
@@ -46,28 +46,33 @@ static inline struct spa_handle *load_handle(const struct spa_support *support,
|
||||
|
||||
if ((hnd = dlopen(path, RTLD_NOW)) == NULL) {
|
||||
fprintf(stderr, "can't load %s: %s\n", lib, dlerror());
|
||||
- errno = -ENOENT;
|
||||
- return NULL;
|
||||
+ res = -ENOENT;
|
||||
+ goto error;
|
||||
}
|
||||
if ((enum_func = dlsym(hnd, SPA_HANDLE_FACTORY_ENUM_FUNC_NAME)) == NULL) {
|
||||
fprintf(stderr, "can't find enum function\n");
|
||||
- errno = -ENOENT;
|
||||
- return NULL;
|
||||
+ res = -ENXIO;
|
||||
+ goto error_close;
|
||||
}
|
||||
|
||||
if ((factory = get_factory(enum_func, name, SPA_VERSION_HANDLE_FACTORY)) == NULL) {
|
||||
fprintf(stderr, "can't find factory\n");
|
||||
- errno = -ENOENT;
|
||||
- return NULL;
|
||||
+ res = -ENOENT;
|
||||
+ goto error_close;
|
||||
}
|
||||
handle = calloc(1, spa_handle_factory_get_size(factory, NULL));
|
||||
if ((res = spa_handle_factory_init(factory, handle,
|
||||
NULL, support, n_support)) < 0) {
|
||||
fprintf(stderr, "can't make factory instance: %d\n", res);
|
||||
- errno = -res;
|
||||
- return NULL;
|
||||
+ goto error_close;
|
||||
}
|
||||
return handle;
|
||||
+
|
||||
+error_close:
|
||||
+ dlclose(hnd);
|
||||
+error:
|
||||
+ errno = -res;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
static inline uint32_t get_cpu_flags(void)
|
22
0013-stream-handle-NULL-context.patch
Normal file
22
0013-stream-handle-NULL-context.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From d5604990545012a2318eebdc38d569bbc5773a38 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Wed, 24 Jun 2020 12:50:42 +0200
|
||||
Subject: [PATCH] stream: handle NULL context
|
||||
|
||||
---
|
||||
pipewire-pulseaudio/src/stream.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pipewire-pulseaudio/src/stream.c b/pipewire-pulseaudio/src/stream.c
|
||||
index bcb338bf..1c1ce5f7 100644
|
||||
--- a/pipewire-pulseaudio/src/stream.c
|
||||
+++ b/pipewire-pulseaudio/src/stream.c
|
||||
@@ -212,7 +212,7 @@ static void stream_state_changed(void *data, enum pw_stream_state old,
|
||||
pw_log_debug("stream %p: state '%s'->'%s' (%d)", s, pw_stream_state_as_string(old),
|
||||
pw_stream_state_as_string(state), s->state);
|
||||
|
||||
- if (s->state == PA_STREAM_TERMINATED)
|
||||
+ if (s->state == PA_STREAM_TERMINATED || c == NULL)
|
||||
return;
|
||||
|
||||
switch(state) {
|
103
0014-state-always-update-state-variables.patch
Normal file
103
0014-state-always-update-state-variables.patch
Normal file
@ -0,0 +1,103 @@
|
||||
From f678f4371de0a8a4b75023fb123d0210ac685ed2 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Sat, 27 Jun 2020 13:21:12 +0200
|
||||
Subject: [PATCH] state: always update state variables
|
||||
|
||||
Or else we might leak the error string.
|
||||
---
|
||||
src/pipewire/impl-link.c | 8 ++++----
|
||||
src/pipewire/impl-node.c | 11 +++++------
|
||||
src/pipewire/impl-port.c | 24 +++++++++++++-----------
|
||||
3 files changed, 22 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/pipewire/impl-link.c b/src/pipewire/impl-link.c
|
||||
index 8be818b4..22446c86 100644
|
||||
--- a/src/pipewire/impl-link.c
|
||||
+++ b/src/pipewire/impl-link.c
|
||||
@@ -89,6 +89,10 @@ static void pw_impl_link_update_state(struct pw_impl_link *link, enum pw_link_st
|
||||
{
|
||||
enum pw_link_state old = link->info.state;
|
||||
|
||||
+ link->info.state = state;
|
||||
+ free((char*)link->info.error);
|
||||
+ link->info.error = error;
|
||||
+
|
||||
if (state == old)
|
||||
return;
|
||||
|
||||
@@ -105,10 +109,6 @@ static void pw_impl_link_update_state(struct pw_impl_link *link, enum pw_link_st
|
||||
pw_link_state_as_string(state));
|
||||
}
|
||||
|
||||
- link->info.state = state;
|
||||
- free((char*)link->info.error);
|
||||
- link->info.error = error;
|
||||
-
|
||||
pw_impl_link_emit_state_changed(link, old, state, error);
|
||||
|
||||
link->info.change_mask |= PW_LINK_CHANGE_MASK_STATE;
|
||||
diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c
|
||||
index fb415cdb..97ee439d 100644
|
||||
--- a/src/pipewire/impl-node.c
|
||||
+++ b/src/pipewire/impl-node.c
|
||||
@@ -285,9 +285,12 @@ do_node_add(struct spa_loop *loop,
|
||||
|
||||
static void node_update_state(struct pw_impl_node *node, enum pw_node_state state, char *error)
|
||||
{
|
||||
- enum pw_node_state old;
|
||||
+ enum pw_node_state old = node->info.state;
|
||||
+
|
||||
+ free((char*)node->info.error);
|
||||
+ node->info.error = error;
|
||||
+ node->info.state = state;
|
||||
|
||||
- old = node->info.state;
|
||||
if (old == state)
|
||||
return;
|
||||
|
||||
@@ -302,10 +305,6 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat
|
||||
pw_node_state_as_string(old), pw_node_state_as_string(state));
|
||||
}
|
||||
|
||||
- free((char*)node->info.error);
|
||||
- node->info.error = error;
|
||||
- node->info.state = state;
|
||||
-
|
||||
switch (state) {
|
||||
case PW_NODE_STATE_RUNNING:
|
||||
pw_loop_invoke(node->data_loop, do_node_add, 1, NULL, 0, true, node);
|
||||
diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c
|
||||
index 7e4528e7..21434360 100644
|
||||
--- a/src/pipewire/impl-port.c
|
||||
+++ b/src/pipewire/impl-port.c
|
||||
@@ -98,17 +98,19 @@ void pw_impl_port_update_state(struct pw_impl_port *port, enum pw_impl_port_stat
|
||||
{
|
||||
enum pw_impl_port_state old = port->state;
|
||||
|
||||
- if (old != state) {
|
||||
- pw_log(state == PW_IMPL_PORT_STATE_ERROR ?
|
||||
- SPA_LOG_LEVEL_ERROR : SPA_LOG_LEVEL_DEBUG,
|
||||
- NAME" %p: state %s -> %s (%s)", port,
|
||||
- port_state_as_string(old), port_state_as_string(state), error);
|
||||
-
|
||||
- port->state = state;
|
||||
- free((void*)port->error);
|
||||
- port->error = error;
|
||||
- pw_impl_port_emit_state_changed(port, old, state, error);
|
||||
- }
|
||||
+ port->state = state;
|
||||
+ free((void*)port->error);
|
||||
+ port->error = error;
|
||||
+
|
||||
+ if (old == state)
|
||||
+ return;
|
||||
+
|
||||
+ pw_log(state == PW_IMPL_PORT_STATE_ERROR ?
|
||||
+ SPA_LOG_LEVEL_ERROR : SPA_LOG_LEVEL_DEBUG,
|
||||
+ NAME" %p: state %s -> %s (%s)", port,
|
||||
+ port_state_as_string(old), port_state_as_string(state), error);
|
||||
+
|
||||
+ pw_impl_port_emit_state_changed(port, old, state, error);
|
||||
}
|
||||
|
||||
static int tee_process(void *object)
|
29
0015-spa-device-fix-leak-of-properties-in-error-case.patch
Normal file
29
0015-spa-device-fix-leak-of-properties-in-error-case.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From d871adbd4d602e0ba70e4c23f792aea1b214b79e Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 2 Jul 2020 10:52:15 +0200
|
||||
Subject: [PATCH] spa-device: fix leak of properties in error case
|
||||
|
||||
---
|
||||
src/modules/spa/spa-device.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/modules/spa/spa-device.c b/src/modules/spa/spa-device.c
|
||||
index 4486bce8..a1cc82e1 100644
|
||||
--- a/src/modules/spa/spa-device.c
|
||||
+++ b/src/modules/spa/spa-device.c
|
||||
@@ -147,6 +147,7 @@ struct pw_impl_device *pw_spa_device_load(struct pw_context *context,
|
||||
pw_log_error("can't get device interface %d", res);
|
||||
goto error_exit_unload;
|
||||
error_device:
|
||||
+ properties = NULL;
|
||||
res = -errno;
|
||||
pw_log_error("can't create device: %m");
|
||||
goto error_exit_unload;
|
||||
@@ -155,5 +156,7 @@ struct pw_impl_device *pw_spa_device_load(struct pw_context *context,
|
||||
pw_unload_spa_handle(handle);
|
||||
error_exit:
|
||||
errno = -res;
|
||||
+ if (properties)
|
||||
+ pw_properties_free(properties);
|
||||
return NULL;
|
||||
}
|
26
0016-alsa-dont-leak-structure-on-error.patch
Normal file
26
0016-alsa-dont-leak-structure-on-error.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From ac54b7ace1305795497fb01f6badeaf138035fbb Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 2 Jul 2020 15:52:50 +0200
|
||||
Subject: [PATCH] alsa: don't leak structure on error
|
||||
|
||||
---
|
||||
pipewire-alsa/alsa-plugins/pcm_pipewire.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
index 9d2397f4..d2fdcf44 100644
|
||||
--- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
+++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
@@ -915,8 +915,10 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
|
||||
else
|
||||
pw->node_name = strdup(node_name);
|
||||
|
||||
- if (pw->node_name == NULL)
|
||||
- return -errno;
|
||||
+ if (pw->node_name == NULL) {
|
||||
+ err = -errno;
|
||||
+ goto error;
|
||||
+ }
|
||||
|
||||
pw->target = PW_ID_ANY;
|
||||
if (str != NULL)
|
41
0017-alsa-dont-leak-properties-on-error.patch
Normal file
41
0017-alsa-dont-leak-properties-on-error.patch
Normal file
@ -0,0 +1,41 @@
|
||||
From e11d35107fc9e3a392b74855238be40f7bf69ff7 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 2 Jul 2020 15:53:16 +0200
|
||||
Subject: [PATCH] alsa: don't leak properties on error
|
||||
|
||||
---
|
||||
pipewire-alsa/alsa-plugins/pcm_pipewire.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
index d2fdcf44..560460cb 100644
|
||||
--- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
+++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
@@ -890,7 +890,7 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
|
||||
snd_pcm_pipewire_t *pw;
|
||||
int err;
|
||||
const char *str;
|
||||
- struct pw_properties *props;
|
||||
+ struct pw_properties *props = NULL;
|
||||
struct pw_loop *loop;
|
||||
|
||||
assert(pcmp);
|
||||
@@ -947,6 +947,7 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
|
||||
|
||||
pw_thread_loop_lock(pw->main_loop);
|
||||
pw->core = pw_context_connect(pw->context, props, 0);
|
||||
+ props = NULL;
|
||||
if (pw->core == NULL) {
|
||||
err = -errno;
|
||||
pw_thread_loop_unlock(pw->main_loop);
|
||||
@@ -983,7 +984,9 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
|
||||
|
||||
return 0;
|
||||
|
||||
- error:
|
||||
+error:
|
||||
+ if (props)
|
||||
+ pw_properties_free(props);
|
||||
snd_pcm_pipewire_free(pw);
|
||||
return err;
|
||||
}
|
68
0018-stream-fix-some-more-leaks-in-error-paths.patch
Normal file
68
0018-stream-fix-some-more-leaks-in-error-paths.patch
Normal file
@ -0,0 +1,68 @@
|
||||
From 21fc163c49309a04689fc4d636df4622198f5570 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 2 Jul 2020 16:22:49 +0200
|
||||
Subject: [PATCH] stream: fix some more leaks in error paths
|
||||
|
||||
---
|
||||
src/pipewire/stream.c | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c
|
||||
index 086c3468..9db27296 100644
|
||||
--- a/src/pipewire/stream.c
|
||||
+++ b/src/pipewire/stream.c
|
||||
#@@ -1474,7 +1474,6 @@ pw_stream_connect(struct pw_stream *stream,
|
||||
# impl->warn_mlock = SPA_FLAG_IS_SET(flags, PW_STREAM_FLAG_RT_PROCESS);
|
||||
# pw_properties_set(stream->properties, "mem.warn-mlock", impl->warn_mlock ? "true" : "false");
|
||||
#
|
||||
#-
|
||||
# if ((pw_properties_get(stream->properties, PW_KEY_MEDIA_CLASS) == NULL)) {
|
||||
# const char *media_type = pw_properties_get(stream->properties, PW_KEY_MEDIA_TYPE);
|
||||
# pw_properties_setf(stream->properties, PW_KEY_MEDIA_CLASS, "Stream/%s/%s",
|
||||
@@ -1504,6 +1503,10 @@ pw_stream_connect(struct pw_stream *stream,
|
||||
|
||||
pw_log_debug(NAME" %p: creating node", stream);
|
||||
props = pw_properties_copy(stream->properties);
|
||||
+ if (props == NULL) {
|
||||
+ res = -errno;
|
||||
+ goto error_node;
|
||||
+ }
|
||||
|
||||
if ((str = pw_properties_get(props, PW_KEY_STREAM_MONITOR)) &&
|
||||
pw_properties_parse_bool(str)) {
|
||||
@@ -1533,6 +1536,7 @@ pw_stream_connect(struct pw_stream *stream,
|
||||
PW_VERSION_NODE,
|
||||
props,
|
||||
0);
|
||||
+ props = NULL;
|
||||
if (impl->node == NULL) {
|
||||
res = -errno;
|
||||
goto error_node;
|
||||
@@ -1540,6 +1544,7 @@ pw_stream_connect(struct pw_stream *stream,
|
||||
} else {
|
||||
impl->node = follower;
|
||||
pw_properties_free(props);
|
||||
+ props = NULL;
|
||||
}
|
||||
if (!SPA_FLAG_IS_SET(impl->flags, PW_STREAM_FLAG_INACTIVE))
|
||||
pw_impl_node_set_active(impl->node, true);
|
||||
@@ -1560,12 +1565,17 @@ pw_stream_connect(struct pw_stream *stream,
|
||||
|
||||
error_connect:
|
||||
pw_log_error(NAME" %p: can't connect: %s", stream, spa_strerror(res));
|
||||
- return res;
|
||||
+ goto exit_cleanup;
|
||||
error_node:
|
||||
pw_log_error(NAME" %p: can't make node: %s", stream, spa_strerror(res));
|
||||
- return res;
|
||||
+ goto exit_cleanup;
|
||||
error_proxy:
|
||||
pw_log_error(NAME" %p: can't make proxy: %s", stream, spa_strerror(res));
|
||||
+ goto exit_cleanup;
|
||||
+
|
||||
+exit_cleanup:
|
||||
+ if (props)
|
||||
+ pw_properties_free(props);
|
||||
return res;
|
||||
}
|
||||
|
@ -0,0 +1,72 @@
|
||||
From dfd3bd84b466a03c9e5d31a2944fdd911ae77a8d Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Wed, 1 Jul 2020 11:40:13 +0200
|
||||
Subject: [PATCH] buffers: increase max datas and metadata in buffers
|
||||
|
||||
---
|
||||
src/modules/module-client-node/client-node.c | 15 +++++++++------
|
||||
src/pipewire/buffers.c | 2 +-
|
||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c
|
||||
index 4415fab9..c39cee9b 100644
|
||||
--- a/src/modules/module-client-node/client-node.c
|
||||
+++ b/src/modules/module-client-node/client-node.c
|
||||
@@ -50,6 +50,8 @@
|
||||
#define MAX_OUTPUTS 64
|
||||
|
||||
#define MAX_BUFFERS 64
|
||||
+#define MAX_METAS 16u
|
||||
+#define MAX_DATAS 64u
|
||||
#define MAX_AREAS 1024
|
||||
#define MAX_MIX 128
|
||||
|
||||
@@ -72,8 +74,8 @@
|
||||
struct buffer {
|
||||
struct spa_buffer *outbuf;
|
||||
struct spa_buffer buffer;
|
||||
- struct spa_meta metas[4];
|
||||
- struct spa_data datas[4];
|
||||
+ struct spa_meta metas[MAX_METAS];
|
||||
+ struct spa_data datas[MAX_DATAS];
|
||||
struct pw_memblock *mem;
|
||||
};
|
||||
|
||||
@@ -814,11 +816,12 @@ do_port_use_buffers(struct impl *impl,
|
||||
spa_log_debug(this->log, NAME" %p: buffer %d %d %d %d", this, i, mb[i].mem_id,
|
||||
mb[i].offset, mb[i].size);
|
||||
|
||||
- for (j = 0; j < buffers[i]->n_metas; j++)
|
||||
+ b->buffer.n_metas = SPA_MIN(buffers[i]->n_metas, MAX_METAS);
|
||||
+ for (j = 0; j < b->buffer.n_metas; j++)
|
||||
memcpy(&b->buffer.metas[j], &buffers[i]->metas[j], sizeof(struct spa_meta));
|
||||
- b->buffer.n_metas = j;
|
||||
|
||||
- for (j = 0; j < buffers[i]->n_datas; j++) {
|
||||
+ b->buffer.n_datas = SPA_MIN(buffers[i]->n_datas, MAX_DATAS);
|
||||
+ for (j = 0; j < b->buffer.n_datas; j++) {
|
||||
struct spa_data *d = &buffers[i]->datas[j];
|
||||
|
||||
memcpy(&b->datas[j], d, sizeof(struct spa_data));
|
||||
@@ -1070,7 +1073,7 @@ static int client_node_port_buffers(void *data,
|
||||
if (oldbuf->n_datas != newbuf->n_datas)
|
||||
return -EINVAL;
|
||||
|
||||
- for (j = 0; j < newbuf->n_datas; j++) {
|
||||
+ for (j = 0; j < b->buffer.n_datas; j++) {
|
||||
struct spa_chunk *oldchunk = oldbuf->datas[j].chunk;
|
||||
struct spa_data *d = &newbuf->datas[j];
|
||||
|
||||
diff --git a/src/pipewire/buffers.c b/src/pipewire/buffers.c
|
||||
index e95dfe38..08bf2236 100644
|
||||
--- a/src/pipewire/buffers.c
|
||||
+++ b/src/pipewire/buffers.c
|
||||
@@ -39,7 +39,7 @@
|
||||
#define NAME "buffers"
|
||||
|
||||
#define MAX_ALIGN 32
|
||||
-#define MAX_BLOCKS 4u
|
||||
+#define MAX_BLOCKS 64u
|
||||
|
||||
struct port {
|
||||
struct spa_node *node;
|
22
0020-gst-return-NULL-for-unknown-format.patch
Normal file
22
0020-gst-return-NULL-for-unknown-format.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From a596cdbf2ef15bb90b19c470722b50524bb93261 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Mon, 13 Jul 2020 11:50:06 +0200
|
||||
Subject: [PATCH] gst: return NULL for unknown format
|
||||
|
||||
---
|
||||
src/gst/gstpipewireformat.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/gst/gstpipewireformat.c b/src/gst/gstpipewireformat.c
|
||||
index 222bb9f2..2bd84bb3 100644
|
||||
--- a/src/gst/gstpipewireformat.c
|
||||
+++ b/src/gst/gstpipewireformat.c
|
||||
@@ -858,6 +858,8 @@ gst_caps_from_format (const struct spa_pod *format)
|
||||
"stream-format", G_TYPE_STRING, "byte-stream",
|
||||
"alignment", G_TYPE_STRING, "au",
|
||||
NULL);
|
||||
+ } else {
|
||||
+ return NULL;
|
||||
}
|
||||
if ((prop = spa_pod_object_find_prop (obj, prop, SPA_FORMAT_VIDEO_size))) {
|
||||
handle_rect_prop (prop, "width", "height", res);
|
@ -1,3 +1,44 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jul 15 07:26:01 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Recommend pipewire from libpipewire, so if the library is
|
||||
installed the daemon gets pulled in since we want a daemon
|
||||
to connect to.
|
||||
- Require pipewire-spa-plugins from pipewire instead of
|
||||
recommending it since the support plugin is actually required
|
||||
for most uses (like screen sharing in wayland, which we want to
|
||||
support out-of-the-box).
|
||||
- Enable the pipewire.socket systemd user service in %post
|
||||
(using pulseaudio's %post section as an example of how to do it
|
||||
since systemd-presets-common-SUSE currently lacks support for
|
||||
user services). Also disable it in %preun and %postun.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 14 08:25:49 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Add patches from upstream to fix many issues mainly related to
|
||||
memory leaks, crashes and wrong behaviour:
|
||||
* 0001-client-node-fix-buffer-size-calculation.patch
|
||||
* 0002-gst-fix-proxy-leaks.patch
|
||||
* 0003-pulse-fix-pa_card_info-profiles2-array-to-be-NULL-terminated.patch
|
||||
* 0004-pulse-fix-size-calculation.patch
|
||||
* 0005-jack-fix-crash-on-close-when-metadata-are-not-available.patch
|
||||
* 0006-a2dpsink-only-request-new-data-when-buffer-is-done.patch
|
||||
* 0007-pulse-fix-counter-while-populating-car_info-profiles.patch
|
||||
* 0008-impl-link-reset-state-before-starting-allocation.patch
|
||||
* 0009-impl-core-clear-the-mempool.patch
|
||||
* 0010-mem-reset-the-map-in-clear.patch
|
||||
* 0011-avoid-uninitialized-variables.patch
|
||||
* 0012-dlclose-on-errors.patch
|
||||
* 0013-stream-handle-NULL-context.patch
|
||||
* 0014-state-always-update-state-variables.patch
|
||||
* 0015-spa-device-fix-leak-of-properties-in-error-case.patch
|
||||
* 0016-alsa-dont-leak-structure-on-error.patch
|
||||
* 0017-alsa-dont-leak-properties-on-error.patch
|
||||
* 0018-stream-fix-some-more-leaks-in-error-paths.patch
|
||||
* 0019-buffers-increase-max-datas-and-metadata-in-buffers.patch
|
||||
* 0020-gst-return-NULL-for-unknown-format.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jul 3 08:29:04 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
@ -8,7 +49,7 @@ Fri Jul 3 08:29:04 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 16 09:04:18 UTC 2020 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Update to version 0.3.6 (boo#1171433):
|
||||
- Update to version 0.3.6 (boo#1171433, jsc#ECO-2308):
|
||||
* Extensive memory leak fixing and stress testing was done.
|
||||
A big leak in screen sharing with DMA-BUF was fixed.
|
||||
* Compile fixes
|
||||
|
@ -47,6 +47,26 @@ Source1: %{name}-rpmlintrc
|
||||
Patch0: fix-memfd_create-call.patch
|
||||
Patch1: do-not-use-snd_pcm_ioplug_hw_avail.patch
|
||||
Patch2: fix-meson-required-version.patch
|
||||
Patch101: 0001-client-node-fix-buffer-size-calculation.patch
|
||||
Patch102: 0002-gst-fix-proxy-leaks.patch
|
||||
Patch103: 0003-pulse-fix-pa_card_info-profiles2-array-to-be-NULL-terminated.patch
|
||||
Patch104: 0004-pulse-fix-size-calculation.patch
|
||||
Patch105: 0005-jack-fix-crash-on-close-when-metadata-are-not-available.patch
|
||||
Patch106: 0006-a2dpsink-only-request-new-data-when-buffer-is-done.patch
|
||||
Patch107: 0007-pulse-fix-counter-while-populating-car_info-profiles.patch
|
||||
Patch108: 0008-impl-link-reset-state-before-starting-allocation.patch
|
||||
Patch109: 0009-impl-core-clear-the-mempool.patch
|
||||
Patch110: 0010-mem-reset-the-map-in-clear.patch
|
||||
Patch111: 0011-avoid-uninitialized-variables.patch
|
||||
Patch112: 0012-dlclose-on-errors.patch
|
||||
Patch113: 0013-stream-handle-NULL-context.patch
|
||||
Patch114: 0014-state-always-update-state-variables.patch
|
||||
Patch115: 0015-spa-device-fix-leak-of-properties-in-error-case.patch
|
||||
Patch116: 0016-alsa-dont-leak-structure-on-error.patch
|
||||
Patch117: 0017-alsa-dont-leak-properties-on-error.patch
|
||||
Patch118: 0018-stream-fix-some-more-leaks-in-error-paths.patch
|
||||
Patch119: 0019-buffers-increase-max-datas-and-metadata-in-buffers.patch
|
||||
Patch120: 0020-gst-return-NULL-for-unknown-format.patch
|
||||
|
||||
BuildRequires: doxygen
|
||||
BuildRequires: fdupes
|
||||
@ -86,9 +106,9 @@ BuildRequires: pkgconfig(vulkan)
|
||||
BuildRequires: pkgconfig(x11)
|
||||
Requires: %{libpipewire} = %{version}
|
||||
Requires: %{name}-modules = %{version}
|
||||
Requires: %{name}-spa-plugins-%{spa_ver_str} = %{version}
|
||||
Requires: %{name}-spa-tools = %{version}
|
||||
Requires: %{name}-tools = %{version}
|
||||
Recommends: %{name}-spa-plugins-%{spa_ver_str} = %{version}
|
||||
|
||||
%description
|
||||
PipeWire is a server and user space API to deal with multimedia pipelines.
|
||||
@ -105,6 +125,7 @@ Some of its features include:
|
||||
Summary: A Multimedia Framework designed to be an audio and video server and more
|
||||
License: MIT
|
||||
Group: System/Libraries
|
||||
Recommends: pipewire
|
||||
|
||||
%description -n %{libpipewire}
|
||||
PipeWire is a server and user space API to deal with multimedia pipelines.
|
||||
@ -263,6 +284,8 @@ sed -i -e "s/dependency('alsa', version : '>=1.1.7')/dependency('alsa', version
|
||||
%endif
|
||||
%patch2 -p1
|
||||
|
||||
%autopatch -m 101 -p1
|
||||
|
||||
%build
|
||||
%if %{pkg_vcmp gcc < 8}
|
||||
export CC=gcc-9
|
||||
@ -308,6 +331,26 @@ done
|
||||
%check
|
||||
%meson_test
|
||||
|
||||
%post
|
||||
if [ ! -f /etc/systemd/user/sockets.target.wants/%{name}.socket ]; then
|
||||
echo "Switching Pipewire activation using systemd user socket."
|
||||
echo "Please log out from all sessions once to make it effective."
|
||||
fi
|
||||
%systemd_user_post pipewire.socket
|
||||
# FIXME: workaround to make sure the user socket symlink creation (related to bsc#1083473)
|
||||
if [ ! -f /etc/systemd/user/sockets.target.wants/%{name}.socket ]; then
|
||||
# below should work once when preset is defined properly:
|
||||
# /usr/bin/systemctl --no-reload --global preset pipewire.socket
|
||||
mkdir -p /etc/systemd/user/sockets.target.wants
|
||||
ln -s %{_userunitdir}/%{name}.socket /etc/systemd/user/sockets.target.wants/%{name}.socket
|
||||
fi
|
||||
|
||||
%preun
|
||||
%systemd_user_preun pipewire.socket
|
||||
|
||||
%postun
|
||||
%systemd_user_postun pipewire.socket
|
||||
|
||||
%post -n %{libpipewire} -p /sbin/ldconfig
|
||||
%postun -n %{libpipewire} -p /sbin/ldconfig
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user