pulse-server: set the SINK_SET_FORMATS flag

When we have an iec958Codecs property on the node, we can use it to
configure the codecs on the sink.
This commit is contained in:
Wim Taymans 2021-09-01 13:21:31 +02:00
parent 49eb31f670
commit ea7a731106
3 changed files with 5 additions and 0 deletions

View file

@ -281,6 +281,8 @@ void collect_device_info(struct pw_manager_object *device, struct pw_manager_obj
volume_parse_param(p->param, &dev_info->volume_info, monitor); volume_parse_param(p->param, &dev_info->volume_info, monitor);
dev_info->have_volume = true; dev_info->have_volume = true;
} }
dev_info->have_iec958codecs = spa_pod_find_prop(p->param,
NULL, SPA_PROP_iec958Codecs) != NULL;
break; break;
} }
} }

View file

@ -63,6 +63,7 @@ struct device_info {
struct channel_map map; struct channel_map map;
struct volume_info volume_info; struct volume_info volume_info;
unsigned int have_volume:1; unsigned int have_volume:1;
unsigned int have_iec958codecs:1;
uint32_t device; uint32_t device;
uint32_t active_port; uint32_t active_port;

View file

@ -3488,6 +3488,8 @@ static int fill_sink_info(struct client *client, struct message *m,
flags |= SINK_HW_VOLUME_CTRL; flags |= SINK_HW_VOLUME_CTRL;
if (SPA_FLAG_IS_SET(dev_info.volume_info.flags, VOLUME_HW_MUTE)) if (SPA_FLAG_IS_SET(dev_info.volume_info.flags, VOLUME_HW_MUTE))
flags |= SINK_HW_MUTE_CTRL; flags |= SINK_HW_MUTE_CTRL;
if (dev_info.have_iec958codecs)
flags |= SINK_SET_FORMATS;
if (client->quirks & QUIRK_FORCE_S16_FORMAT) if (client->quirks & QUIRK_FORCE_S16_FORMAT)
dev_info.ss.format = SPA_AUDIO_FORMAT_S16; dev_info.ss.format = SPA_AUDIO_FORMAT_S16;