diff options
author | wm4 <wm4@mplayer2.org> | 2012-04-28 00:39:19 +0200 |
---|---|---|
committer | wm4 <wm4@mplayer2.org> | 2012-04-28 00:54:26 +0200 |
commit | 87f4cafe9c0881743d1117c2e8cd7e3376e33302 (patch) | |
tree | f41caa5aad8969d769a777c0a7912751721a66bd /libao2/ao_alsa.c | |
parent | 1324eaece08d84fbe3eb539642dba99b74dd1c07 (diff) | |
parent | b711624ef350d1e971f5fcc57eb4af9f74233d2a (diff) | |
download | mpv-87f4cafe9c0881743d1117c2e8cd7e3376e33302.tar.bz2 mpv-87f4cafe9c0881743d1117c2e8cd7e3376e33302.tar.xz |
Merge remote-tracking branch 'origin/master'
Conflicts:
command.c
libao2/ao_alsa.c
libao2/ao_dsound.c
libao2/ao_pulse.c
libao2/audio_out.h
mixer.c
mixer.h
mplayer.c
Replace my mixer changes with uau's implementation, which is based on
my code.
Diffstat (limited to 'libao2/ao_alsa.c')
-rw-r--r-- | libao2/ao_alsa.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/libao2/ao_alsa.c b/libao2/ao_alsa.c index 65e7fda178..ff837e7d30 100644 --- a/libao2/ao_alsa.c +++ b/libao2/ao_alsa.c @@ -97,15 +97,11 @@ static void alsa_error_handler(const char *file, int line, const char *function, static int control(int cmd, void *arg) { switch(cmd) { - case AOCONTROL_QUERY_FORMAT: - return CONTROL_TRUE; case AOCONTROL_GET_MUTE: case AOCONTROL_SET_MUTE: case AOCONTROL_GET_VOLUME: case AOCONTROL_SET_VOLUME: { - ao_control_vol_t *vol = (ao_control_vol_t *)arg; - int err; snd_mixer_t *handle; snd_mixer_elem_t *elem; @@ -189,6 +185,7 @@ static int control(int cmd, void *arg) switch (cmd) { case AOCONTROL_SET_VOLUME: { + ao_control_vol_t *vol = arg; set_vol = vol->left / f_multi + pmin + 0.5; //setting channels @@ -211,6 +208,7 @@ static int control(int cmd, void *arg) break; } case AOCONTROL_GET_VOLUME: { + ao_control_vol_t *vol = arg; snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &get_vol); vol->left = (get_vol - pmin) * f_multi; snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &get_vol); @@ -219,28 +217,29 @@ static int control(int cmd, void *arg) break; } case AOCONTROL_SET_MUTE: { + bool *mute = arg; if (!snd_mixer_selem_has_playback_switch(elem)) goto mixer_error; - bool m_l = vol->left == 0.0f, m_r = vol->right == 0.0f; - if (snd_mixer_selem_has_playback_switch_joined(elem)) { - m_l = m_l || m_r; - } else { - snd_mixer_selem_set_playback_switch(elem, SND_MIXER_SCHN_FRONT_RIGHT, !m_r); + if (!snd_mixer_selem_has_playback_switch_joined(elem)) { + snd_mixer_selem_set_playback_switch( + elem, SND_MIXER_SCHN_FRONT_RIGHT, !*mute); } - snd_mixer_selem_set_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, !m_l); + snd_mixer_selem_set_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, + !*mute); break; } case AOCONTROL_GET_MUTE: { + bool *mute = arg; if (!snd_mixer_selem_has_playback_switch(elem)) goto mixer_error; int tmp = 1; - snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, &tmp); - vol->left = tmp ? 1.0f : 0.0f; - if (snd_mixer_selem_has_playback_switch_joined(elem)) { - vol->right = vol->left; - } else { - snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_RIGHT, &tmp); - vol->right = tmp ? 1.0f : 0.0f; + snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_FRONT_LEFT, + &tmp); + *mute = !tmp; + if (!snd_mixer_selem_has_playback_switch_joined(elem)) { + snd_mixer_selem_get_playback_switch( + elem, SND_MIXER_SCHN_FRONT_RIGHT, &tmp); + *mute &= !tmp; } break; } |