volume: added PIPE_EVENT_MIXER

Flush the hardware volume cache, and send the MIXER idle event.  This
allows mixer plugins to detect volume changes.
This commit is contained in:
Max Kellermann 2009-10-21 09:48:37 +02:00
parent 4e2fb3fb89
commit b8ccc885c8
2 changed files with 19 additions and 0 deletions

View File

@ -41,6 +41,9 @@ enum pipe_event {
/** SIGHUP received: reload configuration, roll log file */ /** SIGHUP received: reload configuration, roll log file */
PIPE_EVENT_RELOAD, PIPE_EVENT_RELOAD,
/** a hardware mixer plugin has detected a change */
PIPE_EVENT_MIXER,
PIPE_EVENT_MAX PIPE_EVENT_MAX
}; };

View File

@ -27,6 +27,7 @@
#include "mixer_control.h" #include "mixer_control.h"
#include "mixer_all.h" #include "mixer_all.h"
#include "mixer_type.h" #include "mixer_type.h"
#include "event_pipe.h"
#include <glib.h> #include <glib.h>
@ -47,6 +48,19 @@ static int last_hardware_volume = -1;
/** the age of #last_hardware_volume */ /** the age of #last_hardware_volume */
static GTimer *hardware_volume_timer; static GTimer *hardware_volume_timer;
/**
* Handler for #PIPE_EVENT_MIXER.
*/
static void
mixer_event_callback(void)
{
/* flush the hardware volume cache */
last_hardware_volume = -1;
/* notify clients */
idle_add(IDLE_MIXER);
}
void volume_finish(void) void volume_finish(void)
{ {
g_timer_destroy(hardware_volume_timer); g_timer_destroy(hardware_volume_timer);
@ -55,6 +69,8 @@ void volume_finish(void)
void volume_init(void) void volume_init(void)
{ {
hardware_volume_timer = g_timer_new(); hardware_volume_timer = g_timer_new();
event_pipe_register(PIPE_EVENT_MIXER, mixer_event_callback);
} }
int volume_level_get(void) int volume_level_get(void)