Mercurial > audlegacy-plugins
diff src/alsa/audio.c @ 1728:63feceeb3799
Remove software volume control (it has been moved to the core as a pipeline flow element).
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Tue, 18 Sep 2007 10:53:36 -0500 |
parents | 9d6de95dd7ed |
children | c730f0212456 |
line wrap: on
line diff
--- a/src/alsa/audio.c Tue Sep 18 09:47:41 2007 -0500 +++ b/src/alsa/audio.c Tue Sep 18 10:53:36 2007 -0500 @@ -443,8 +443,7 @@ return -1; } - if (!alsa_cfg.soft_volume) - alsa_set_volume(a * 100 / alsa_max_vol, b * 100 / alsa_max_vol); + alsa_set_volume(a * 100 / alsa_max_vol, b * 100 / alsa_max_vol); debug("alsa_setup_mixer: end"); @@ -485,28 +484,20 @@ mixer_start = FALSE; } - if (alsa_cfg.soft_volume) - { - *l = alsa_cfg.vol.left; - *r = alsa_cfg.vol.right; - } - if (!pcm_element) return; snd_mixer_handle_events(mixer); - if (!alsa_cfg.soft_volume) - { - snd_mixer_selem_get_playback_volume(pcm_element, - SND_MIXER_SCHN_FRONT_LEFT, - &ll); - snd_mixer_selem_get_playback_volume(pcm_element, - SND_MIXER_SCHN_FRONT_RIGHT, - &lr); - *l = ll; - *r = lr; - } + snd_mixer_selem_get_playback_volume(pcm_element, + SND_MIXER_SCHN_FRONT_LEFT, + &ll); + snd_mixer_selem_get_playback_volume(pcm_element, + SND_MIXER_SCHN_FRONT_RIGHT, + &lr); + *l = ll; + *r = lr; + if (mixer_timeout) gtk_timeout_remove(mixer_timeout); mixer_timeout = gtk_timeout_add(5000, alsa_mixer_timeout, NULL); @@ -515,13 +506,6 @@ void alsa_set_volume(int l, int r) { - if (alsa_cfg.soft_volume) - { - alsa_cfg.vol.left = l; - alsa_cfg.vol.right = r; - return; - } - if (!pcm_element) return; @@ -590,110 +574,6 @@ return (alsa_total_written * 1000) / inputf->bps; } -#define STEREO_ADJUST(type, type2, endian) \ -do { \ - type *ptr = data; \ - for (i = 0; i < length; i += 4) \ - { \ - *ptr = type2##_TO_##endian(type2##_FROM_## endian(*ptr) * \ - lvol / 256); \ - ptr++; \ - *ptr = type2##_TO_##endian(type2##_FROM_##endian(*ptr) * \ - rvol / 256); \ - ptr++; \ - } \ -} while (0) - -#define MONO_ADJUST(type, type2, endian) \ -do { \ - type *ptr = data; \ - for (i = 0; i < length; i += 2) \ - { \ - *ptr = type2##_TO_##endian(type2##_FROM_## endian(*ptr) * \ - vol / 256); \ - ptr++; \ - } \ -} while (0) - -#define VOLUME_ADJUST(type, type2, endian) \ -do { \ - if (channels == 2) \ - STEREO_ADJUST(type, type2, endian); \ - else \ - MONO_ADJUST(type, type2, endian); \ -} while (0) - -#define STEREO_ADJUST8(type) \ -do { \ - type *ptr = data; \ - for (i = 0; i < length; i += 2) \ - { \ - *ptr = *ptr * lvol / 256; \ - ptr++; \ - *ptr = *ptr * rvol / 256; \ - ptr++; \ - } \ -} while (0) - -#define MONO_ADJUST8(type) \ -do { \ - type *ptr = data; \ - for (i = 0; i < length; i++) \ - { \ - *ptr = *ptr * vol / 256; \ - ptr++; \ - } \ -} while (0) - -#define VOLUME_ADJUST8(type) \ -do { \ - if (channels == 2) \ - STEREO_ADJUST8(type); \ - else \ - MONO_ADJUST8(type); \ -} while (0) - - -static void volume_adjust(void* data, int length, AFormat fmt, int channels) -{ - int i, vol, lvol, rvol; - - if ((alsa_cfg.vol.left == 100 && alsa_cfg.vol.right == 100) || - (channels == 1 && - (alsa_cfg.vol.left == 100 || alsa_cfg.vol.right == 100))) - return; - - lvol = pow(10, (alsa_cfg.vol.left - 100) / 40.0) * 256; - rvol = pow(10, (alsa_cfg.vol.right - 100) / 40.0) * 256; - vol = MAX(lvol, rvol); - - switch (fmt) - { - case FMT_S16_LE: - VOLUME_ADJUST(gint16, GINT16, LE); - break; - case FMT_U16_LE: - VOLUME_ADJUST(guint16, GUINT16, LE); - break; - case FMT_S16_BE: - VOLUME_ADJUST(gint16, GINT16, BE); - break; - case FMT_U16_BE: - VOLUME_ADJUST(guint16, GUINT16, BE); - break; - case FMT_S8: - VOLUME_ADJUST8(gint8); - break; - case FMT_U8: - VOLUME_ADJUST8(guint8); - break; - default: - g_warning("volue_adjust(): unhandled format: %d", fmt); - break; - } -} - - /* transfer data to audio h/w; length is given in bytes * * data can be modified via effect plugin, rate conversion or @@ -718,9 +598,6 @@ effectf->rate, outputf->rate); - if (alsa_cfg.soft_volume) - volume_adjust(data, length, outputf->xmms_format, outputf->channels); - alsa_write_audio(data, length); }