Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:Update
pipewire.15840
0001-client-node-fix-buffer-size-calculation.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-client-node-fix-buffer-size-calculation.patch of Package pipewire.15840
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); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor