mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-03-26 07:58:03 -04:00
spa: alsa: Support volume control commands for external volume control
This commit is contained in:
parent
681169b415
commit
e863e71f6b
3 changed files with 99 additions and 0 deletions
|
|
@ -2486,6 +2486,24 @@ int acp_device_set_volume(struct acp_device *dev, const float *volume, uint32_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
int acp_device_set_volume_updown(struct acp_device *dev, bool up)
|
||||
{
|
||||
pa_alsa_device *d = (pa_alsa_device*)dev;
|
||||
pa_card *impl = d->card;
|
||||
|
||||
if (!impl->card.ext_volume.client)
|
||||
return -EINVAL;
|
||||
|
||||
if (!d->active_port)
|
||||
return -EINVAL;
|
||||
|
||||
pa_log_info("Volume %s", up ? "up" : "down");
|
||||
|
||||
/* TODO: use step size from capabilities */
|
||||
return spa_acp_ext_volume_write_volume_relative(&impl->card.ext_volume, impl->name,
|
||||
d->active_port->name, up ? 1.0 : -1.0);
|
||||
}
|
||||
|
||||
static int get_volume(pa_cvolume *v, float *volume, uint32_t n_volume)
|
||||
{
|
||||
uint32_t i;
|
||||
|
|
@ -2539,6 +2557,23 @@ int acp_device_get_mute(struct acp_device *dev, bool *mute)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int acp_device_toggle_mute(struct acp_device *dev)
|
||||
{
|
||||
pa_alsa_device *d = (pa_alsa_device*)dev;
|
||||
pa_card *impl = d->card;
|
||||
|
||||
if (!impl->card.ext_volume.client)
|
||||
return -EINVAL;
|
||||
|
||||
if (!d->active_port)
|
||||
return -EINVAL;
|
||||
|
||||
pa_log_info("Toggle mute");
|
||||
|
||||
return spa_acp_ext_volume_write_mute_toggle(&impl->card.ext_volume, impl->name,
|
||||
d->active_port->name);
|
||||
}
|
||||
|
||||
void acp_set_log_func(acp_log_func func, void *data)
|
||||
{
|
||||
_acp_log_func = func;
|
||||
|
|
|
|||
|
|
@ -308,9 +308,11 @@ uint32_t acp_device_find_best_port_index(struct acp_device *dev, const char *nam
|
|||
int acp_device_set_port(struct acp_device *dev, uint32_t port_index, uint32_t flags);
|
||||
|
||||
int acp_device_set_volume(struct acp_device *dev, const float *volume, uint32_t n_volume);
|
||||
int acp_device_set_volume_updown(struct acp_device *dev, bool up);
|
||||
int acp_device_get_soft_volume(struct acp_device *dev, float *volume, uint32_t n_volume);
|
||||
int acp_device_get_volume(struct acp_device *dev, float *volume, uint32_t n_volume);
|
||||
int acp_device_set_mute(struct acp_device *dev, bool mute);
|
||||
int acp_device_toggle_mute(struct acp_device *dev);
|
||||
int acp_device_get_mute(struct acp_device *dev, bool *mute);
|
||||
|
||||
typedef void (*acp_log_func) (void *data,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue