diff --git a/spa/plugins/alsa/alsa-acp-device.c b/spa/plugins/alsa/alsa-acp-device.c index 049c5dde5..e07c52b0e 100644 --- a/spa/plugins/alsa/alsa-acp-device.c +++ b/spa/plugins/alsa/alsa-acp-device.c @@ -518,6 +518,9 @@ static int apply_device_props(struct impl *this, struct acp_device *dev, struct struct spa_pod_prop *prop; struct spa_pod_object *obj = (struct spa_pod_object *) props; int changed = 0; + float volumes[ACP_MAX_CHANNELS]; + uint32_t channels[ACP_MAX_CHANNELS]; + uint32_t n_volumes = 0, n_channels = 0; if (!spa_pod_is_object_type(props, SPA_TYPE_OBJECT_Props)) return -EINVAL; @@ -537,20 +540,23 @@ static int apply_device_props(struct impl *this, struct acp_device *dev, struct } break; case SPA_PROP_channelVolumes: - { - float volumes[64]; - uint32_t n_volumes; - if ((n_volumes = spa_pod_copy_array(&prop->value, SPA_TYPE_Float, - volumes, 64)) > 0) { - acp_device_set_volume(dev, volumes, n_volumes); + volumes, ACP_MAX_CHANNELS)) > 0) { + changed++; + } + break; + case SPA_PROP_channelMap: + if ((n_channels = spa_pod_copy_array(&prop->value, SPA_TYPE_Id, + channels, ACP_MAX_CHANNELS)) > 0) { changed++; } break; } - } } - return 0; + if (n_volumes > 0) + acp_device_set_volume(dev, volumes, n_volumes); + + return changed; } static int impl_set_param(void *object,