diff options
author | zuxy <zuxy@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-20 02:26:20 +0000 |
---|---|---|
committer | zuxy <zuxy@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-20 02:26:20 +0000 |
commit | be09bd1c047fc84c7ac73c93ba26fe6a8787341c (patch) | |
tree | 75dd0c2073cd53964425690d185adaecae256e64 /mixer.c | |
parent | d5621cf63946ab715352b91495602dc445f34035 (diff) | |
download | mpv-be09bd1c047fc84c7ac73c93ba26fe6a8787341c.tar.bz2 mpv-be09bd1c047fc84c7ac73c93ba26fe6a8787341c.tar.xz |
The audio balance feature implemented with af_pan.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23588 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mixer.c')
-rw-r--r-- | mixer.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -118,3 +118,46 @@ void mixer_mute(mixer_t *mixer) mixer->muted=1; } } + +void mixer_getbalance(mixer_t *mixer, float *val) +{ + *val = 0.f; + if(!mixer->afilter) + return; + af_control_any_rev(mixer->afilter, + AF_CONTROL_PAN_BALANCE | AF_CONTROL_GET, val); +} + +void mixer_setbalance(mixer_t *mixer, float val) +{ + float level[AF_NCH]; + int i; + af_control_ext_t arg_ext = { .arg = level }; + af_instance_t* af_pan_balance; + + if(!mixer->afilter) + return; + if (af_control_any_rev(mixer->afilter, + AF_CONTROL_PAN_BALANCE | AF_CONTROL_SET, &val)) + return; + + if (!(af_pan_balance = af_add(mixer->afilter, "pan"))) { + mp_msg(MSGT_GLOBAL, MSGL_ERR, MSGTR_NoBalance); + return; + } + + af_init(mixer->afilter); + /* make all other channels pass thru since by default pan blocks all */ + memset(level, 0, sizeof(level)); + for (i = 2; i < AF_NCH; i++) { + arg_ext.ch = i; + level[i] = 1.f; + af_pan_balance->control(af_pan_balance, + AF_CONTROL_PAN_LEVEL | AF_CONTROL_SET, &arg_ext); + level[i] = 0.f; + } + + af_pan_balance->control(af_pan_balance, + AF_CONTROL_PAN_BALANCE | AF_CONTROL_SET, &val); +} + |