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;
openSUSE Build Service is sponsored by