Example #1
0
static gint
_j4status_alsa_section_elem_callback(snd_mixer_elem_t *elem, guint mask)
{
    J4statusAlsaSection *section = snd_mixer_elem_get_callback_private(elem);
    if ( mask == SND_CTL_EVENT_MASK_REMOVE )
        return 0;

    if ( mask & SND_CTL_EVENT_MASK_INFO )
    {
        glong min, max;
        int error;
        error = snd_mixer_selem_get_playback_dB_range(elem, &min, &max);
        if ( ( error == 0 ) && ( min < max ) )
            section->use_dB = TRUE;
        else
        {
            section->use_dB = FALSE;
            snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
        }
        section->min = min;
        section->max = max;
    }

    if ( mask & SND_CTL_EVENT_MASK_VALUE )
        _j4status_alsa_section_update(section, elem);

    return 0;
}
Example #2
0
static int lamixer_switchbox_change(snd_mixer_elem_t *elem, unsigned int mask)
{
	SwitchBox *swbox;
	int volsw;

	if (mask == SND_CTL_EVENT_MASK_REMOVE)
		return 0;

	if (mask & SND_CTL_EVENT_MASK_VALUE) {
		swbox = snd_mixer_elem_get_callback_private(elem);

		if (swbox->type == 1) {
			snd_mixer_selem_get_playback_switch (swbox->volelem, SND_MIXER_SCHN_FRONT_LEFT, &volsw);

			if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(swbox->volswitch)) != volsw) {
				g_signal_handler_block(G_OBJECT(swbox->volswitch), swbox->hswsignalid);
				gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(swbox->volswitch), volsw);
				g_signal_handler_unblock(G_OBJECT(swbox->volswitch), swbox->hswsignalid);
			}

		}
	}

	return 0;
}
Example #3
0
static int
mixer_elem_event_cb (snd_mixer_elem_t *elem, unsigned int mask)
{
	MokoAlsaVolumeControl *control = MOKO_ALSA_VOLUME_CONTROL (
		snd_mixer_elem_get_callback_private (elem));

	update_volume (control);

	return 0;
}
Example #4
0
static gint
gam_toggle_refresh (snd_mixer_elem_t *elem, guint mask)
{
    GamToggle * const gam_toggle = GAM_TOGGLE (snd_mixer_elem_get_callback_private (elem));

    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gam_toggle),
                                  gam_toggle_get_state (gam_toggle));

    return 0;
}
Example #5
0
static int on_mixer_elem_event(snd_mixer_elem_t *elem, unsigned int mask) {
  snd_mixer_selem_id_t *sid;
  void *data = NULL;

  if(elem)
    data = snd_mixer_elem_get_callback_private(elem);

  if(data) {
    long min, max, Rvol, Lvol;

    snd_mixer_selem_id_alloca(&sid);
    snd_mixer_selem_get_id(elem, sid);
    DEBUG("mixer elem control = %s, mask = %x, data = %x\n", snd_mixer_selem_id_get_name(sid), mask, data);
    if(mask & SND_CTL_EVENT_MASK_VALUE) {
      char path[1024] = {0};
      alsa_mixer_t *mixer = (alsa_mixer_t *)g_object_get_data(G_OBJECT(data), "mixer-obj");
      GtkWidget *img = (GtkWidget *)g_object_get_data(G_OBJECT(data), "image-obj");

      DEBUG("mixer = %x, img = %x\n", mixer, img);
      if(snd_mixer_selem_has_playback_volume(elem)) {
        if(mixer->pcm_muted != alsa_mixer_is_muted(elem, NULL)) {
          mixer->pcm_muted = !mixer->pcm_muted;
          g_snprintf(path, 1024, DVM_CONFIG_PATH"/%s", g_playback_iconset[mixer->pcm_muted ? 3: 0]);
          DEBUG("playback switch detected, image path = %s\n", path);
          gtk_image_set_from_file(GTK_IMAGE(img), path);
        }

        snd_mixer_selem_get_playback_volume(elem, 0, &Rvol);
        snd_mixer_selem_get_playback_volume(elem, 1, &Lvol);
        snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
        DEBUG("new val = %d, %d, min = %d, max = %d\n", Rvol, Lvol, min, max);
      } else if(snd_mixer_selem_has_capture_volume(elem)) {
        if(mixer->mic_muted != alsa_mixer_is_muted(elem, NULL)) {
          mixer->mic_muted = !mixer->mic_muted;
          g_snprintf(path, 1024, DVM_CONFIG_PATH"/%s", g_capture_iconset[mixer->mic_muted ? 3: 0]);
          DEBUG("capture switch detected, image path = %s\n", path);
          gtk_image_set_from_file(GTK_IMAGE(img), path);
        }

        snd_mixer_selem_get_capture_volume_range(elem, &min, &max);
        snd_mixer_selem_get_capture_volume(elem, 0, &Rvol);
        snd_mixer_selem_get_capture_volume(elem, 1, &Lvol);
        DEBUG("new val = %d, %d, min = %d, max = %d\n", Rvol, Lvol, min, max);
      }
      g_mixer_ui_updated = TRUE;
      gtk_adjustment_set_value(GTK_ADJUSTMENT(data), ((gdouble)(Rvol+Lvol)*50)/(max-min));
    }
  }

  return 0;
}
Example #6
0
static int
gst_alsa_mixer_elem_handle_callback (snd_mixer_elem_t * elem, unsigned int mask)
{
  GstAlsaMixer *mixer =
      (GstAlsaMixer *) snd_mixer_elem_get_callback_private (elem);

  GST_LOG ("ALSA elem cb");

  g_return_val_if_fail (mixer != NULL, 1);

  gst_alsa_mixer_update (mixer, elem);

  return 0;
}
Example #7
0
static void
gam_slider_pan_refresh (GamSlider *gam_slider)
{
    GamSliderPan * const gam_slider_pan = GAM_SLIDER_PAN (snd_mixer_elem_get_callback_private (gam_slider_get_elem (gam_slider)));
    GamSliderPanPrivate *priv;

    priv = GAM_SLIDER_PAN_GET_PRIVATE (gam_slider_pan);

    gtk_adjustment_set_value (GTK_ADJUSTMENT (priv->vol_adjustment),
                              (gdouble) gam_slider_pan_get_volume (gam_slider_pan));

    if (!snd_mixer_selem_is_playback_mono (gam_slider_get_elem (gam_slider))) {
        gtk_adjustment_set_value (GTK_ADJUSTMENT (priv->pan_adjustment),
                                  (gdouble) gam_slider_pan_get_pan (gam_slider_pan));
    }
}
Example #8
0
static int lamixer_volbox_change(snd_mixer_elem_t *elem, unsigned int mask)
{
	long rangevalue=0;
	int mutesw;
	MixerElem *mixer_elem;

	if (mask == SND_CTL_EVENT_MASK_REMOVE)
		return 0;

	if (mask & SND_CTL_EVENT_MASK_VALUE) {
		mixer_elem = snd_mixer_elem_get_callback_private(elem);
		if(mixer_elem->playback != NULL) {
			snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &rangevalue);
			lamixer_volbox_check(mixer_elem->playback->volbar, mixer_elem->playback->hsignalid, rangevalue, &mixer_elem->playback->curval);

			if(mixer_elem->playback->rvolbar != NULL)
			{
				rangevalue=0;
				snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &rangevalue);
				lamixer_volbox_check(mixer_elem->playback->rvolbar, mixer_elem->playback->hsignalidr, rangevalue, &mixer_elem->playback->rcurval);
			}
			
			if(mixer_elem->playback->muteswitch != NULL) {
				snd_mixer_selem_get_playback_switch (elem, SND_MIXER_SCHN_FRONT_LEFT, &mutesw);
				lamixer_switch_checkvalue(mixer_elem->playback->muteswitch, mutesw, mixer_elem->playback->hmutesignalid);
			}
		}
		if(mixer_elem->capture != NULL) {
			rangevalue=0;
			snd_mixer_selem_get_capture_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &rangevalue);
			lamixer_volbox_check(mixer_elem->capture->volbar, mixer_elem->capture->hsignalid, rangevalue, &mixer_elem->capture->curval);
			if(mixer_elem->capture->rvolbar != NULL)
			{
				rangevalue=0;
				snd_mixer_selem_get_capture_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &rangevalue);
				lamixer_volbox_check(mixer_elem->capture->rvolbar, mixer_elem->capture->hsignalidr, rangevalue, &mixer_elem->capture->rcurval);
			}
			
			if(mixer_elem->capture->muteswitch != NULL) {
				snd_mixer_selem_get_capture_switch (elem, SND_MIXER_SCHN_FRONT_LEFT, &mutesw);
				lamixer_switch_checkvalue(mixer_elem->capture->muteswitch, mutesw, mixer_elem->capture->hmutesignalid);
			}
		}
	}

	return 0;
}
Example #9
0
static int lamixer_enumbox_change(snd_mixer_elem_t *elem, unsigned int mask)
{
	if (mask == SND_CTL_EVENT_MASK_REMOVE)
		return 0;

	if (mask & SND_CTL_EVENT_MASK_VALUE) {
		guint evalue;
		EnumBox *enmbox = NULL;
		
		enmbox = snd_mixer_elem_get_callback_private(elem);
		snd_mixer_selem_get_enum_item(elem, SND_MIXER_SCHN_FRONT_LEFT, &evalue);
		
		gtk_combo_box_set_active(GTK_COMBO_BOX(enmbox->enumswitch), evalue);
	}

	return 0;
}
Example #10
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;
}