static int gst_alsa_mixer_handle_callback (snd_mixer_t * handle, unsigned int mask, snd_mixer_elem_t * elem) { GstAlsaMixer *mixer = (GstAlsaMixer *) snd_mixer_get_callback_private (handle); GST_LOG ("ALSA cb"); g_return_val_if_fail (mixer != NULL, 1); /* Hopefully won't be call recursively and will handle pending elem events */ snd_mixer_handle_events (mixer->handle); gst_alsa_mixer_update (mixer, elem); return 0; }
static gint _j4status_alsa_section_mixer_callback(snd_mixer_t *mixer, guint mask, snd_mixer_elem_t *elem) { J4statusAlsaSection *section = snd_mixer_get_callback_private(mixer); if ( mask & SND_CTL_EVENT_MASK_ADD ) { if ( ( snd_mixer_selem_get_index(elem) == 0 ) && ( g_strcmp0(snd_mixer_selem_get_name(elem), "Master") == 0 ) && snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_FRONT_LEFT) && ( snd_mixer_elem_get_callback_private(elem) == NULL ) ) { snd_mixer_elem_set_callback(elem, _j4status_alsa_section_elem_callback); snd_mixer_elem_set_callback_private(elem, section); } } return 0; }