mixer_all: added mixer_all_set_software_volume()
The special-purpose function is used for saving/restore the software volume control to the state file.
This commit is contained in:
parent
5d74b1efef
commit
da8095db54
@ -22,6 +22,9 @@
|
||||
#include "output_all.h"
|
||||
#include "output_plugin.h"
|
||||
#include "output_internal.h"
|
||||
#include "pcm_volume.h"
|
||||
#include "mixer_api.h"
|
||||
#include "mixer_list.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
@ -103,3 +106,57 @@ mixer_all_set_volume(unsigned volume)
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
static int
|
||||
output_mixer_get_software_volume(unsigned i)
|
||||
{
|
||||
struct audio_output *output;
|
||||
struct mixer *mixer;
|
||||
|
||||
assert(i < audio_output_count());
|
||||
|
||||
output = audio_output_get(i);
|
||||
if (!output->enabled)
|
||||
return -1;
|
||||
|
||||
mixer = output->mixer;
|
||||
if (mixer == NULL || mixer->plugin != &software_mixer_plugin)
|
||||
return -1;
|
||||
|
||||
return mixer_get_volume(mixer);
|
||||
}
|
||||
|
||||
int
|
||||
mixer_all_get_software_volume(void)
|
||||
{
|
||||
unsigned count = audio_output_count(), ok = 0;
|
||||
int volume, total = 0;
|
||||
|
||||
for (unsigned i = 0; i < count; i++) {
|
||||
volume = output_mixer_get_software_volume(i);
|
||||
if (volume >= 0) {
|
||||
total += volume;
|
||||
++ok;
|
||||
}
|
||||
}
|
||||
|
||||
if (ok == 0)
|
||||
return -1;
|
||||
|
||||
return total / ok;
|
||||
}
|
||||
|
||||
void
|
||||
mixer_all_set_software_volume(unsigned volume)
|
||||
{
|
||||
unsigned count = audio_output_count();
|
||||
|
||||
assert(volume <= PCM_VOLUME_1);
|
||||
|
||||
for (unsigned i = 0; i < count; i++) {
|
||||
struct audio_output *output = audio_output_get(i);
|
||||
if (output->mixer != NULL &&
|
||||
output->mixer->plugin == &software_mixer_plugin)
|
||||
mixer_set_volume(output->mixer, volume);
|
||||
}
|
||||
}
|
||||
|
@ -43,4 +43,20 @@ mixer_all_get_volume(void);
|
||||
bool
|
||||
mixer_all_set_volume(unsigned volume);
|
||||
|
||||
/**
|
||||
* Similar to mixer_all_get_volume(), but gets the volume only for
|
||||
* software mixers. See #software_mixer_plugin. This function fails
|
||||
* if no software mixer is configured.
|
||||
*/
|
||||
int
|
||||
mixer_all_get_software_volume(void);
|
||||
|
||||
/**
|
||||
* Similar to mixer_all_set_volume(), but sets the volume only for
|
||||
* software mixers. See #software_mixer_plugin. This function cannot
|
||||
* fail, because the underlying software mixers cannot fail either.
|
||||
*/
|
||||
void
|
||||
mixer_all_set_software_volume(unsigned volume);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user