mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-03-21 05:33:49 -04:00
pulse-server: make a function to silence a buffer
This commit is contained in:
parent
c0a6a7ea32
commit
cf7e917024
3 changed files with 20 additions and 14 deletions
|
|
@ -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)
|
bool sample_spec_valid(const struct sample_spec *ss)
|
||||||
{
|
{
|
||||||
return (sample_spec_frame_size(ss) > 0 &&
|
return (sample_spec_frame_size(ss) > 0 &&
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,7 @@ const char *format_encoding2name(enum encoding enc);
|
||||||
uint32_t format_encoding2id(enum encoding enc);
|
uint32_t format_encoding2id(enum encoding enc);
|
||||||
|
|
||||||
uint32_t sample_spec_frame_size(const struct sample_spec *ss);
|
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);
|
bool sample_spec_valid(const struct sample_spec *ss);
|
||||||
|
|
||||||
void sample_spec_fix(struct sample_spec *ss, struct channel_map *map,
|
void sample_spec_fix(struct sample_spec *ss, struct channel_map *map,
|
||||||
|
|
|
||||||
|
|
@ -1390,20 +1390,7 @@ static void stream_process(void *data)
|
||||||
if (avail < (int32_t)minreq || stream->corked) {
|
if (avail < (int32_t)minreq || stream->corked) {
|
||||||
/* underrun, produce a silence buffer */
|
/* underrun, produce a silence buffer */
|
||||||
size = SPA_MIN(d->maxsize, minreq);
|
size = SPA_MIN(d->maxsize, minreq);
|
||||||
switch (stream->ss.format) {
|
sample_spec_silence(&stream->ss, p, size);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stream->draining && !stream->corked) {
|
if (stream->draining && !stream->corked) {
|
||||||
stream->draining = false;
|
stream->draining = false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue