diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mixer.c | 26 | ||||
| -rw-r--r-- | src/stubs.h | 2 | 
2 files changed, 22 insertions, 6 deletions
diff --git a/src/mixer.c b/src/mixer.c index 4738012..48b3882 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -10,7 +10,7 @@ struct _snd_mixer_elem {     snd_mixer_elem_t *next;     snd_mixer_t *mixer;     char name[SYSEX_NAMELEN]; -   unsigned int index, vol; +   unsigned int index, vol, muted_vol;  };  struct _snd_mixer { @@ -94,7 +94,6 @@ get_controls(snd_mixer_t *mixer)     };     static snd_mixer_elem_t controls[MIXER_MAX_CHANNELS + 1]; -   memset(controls, 0, sizeof(controls));     unsigned char buf[0x100];     mio_write(mixer->hdl, dumpreq, sizeof(dumpreq)); @@ -310,8 +309,7 @@ snd_mixer_selem_get_playback_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_  int  snd_mixer_selem_set_playback_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value, int dir)  { -   setvol(elem->mixer, elem->index, value + 0x7f); -   elem->vol = value + 0x7f; +   setvol(elem->mixer, elem->index, (elem->vol = value + 0x7f));     return 0;  } @@ -324,6 +322,26 @@ snd_mixer_selem_get_playback_dB_range(snd_mixer_elem_t *elem, long *min, long *m  }  int +snd_mixer_selem_get_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int *value) +{ +   *value = (elem->vol > 0); +   return 0; +} + +int +snd_mixer_selem_set_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value) +{ +   if (value) { +      elem->muted_vol = (elem->muted_vol ? elem->muted_vol : 10); +      setvol(elem->mixer, elem->index, (elem->vol = elem->muted_vol)); +   } else { +      elem->muted_vol = elem->vol; +      setvol(elem->mixer, elem->index, (elem->vol = 0)); +   } +   return 0; +} + +int  snd_mixer_selem_has_playback_volume(snd_mixer_elem_t *elem)  {     return true; diff --git a/src/stubs.h b/src/stubs.h index 6e9391e..cf94ee8 100644 --- a/src/stubs.h +++ b/src/stubs.h @@ -410,7 +410,6 @@ int snd_mixer_selem_ask_playback_dB_vol(snd_mixer_elem_t *elem, long dBvalue, in  int snd_mixer_selem_ask_capture_dB_vol(snd_mixer_elem_t *elem, long dBvalue, int dir, long *value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_get_capture_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_get_capture_dB(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long *value) { WARNX1("stub"); return 0; } -int snd_mixer_selem_get_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int *value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_get_capture_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int *value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_playback_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_capture_volume(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, long value) { WARNX1("stub"); return 0; } @@ -419,7 +418,6 @@ int snd_mixer_selem_set_playback_volume_all(snd_mixer_elem_t *elem, long value)  int snd_mixer_selem_set_capture_volume_all(snd_mixer_elem_t *elem, long value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_playback_dB_all(snd_mixer_elem_t *elem, long value, int dir) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_capture_dB_all(snd_mixer_elem_t *elem, long value, int dir) { WARNX1("stub"); return 0; } -int snd_mixer_selem_set_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_capture_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_playback_switch_all(snd_mixer_elem_t *elem, int value) { WARNX1("stub"); return 0; }  int snd_mixer_selem_set_capture_switch_all(snd_mixer_elem_t *elem, int value) { WARNX1("stub"); return 0; }  | 
