static void change_enum_to_percent(struct control *control, int value) { unsigned int i; unsigned int index; unsigned int new_index; int items; int err; i = ffs(control->enum_channel_bits) - 1; err = snd_mixer_selem_get_enum_item(control->elem, i, &index); if (err < 0) return; new_index = index; if (value == 0) { new_index = 0; } else if (value == 100) { items = snd_mixer_selem_get_enum_items(control->elem); if (items < 1) return; new_index = items - 1; } if (new_index == index) return; for (i = 0; i <= SND_MIXER_SCHN_LAST; ++i) if (control->enum_channel_bits & (1 << i)) snd_mixer_selem_set_enum_item(control->elem, i, new_index); }
static void change_enum_relative(struct control *control, int delta) { int items; unsigned int i; unsigned int index; int new_index; int err; items = snd_mixer_selem_get_enum_items(control->elem); if (items < 1) return; err = snd_mixer_selem_get_enum_item(control->elem, 0, &index); if (err < 0) return; new_index = (int)index + delta; if (new_index < 0) new_index = 0; else if (new_index >= items) new_index = items - 1; if (new_index == index) return; for (i = 0; i <= SND_MIXER_SCHN_LAST; ++i) if (control->enum_channel_bits & (1 << i)) snd_mixer_selem_set_enum_item(control->elem, i, new_index); }
/* * The purpose of this function is to let the user to select * the input where he plugged his signals. * Now if user select "default", as device, we have to select the input * on the mixer of the card used by "default". * What is the card used by device "default" ? */ static void as_setup_input_combo (GtkWidget *combo, SoundParams *sparams) { snd_mixer_t *handle; int i ; snd_mixer_selem_id_t *sid; snd_mixer_elem_t *elem; snd_mixer_selem_id_alloca(&sid); char *devname; char name[32]; devname = sparams->device_name; if ( *sparams->indexstr == '-' ) { sprintf(name, "hw:%d", sparams->firstcard); devname = name; } handle = sound_open_mixer(devname); if ( handle == NULL ){ return ; } for (elem = snd_mixer_first_elem(handle); elem; elem = snd_mixer_elem_next(elem)) { snd_mixer_selem_get_id(elem, sid); if (! snd_mixer_selem_is_active(elem)) { continue; } const char *control_name = snd_mixer_selem_id_get_name(sid); // printf("Simple mixer control '%s',%i\n", control_name, snd_mixer_selem_id_get_index(sid)); if (snd_mixer_selem_is_enum_capture(elem)) { int items; char itemname[40]; app_free(sparams->control_name); sparams->control_name = app_strdup(control_name); items = snd_mixer_selem_get_enum_items(elem); // printf(" Items:"); for (i = 0; i < items; i++) { snd_mixer_selem_get_enum_item_name(elem, i, sizeof(itemname) - 1, itemname); // printf(" '%s'", itemname); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), itemname ); if ( i == sparams->input ) { gtk_combo_box_set_active (GTK_COMBO_BOX (combo), i); } } // printf("\n"); } } snd_mixer_close(handle); return ; }
EnumBox *lamixer_enumbox_add(const gchar *str, snd_mixer_elem_t *elem, guint voltype) { EnumBox *enumbox; enumbox = g_malloc(sizeof(EnumBox)); enumbox->type = voltype; enumbox->volelem = elem; enumbox->enumhbox = gtk_hbox_new(FALSE,0); enumbox->enumname = gtk_label_new(str); enumbox->enumswitch = gtk_combo_box_new_text(); int enumsCnt = snd_mixer_selem_get_enum_items(elem); for(int i=0; i<enumsCnt; i++) { char iname[256]; snd_mixer_selem_get_enum_item_name(elem, i, sizeof(iname), iname); gtk_combo_box_append_text (GTK_COMBO_BOX (enumbox->enumswitch), iname); } gtk_box_pack_start(GTK_BOX(enumbox->enumhbox), enumbox->enumname, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(enumbox->enumhbox), enumbox->enumswitch, FALSE, FALSE, 0); return enumbox; }
GstMixerOptions * gst_alsa_mixer_options_new (snd_mixer_elem_t * element, gint track_num) { GstMixerOptions *opts; GstAlsaMixerOptions *alsa_opts; GstMixerTrack *track; const gchar *label; gint num, i; gchar str[256]; label = snd_mixer_selem_get_name (element); opts = g_object_new (GST_ALSA_MIXER_OPTIONS_TYPE, "untranslated-label", label, NULL); alsa_opts = (GstAlsaMixerOptions *) opts; track = (GstMixerTrack *) opts; /* set basic information */ track->label = g_strdup (label); /* FIXME: translate this? */ track->num_channels = 0; track->flags = 0; alsa_opts->element = element; alsa_opts->track_num = track_num; /* get enumerations for switch/options object */ num = snd_mixer_selem_get_enum_items (element); for (i = 0; i < num; i++) { if (snd_mixer_selem_get_enum_item_name (element, i, 255, str) < 0) { g_object_unref (G_OBJECT (alsa_opts)); return NULL; } opts->values = g_list_append (opts->values, g_strdup (str)); } return opts; }