summaryrefslogtreecommitdiffstats
path: root/mixer.c
diff options
context:
space:
mode:
authorzuxy <zuxy@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-20 02:26:20 +0000
committerzuxy <zuxy@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-20 02:26:20 +0000
commitbe09bd1c047fc84c7ac73c93ba26fe6a8787341c (patch)
tree75dd0c2073cd53964425690d185adaecae256e64 /mixer.c
parentd5621cf63946ab715352b91495602dc445f34035 (diff)
downloadmpv-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.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/mixer.c b/mixer.c
index f3de6cdeb7..8f70b0c02d 100644
--- a/mixer.c
+++ b/mixer.c
@@ -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);
+}
+