File 0019-buffers-increase-max-datas-and-metadata-in-buffers.patch of Package pipewire.15840
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;