Package: alsa-oss
Version: 1.0.8-1
Severity: normal

Hi,

My MacMini's audio chip seems to have no hardware volume control (or it 
is unsupported in the kernel I use), so I use software volume control, 
with the attached .asoundrc. (I'm still a newbie about alsa, there may 
be some mistakes in my .soundrc file.)

While trying to use hotkeys (that only understands oss) with aoss, I 
discovered that aoss did not allow to read the volume control, while it 
can write it flawlessly.

After a few tests, I discovered that it was related to the failing 
snd_mixer_selem_get_playback_switch function call, and I could 
workaround the issue with the attached trivial quick&dirty patch.


Cheers,

Nicolas Boullis


-- System Information:
Debian Release: 3.1
Architecture: powerpc (ppc)
Kernel: Linux 2.6.12-irma
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages alsa-oss depends on:
ii  libasound2                  1.0.8-3      ALSA library
ii  libc6                       2.3.2.ds1-22 GNU C Library: Shared libraries an

-- no debconf information
pcm.!default {
  type plug
  slave {
    pcm {
      type softvol
      slave {
        pcm {
          type dmix
          ipc_key 7666
          slave {
            pcm "hw:0,0"
            period_time 0
            period_size 1024
            buffer_size 8192
            rate 44100
          }
        }
      }
      control {
        name Master
        card 0
      }
    }
  }
}

pcm.dsp0 {
  type plug
  slave.pcm "!default"
}

only in patch2:
unchanged:
--- alsa-oss-1.0.8.orig/alsa/mixer.c
+++ alsa-oss-1.0.8/alsa/mixer.c
@@ -487,9 +487,7 @@
                                break;
                        }
                        err = snd_mixer_selem_get_playback_switch(elem, 
SND_MIXER_SCHN_FRONT_LEFT, &sw);
-                       if (err < 0) 
-                               break;
-                       if (sw) {
+                       if ((err < 0) || (sw)) {
                                err = snd_mixer_selem_get_playback_volume(elem, 
SND_MIXER_SCHN_FRONT_LEFT, &lvol);
                                if (err < 0) 
                                        break;
@@ -499,9 +497,7 @@
                                rvol = lvol;
                        } else {
                                err = snd_mixer_selem_get_playback_switch(elem, 
SND_MIXER_SCHN_FRONT_RIGHT, &sw);
-                               if (err < 0) 
-                                       break;
-                               if (sw) {
+                               if ((err < 0) || (sw)) { 
                                        err = 
snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &rvol);
                                        if (err < 0) 
                                                break;

Reply via email to