From: Peter Meerwald <p.meerwald@xxxxxxxxxxxxxxxxxx> Signed-off-by: Peter Meerwald <pmeerw at pmeerw.net> --- src/pulsecore/pstream.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c index a53a074..7bd7760 100644 --- a/src/pulsecore/pstream.c +++ b/src/pulsecore/pstream.c @@ -512,6 +512,22 @@ static void memexport_revoke_cb(pa_memexport *e, uint32_t block_id, void *userda pa_pstream_send_revoke(p, block_id); } +static void reset_descriptor(void *d, uint32_t l) { + uint32_t *descriptor = d; + + descriptor[PA_PSTREAM_DESCRIPTOR_LENGTH] = htonl(l); + descriptor[PA_PSTREAM_DESCRIPTOR_CHANNEL] = htonl((uint32_t) -1); + descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI] = 0; + descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_LO] = 0; + descriptor[PA_PSTREAM_DESCRIPTOR_FLAGS] = 0; +} + +static void shm_descriptor(void *d, uint32_t flags, uint32_t block_id) { + uint32_t *descriptor = d; + descriptor[PA_PSTREAM_DESCRIPTOR_FLAGS] = htonl(flags); + descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI] = htonl(block_id); +} + static void prepare_next_write_item(pa_pstream *p) { pa_assert(p); pa_assert(PA_REFCNT_VALUE(p) > 0); @@ -525,11 +541,7 @@ static void prepare_next_write_item(pa_pstream *p) { p->write.minibuf_validsize = 0; pa_memchunk_reset(&p->write.memchunk); - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_LENGTH] = 0; - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_CHANNEL] = htonl((uint32_t) -1); - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI] = 0; - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_LO] = 0; - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_FLAGS] = 0; + reset_descriptor(p->write.descriptor, 0); if (p->write.current->type == PA_PSTREAM_ITEM_PACKET) { size_t plen; @@ -559,13 +571,11 @@ static void prepare_next_write_item(pa_pstream *p) { } else if (p->write.current->type == PA_PSTREAM_ITEM_SHMRELEASE) { - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_FLAGS] = htonl(PA_FLAG_SHMRELEASE); - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI] = htonl(p->write.current->per_type.block_id); + shm_descriptor(p->write.descriptor, PA_FLAG_SHMRELEASE, p->write.current->per_type.block_id); } else if (p->write.current->type == PA_PSTREAM_ITEM_SHMREVOKE) { - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_FLAGS] = htonl(PA_FLAG_SHMREVOKE); - p->write.descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI] = htonl(p->write.current->per_type.block_id); + shm_descriptor(p->write.descriptor, PA_FLAG_SHMREVOKE, p->write.current->per_type.block_id); } else { uint32_t flags; -- 1.9.1