ext/alsa/: Add switches (simple boolean on/off).

Original commit message from CVS:
* ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
* ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
Add switches (simple boolean on/off).
This commit is contained in:
Ronald S. Bultje 2004-08-29 19:37:38 +00:00
parent ae32253a4a
commit afb7b74873
3 changed files with 26 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2004-08-29 Ronald S. Bultje <Ronald S. Bultje <rbultje@ronald.bitfreak.net>>
* ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
* ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
Add switches (simple boolean on/off).
2004-08-27 David Schleef <ds@schleef.org> 2004-08-27 David Schleef <ds@schleef.org>
* sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put), * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),

View file

@ -266,6 +266,7 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
gint channels = 0; gint channels = 0;
gint flags = GST_MIXER_TRACK_OUTPUT; gint flags = GST_MIXER_TRACK_OUTPUT;
gboolean got_it = FALSE;
if (snd_mixer_selem_has_capture_switch (element)) { if (snd_mixer_selem_has_capture_switch (element)) {
if (dir != GST_PAD_SRC && dir != GST_PAD_UNKNOWN) if (dir != GST_PAD_SRC && dir != GST_PAD_UNKNOWN)
@ -279,13 +280,10 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
if (snd_mixer_selem_has_capture_volume (element)) { if (snd_mixer_selem_has_capture_volume (element)) {
while (snd_mixer_selem_has_capture_channel (element, channels)) while (snd_mixer_selem_has_capture_channel (element, channels))
channels++; channels++;
if (first) {
first = FALSE;
flags |= GST_MIXER_TRACK_MASTER;
}
track = gst_alsa_mixer_track_new (element, i, channels, track = gst_alsa_mixer_track_new (element, i, channels,
flags, GST_ALSA_MIXER_TRACK_CAPTURE); flags, GST_ALSA_MIXER_TRACK_CAPTURE);
mixer->tracklist = g_list_append (mixer->tracklist, track); mixer->tracklist = g_list_append (mixer->tracklist, track);
got_it = TRUE;
} }
if (snd_mixer_selem_has_playback_volume (element)) { if (snd_mixer_selem_has_playback_volume (element)) {
@ -298,11 +296,23 @@ gst_alsa_mixer_build_list (GstAlsaMixer * mixer)
track = gst_alsa_mixer_track_new (element, i, channels, track = gst_alsa_mixer_track_new (element, i, channels,
flags, GST_ALSA_MIXER_TRACK_PLAYBACK); flags, GST_ALSA_MIXER_TRACK_PLAYBACK);
mixer->tracklist = g_list_append (mixer->tracklist, track); mixer->tracklist = g_list_append (mixer->tracklist, track);
got_it = TRUE;
} }
if (snd_mixer_selem_is_enumerated (element)) { if (snd_mixer_selem_is_enumerated (element)) {
opts = gst_alsa_mixer_options_new (element, i); opts = gst_alsa_mixer_options_new (element, i);
mixer->tracklist = g_list_append (mixer->tracklist, opts); mixer->tracklist = g_list_append (mixer->tracklist, opts);
got_it = TRUE;
}
if (!got_it) {
if (flags == GST_MIXER_TRACK_OUTPUT &&
snd_mixer_selem_has_playback_switch (element)) {
/* simple mute switch */
track = gst_alsa_mixer_track_new (element, i, 0,
flags, GST_ALSA_MIXER_TRACK_PLAYBACK);
mixer->tracklist = g_list_append (mixer->tracklist, track);
}
} }
element = snd_mixer_elem_next (element); element = snd_mixer_elem_next (element);

View file

@ -86,10 +86,12 @@ gst_alsa_mixer_track_new (snd_mixer_elem_t * element,
alsa_track->track_num = track_num; alsa_track->track_num = track_num;
/* set volume information */ /* set volume information */
if (alsa_flags & GST_ALSA_MIXER_TRACK_PLAYBACK) { if (channels) {
snd_mixer_selem_get_playback_volume_range (element, &min, &max); if (alsa_flags & GST_ALSA_MIXER_TRACK_PLAYBACK) {
} else if (alsa_flags & GST_ALSA_MIXER_TRACK_CAPTURE) { snd_mixer_selem_get_playback_volume_range (element, &min, &max);
snd_mixer_selem_get_capture_volume_range (element, &min, &max); } else if (alsa_flags & GST_ALSA_MIXER_TRACK_CAPTURE) {
snd_mixer_selem_get_capture_volume_range (element, &min, &max);
}
} }
track->min_volume = (gint) min; track->min_volume = (gint) min;
track->max_volume = (gint) max; track->max_volume = (gint) max;