From 2c3075f4304625eb930cc1203091c1c2ba1a90b3 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 16 Jan 2025 16:16:39 +0100 Subject: [PATCH] pulse-server: make a function to silence a buffer --- src/modules/module-protocol-pulse/format.c | 18 ++++++++++++++++++ src/modules/module-protocol-pulse/format.h | 1 + .../module-protocol-pulse/pulse-server.c | 15 +-------------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/modules/module-protocol-pulse/format.c b/src/modules/module-protocol-pulse/format.c index 5626fe273..b11248fcf 100644 --- a/src/modules/module-protocol-pulse/format.c +++ b/src/modules/module-protocol-pulse/format.c @@ -230,6 +230,24 @@ uint32_t sample_spec_frame_size(const struct sample_spec *ss) } } +void sample_spec_silence(const struct sample_spec *ss, void *data, size_t size) +{ + switch (ss->format) { + case SPA_AUDIO_FORMAT_U8: + memset(data, 0x80, size); + break; + case SPA_AUDIO_FORMAT_ALAW: + memset(data, 0x80 ^ 0x55, size); + break; + case SPA_AUDIO_FORMAT_ULAW: + memset(data, 0x00 ^ 0xff, size); + break; + default: + memset(data, 0, size); + break; + } +} + bool sample_spec_valid(const struct sample_spec *ss) { return (sample_spec_frame_size(ss) > 0 && diff --git a/src/modules/module-protocol-pulse/format.h b/src/modules/module-protocol-pulse/format.h index 13df52e99..d564b1822 100644 --- a/src/modules/module-protocol-pulse/format.h +++ b/src/modules/module-protocol-pulse/format.h @@ -182,6 +182,7 @@ const char *format_encoding2name(enum encoding enc); uint32_t format_encoding2id(enum encoding enc); uint32_t sample_spec_frame_size(const struct sample_spec *ss); +void sample_spec_silence(const struct sample_spec *ss, void *data, size_t size); bool sample_spec_valid(const struct sample_spec *ss); void sample_spec_fix(struct sample_spec *ss, struct channel_map *map, diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 313054b5f..ceb8ec7f0 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -1424,20 +1424,7 @@ static void stream_process(void *data) if (avail < (int32_t)minreq || stream->corked) { /* underrun, produce a silence buffer */ size = SPA_MIN(d->maxsize, minreq); - switch (stream->ss.format) { - case SPA_AUDIO_FORMAT_U8: - memset(p, 0x80, size); - break; - case SPA_AUDIO_FORMAT_ALAW: - memset(p, 0x80 ^ 0x55, size); - break; - case SPA_AUDIO_FORMAT_ULAW: - memset(p, 0x00 ^ 0xff, size); - break; - default: - memset(p, 0, size); - break; - } + sample_spec_silence(&stream->ss, p, size); if (stream->draining && !stream->corked) { stream->draining = false;