pulse-server: make a function to silence a buffer

This commit is contained in:
Wim Taymans 2025-01-16 16:16:39 +01:00
parent c0a6a7ea32
commit cf7e917024
3 changed files with 20 additions and 14 deletions

View file

@ -221,6 +221,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 &&

View file

@ -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,

View file

@ -1390,20 +1390,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;