summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-09-19 14:31:43 +0200
committerwm4 <wm4@nowhere>2013-09-19 14:31:43 +0200
commit296531ad0050fbc38fb1cf7823f6e22f97d502b1 (patch)
tree3bc6c44114d00d643f6f5ed10907dfc98f10d5ac /audio
parent69e272dad707aae1ae99dabdf45bb82d3bf7a905 (diff)
downloadmpv-296531ad0050fbc38fb1cf7823f6e22f97d502b1.tar.bz2
mpv-296531ad0050fbc38fb1cf7823f6e22f97d502b1.tar.xz
mixer: minor refactoring
Let struct mixer access access MPOpts to simplify some things. Rename some variables and functions. There should be no functional changes.
Diffstat (limited to 'audio')
-rw-r--r--audio/mixer.c44
-rw-r--r--audio/mixer.h9
2 files changed, 27 insertions, 26 deletions
diff --git a/audio/mixer.c b/audio/mixer.c
index d3762628ae..6b68ee2e58 100644
--- a/audio/mixer.c
+++ b/audio/mixer.c
@@ -42,16 +42,16 @@ static void checkvolume(struct mixer *mixer)
if (mixer->softvol || CONTROL_OK != ao_control(mixer->ao,
AOCONTROL_GET_VOLUME, &vol)) {
mixer->softvol = SOFTVOL_YES;
- if (!mixer->afilter)
+ if (!mixer->af)
return;
float db_vals[AF_NCH];
- if (!af_control_any_rev(mixer->afilter,
+ if (!af_control_any_rev(mixer->af,
AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_GET, db_vals))
db_vals[0] = db_vals[1] = 1.0;
else
af_from_dB(2, db_vals, db_vals, 20.0, -200.0, 60.0);
- vol.left = (db_vals[0] / (mixer->softvol_max / 100.0)) * 100.0;
- vol.right = (db_vals[1] / (mixer->softvol_max / 100.0)) * 100.0;
+ vol.left = (db_vals[0] / (mixer->opts->softvol_max / 100.0)) * 100.0;
+ vol.right = (db_vals[1] / (mixer->opts->softvol_max / 100.0)) * 100.0;
}
float l = mixer->vol_l;
float r = mixer->vol_r;
@@ -97,24 +97,24 @@ static void setvolume_internal(mixer_t *mixer, float l, float r)
return;
}
mixer->restore_volume = "softvol";
- if (!mixer->afilter)
+ if (!mixer->af)
return;
// af_volume uses values in dB
float db_vals[AF_NCH];
int i;
- db_vals[0] = (l / 100.0) * (mixer->softvol_max / 100.0);
- db_vals[1] = (r / 100.0) * (mixer->softvol_max / 100.0);
+ db_vals[0] = (l / 100.0) * (mixer->opts->softvol_max / 100.0);
+ db_vals[1] = (r / 100.0) * (mixer->opts->softvol_max / 100.0);
for (i = 2; i < AF_NCH; i++)
- db_vals[i] = ((l + r) / 100.0) * (mixer->softvol_max / 100.0) / 2.0;
+ db_vals[i] = ((l + r) / 100.0) * (mixer->opts->softvol_max / 100.0) / 2.0;
af_to_dB(AF_NCH, db_vals, db_vals, 20.0);
- if (!af_control_any_rev(mixer->afilter,
+ if (!af_control_any_rev(mixer->af,
AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET,
db_vals))
{
mp_tmsg(MSGT_GLOBAL, mixer->softvol ? MSGL_V : MSGL_WARN,
"[Mixer] No hardware mixing, inserting volume filter.\n");
- if (!(af_add(mixer->afilter, "volume", NULL)
- && af_control_any_rev(mixer->afilter,
+ if (!(af_add(mixer->af, "volume", NULL)
+ && af_control_any_rev(mixer->af,
AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET,
db_vals)))
mp_tmsg(MSGT_GLOBAL, MSGL_ERR,
@@ -173,18 +173,18 @@ static void addvolume(struct mixer *mixer, float d)
void mixer_incvolume(mixer_t *mixer)
{
- addvolume(mixer, mixer->volstep);
+ addvolume(mixer, mixer->opts->volstep);
}
void mixer_decvolume(mixer_t *mixer)
{
- addvolume(mixer, -mixer->volstep);
+ addvolume(mixer, -mixer->opts->volstep);
}
void mixer_getbalance(mixer_t *mixer, float *val)
{
- if (mixer->afilter)
- af_control_any_rev(mixer->afilter,
+ if (mixer->af)
+ af_control_any_rev(mixer->af,
AF_CONTROL_PAN_BALANCE | AF_CONTROL_GET,
&mixer->balance);
*val = mixer->balance;
@@ -210,23 +210,23 @@ void mixer_setbalance(mixer_t *mixer, float val)
mixer->balance = val;
- if (!mixer->afilter)
+ if (!mixer->af)
return;
- if (af_control_any_rev(mixer->afilter,
+ if (af_control_any_rev(mixer->af,
AF_CONTROL_PAN_BALANCE | AF_CONTROL_SET, &val))
return;
if (val == 0 || mixer->ao->channels.num < 2)
return;
- if (!(af_pan_balance = af_add(mixer->afilter, "pan", NULL))) {
+ if (!(af_pan_balance = af_add(mixer->af, "pan", NULL))) {
mp_tmsg(MSGT_GLOBAL, MSGL_ERR,
"[Mixer] No balance control available.\n");
return;
}
- af_init(mixer->afilter);
+ af_init(mixer->af);
/* make all other channels pass thru since by default pan blocks all */
memset(level, 0, sizeof(level));
for (i = 2; i < AF_NCH; i++) {
@@ -243,9 +243,11 @@ void mixer_setbalance(mixer_t *mixer, float val)
}
// Called after the audio filter chain is built or rebuilt.
-void mixer_reinit(struct mixer *mixer, struct ao *ao)
+void mixer_reinit_audio(struct mixer *mixer, struct ao *ao, struct af_stream *af)
{
mixer->ao = ao;
+ mixer->af = af;
+ mixer->softvol = mixer->opts->softvol;
/* Use checkvolume() to see if softvol needs to be enabled because of
* lacking AO support, but first store values it could overwrite. */
float left = mixer->vol_l, right = mixer->vol_r;
@@ -274,7 +276,7 @@ void mixer_reinit(struct mixer *mixer, struct ao *ao)
* turn off mute, in case it's a global/persistent setting which might
* otherwise be left enabled even after this player instance exits.
*/
-void mixer_uninit(struct mixer *mixer)
+void mixer_uninit_audio(struct mixer *mixer)
{
if (!mixer->ao)
return;
diff --git a/audio/mixer.h b/audio/mixer.h
index 3160c20cfe..b22bba0310 100644
--- a/audio/mixer.h
+++ b/audio/mixer.h
@@ -28,11 +28,10 @@ enum {
};
typedef struct mixer {
+ struct MPOpts *opts;
struct ao *ao;
- struct af_stream *afilter;
- int volstep;
+ struct af_stream *af;
int softvol;
- float softvol_max;
bool muted;
bool muted_by_us;
bool muted_using_volume;
@@ -45,8 +44,8 @@ typedef struct mixer {
bool user_set_volume;
} mixer_t;
-void mixer_reinit(struct mixer *mixer, struct ao *ao);
-void mixer_uninit(struct mixer *mixer);
+void mixer_reinit_audio(struct mixer *mixer, struct ao *ao, struct af_stream *af);
+void mixer_uninit_audio(struct mixer *mixer);
void mixer_getvolume(mixer_t *mixer, float *l, float *r);
void mixer_setvolume(mixer_t *mixer, float l, float r);
void mixer_incvolume(mixer_t *mixer);