]> git.alsa-project.org Git - alsa-oss.git/commitdiff
Fix the handling of playback elements without switch
authorTakashi Iwai <tiwai@suse.de>
Thu, 5 Jan 2006 18:47:01 +0000 (18:47 +0000)
committerTakashi Iwai <tiwai@suse.de>
Thu, 5 Jan 2006 18:47:01 +0000 (18:47 +0000)
Fix the handling of playback elements without switch (e.g. softvol controls).
Taken from bug#1278.

alsa/mixer.c

index 0091140849fb3a46fe5def691bfff429a21aa1ca..251a08af22a5c7ec54f938e8590f3ac562d0a6ac 100644 (file)
@@ -482,9 +482,13 @@ int lib_oss_mixer_ioctl(int fd, unsigned long cmd, ...)
                                break;
                        }
                        if (snd_mixer_selem_has_playback_volume(elem)) {
-                               err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, &sw);
-                               if (err < 0) 
-                                       break;
+                               if (snd_mixer_selem_has_playback_switch(elem)) {
+                                       err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, &sw);
+                                       if (err < 0)
+                                               break;
+                               } else {
+                                       sw = 1;
+                               }
                                if (sw) {
                                        err = snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &lvol);
                                        if (err < 0) 
@@ -494,9 +498,13 @@ int lib_oss_mixer_ioctl(int fd, unsigned long cmd, ...)
                                if (snd_mixer_selem_is_playback_mono(elem)) {
                                        rvol = lvol;
                                } else {
-                                       err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_RIGHT, &sw);
-                                       if (err < 0) 
-                                               break;
+                                       if (snd_mixer_selem_has_playback_switch(elem)) {
+                                               err = snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_RIGHT, &sw);
+                                               if (err < 0)
+                                                       break;
+                                       } else {
+                                               sw = 1;
+                                       }
                                        if (sw) {
                                                err = snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &rvol);
                                                if (err < 0)