mirror of https://github.com/mpv-player/mpv
mixer: minor refactoring
Let struct mixer access access MPOpts to simplify some things. Rename some variables and functions. There should be no functional changes.
This commit is contained in:
parent
69e272dad7
commit
296531ad00
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -454,7 +454,7 @@ void uninit_player(struct MPContext *mpctx, unsigned int mask)
|
|||
if (mpctx->sh_audio)
|
||||
uninit_audio(mpctx->sh_audio);
|
||||
cleanup_demux_stream(mpctx, STREAM_AUDIO);
|
||||
mpctx->mixer.afilter = NULL;
|
||||
mpctx->mixer.af = NULL;
|
||||
}
|
||||
|
||||
if (mask & INITIALIZED_SUB) {
|
||||
|
@ -542,7 +542,7 @@ void uninit_player(struct MPContext *mpctx, unsigned int mask)
|
|||
if (mask & INITIALIZED_AO) {
|
||||
mpctx->initialized_flags &= ~INITIALIZED_AO;
|
||||
if (mpctx->mixer.ao)
|
||||
mixer_uninit(&mpctx->mixer);
|
||||
mixer_uninit_audio(&mpctx->mixer);
|
||||
mpctx->mixer.ao = NULL;
|
||||
if (mpctx->ao)
|
||||
ao_uninit(mpctx->ao, mpctx->stop_play != AT_END_OF_FILE);
|
||||
|
@ -1628,11 +1628,7 @@ static int recreate_audio_filters(struct MPContext *mpctx)
|
|||
return -1;
|
||||
}
|
||||
|
||||
mpctx->mixer.afilter = mpctx->sh_audio->afilter;
|
||||
mpctx->mixer.volstep = opts->volstep;
|
||||
mpctx->mixer.softvol = opts->softvol;
|
||||
mpctx->mixer.softvol_max = opts->softvol_max;
|
||||
mixer_reinit(&mpctx->mixer, mpctx->ao);
|
||||
mixer_reinit_audio(&mpctx->mixer, mpctx->ao, mpctx->sh_audio->afilter);
|
||||
if (!(mpctx->initialized_flags & INITIALIZED_VOL)) {
|
||||
if (opts->mixer_init_volume >= 0) {
|
||||
mixer_setvolume(&mpctx->mixer, opts->mixer_init_volume,
|
||||
|
@ -4859,6 +4855,7 @@ static int mpv_main(int argc, char *argv[])
|
|||
init_libav();
|
||||
GetCpuCaps(&gCpuCaps);
|
||||
screenshot_init(mpctx);
|
||||
mpctx->mixer.opts = opts;
|
||||
|
||||
// Preparse the command line
|
||||
m_config_preparse_command_line(mpctx->mconfig, argc, argv);
|
||||
|
|
Loading…
Reference in New Issue