mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
pulse-server: only send 32 channels max to a client
Limit the amount of channels we send to a client to 32 because this is the pulseaudio limit. This means that only the first 32 channels are accessible from the pulseaudio API. Fixes #1033
This commit is contained in:
parent
8bf7ce5fa4
commit
60b405fdfd
1 changed files with 10 additions and 6 deletions
|
|
@ -26,6 +26,8 @@
|
|||
#define VOLUME_NORM ((uint32_t) 0x10000U)
|
||||
#define VOLUME_MAX ((uint32_t) UINT32_MAX/2)
|
||||
|
||||
#define PA_CHANNELS_MAX (32u)
|
||||
|
||||
static inline uint32_t volume_from_linear(float vol)
|
||||
{
|
||||
uint32_t v;
|
||||
|
|
@ -512,9 +514,10 @@ static void write_64(struct message *m, uint8_t tag, uint64_t val)
|
|||
|
||||
static void write_sample_spec(struct message *m, struct sample_spec *ss)
|
||||
{
|
||||
uint32_t channels = SPA_MIN(ss->channels, PA_CHANNELS_MAX);
|
||||
write_8(m, TAG_SAMPLE_SPEC);
|
||||
write_8(m, format_id2pa(ss->format));
|
||||
write_8(m, ss->channels);
|
||||
write_8(m, channels);
|
||||
write_32(m, ss->rate);
|
||||
}
|
||||
|
||||
|
|
@ -542,10 +545,10 @@ static void write_timeval(struct message *m, struct timeval *tv)
|
|||
static void write_channel_map(struct message *m, struct channel_map *map)
|
||||
{
|
||||
uint8_t i;
|
||||
uint32_t aux = 0;
|
||||
uint32_t aux = 0, channels = SPA_MIN(map->channels, PA_CHANNELS_MAX);
|
||||
write_8(m, TAG_CHANNEL_MAP);
|
||||
write_8(m, map->channels);
|
||||
for (i = 0; i < map->channels; i ++)
|
||||
write_8(m, channels);
|
||||
for (i = 0; i < channels; i ++)
|
||||
write_8(m, channel_id2pa(map->map[i], &aux));
|
||||
}
|
||||
|
||||
|
|
@ -558,9 +561,10 @@ static void write_volume(struct message *m, float vol)
|
|||
static void write_cvolume(struct message *m, struct volume *vol)
|
||||
{
|
||||
uint8_t i;
|
||||
uint32_t channels = SPA_MIN(vol->channels, PA_CHANNELS_MAX);
|
||||
write_8(m, TAG_CVOLUME);
|
||||
write_8(m, vol->channels);
|
||||
for (i = 0; i < vol->channels; i ++)
|
||||
write_8(m, channels);
|
||||
for (i = 0; i < channels; i ++)
|
||||
write_32(m, volume_from_linear(vol->values[i]));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue