summaryrefslogtreecommitdiffstats
path: root/audio/mixer.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/mixer.c')
-rw-r--r--audio/mixer.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/audio/mixer.c b/audio/mixer.c
index 26f426c2b4..5f147872ab 100644
--- a/audio/mixer.c
+++ b/audio/mixer.c
@@ -27,7 +27,7 @@
#include "audio/filter/af.h"
#include "common/global.h"
#include "common/msg.h"
-#include "talloc.h"
+#include "mpv_talloc.h"
#include "mixer.h"
struct mixer {
@@ -120,8 +120,11 @@ void mixer_getvolume(struct mixer *mixer, float *l, float *r)
*r = mixer->vol_r;
}
-static void setvolume_internal(struct mixer *mixer, float l, float r)
+static void setvolume_internal(struct mixer *mixer)
{
+ float l = mixer->vol_l, r = mixer->vol_r;
+ if (mixer->emulate_mute && mixer->muted)
+ l = r = 0;
if (!mixer->softvol) {
MP_DBG(mixer, "Setting volume on AO.\n");
struct ao_control_vol vol = {.left = l, .right = r};
@@ -147,8 +150,8 @@ void mixer_setvolume(struct mixer *mixer, float l, float r)
float max = mixer_getmaxvolume(mixer);
mixer->vol_l = MPCLAMP(l, 0, max);
mixer->vol_r = MPCLAMP(r, 0, max);
- if (mixer->ao && !(mixer->emulate_mute && mixer->muted))
- setvolume_internal(mixer, mixer->vol_l, mixer->vol_r);
+ if (mixer->ao)
+ setvolume_internal(mixer);
}
void mixer_getbothvolume(struct mixer *mixer, float *b)
@@ -167,7 +170,7 @@ void mixer_setmute(struct mixer *mixer, bool mute)
mixer->muted = mute;
mixer->muted_by_us = mute;
if (mixer->emulate_mute) {
- setvolume_internal(mixer, mixer->vol_l*!mute, mixer->vol_r*!mute);
+ setvolume_internal(mixer);
} else {
ao_control(mixer->ao, AOCONTROL_SET_MUTE, &mute);
}
@@ -293,6 +296,8 @@ static void restore_volume(struct mixer *mixer)
const char *prev_driver = mixer->driver;
mixer->driver = mixer->softvol ? "softvol" : ao_get_name(ao);
+ if (!prev_driver[0])
+ prev_driver = mixer->driver;
// Restore old parameters if volume won't survive reinitialization.
// But not if volume scale is possibly different.