Index: DOCS/man/en/mplayer.1 =================================================================== RCS file: /cvsroot/mplayer/main/DOCS/man/en/mplayer.1,v retrieving revision 1.1086 diff -u -r1.1086 mplayer.1 --- DOCS/man/en/mplayer.1 2 Sep 2005 21:54:13 -0000 1.1086 +++ DOCS/man/en/mplayer.1 3 Sep 2005 00:55:57 -0000 @@ -3923,7 +3923,11 @@ .IPs \ \ number of input channels (1\-6) .IPs -How much of input channel j is mixed into output channel i (0\-1). +The percentage (as a decimal, 0.5=50%, 2=200%, etc.) that input channel +j is to be mixed into output channel i (0\-512). That is 0% \- 51200%. +Be careful when using values higher than 1; higher values can be quite +loud and may cause clipping. If \-v is specified pan will print a +message whenever it has to clip. .RE .sp 1 .RS =================================================================== RCS file: /cvsroot/mplayer/main/libaf/af_pan.c,v retrieving revision 1.6 diff -u -r1.6 af_pan.c --- libaf/af_pan.c 8 Jan 2005 21:34:06 -0000 1.6 +++ libaf/af_pan.c 3 Sep 2005 00:55:57 -0000 @@ -20,6 +20,8 @@ #include "af.h" +#define MAX_LVL 512 + // Data for specific instances of this filter typedef struct af_pan_s { @@ -65,7 +67,7 @@ j = 0; k = 0; while((*cp == ':') && (k < AF_NCH)){ sscanf(cp, ":%f%n" , &s->level[k][j], &n); - s->level[k][j] = clamp(s->level[k][j],0.0,1.0); + s->level[k][j] = clamp(s->level[k][j],0.0,MAX_LVL); af_msg(AF_MSG_VERBOSE,"[pan] Pan level from channel %i to" " channel %i = %f\n",j,k,s->level[k][j]); cp =&cp[n]; @@ -82,7 +84,7 @@ int ch = ((af_control_ext_t*)arg)->ch; float* level = ((af_control_ext_t*)arg)->arg; for(i=0;ilevel[ch][i] = clamp(level[i],0.0,1.0); + s->level[ch][i] = clamp(level[i],0.0,MAX_LVL); return AF_OK; } case AF_CONTROL_PAN_LEVEL | AF_CONTROL_GET:{ @@ -147,7 +149,9 @@ register float* tin = in; for(k=0;klevel[j][k]; - out[j] = x; + if(x > 1.0 || x < -1.0) + af_msg(AF_MSG_VERBOSE, "[pan] Clipping out-of-range value: %f\n", x); + out[j] = clamp(x, -1.0, 1.0); } out+= ncho; in+= nchi;