Index: ChangeLog =================================================================== RCS file: /cvsroot/mplayer/main/ChangeLog,v retrieving revision 1.241 diff -u -r1.241 ChangeLog --- ChangeLog 3 Sep 2005 14:41:09 -0000 1.241 +++ ChangeLog 3 Sep 2005 19:57:08 -0000 @@ -69,6 +69,7 @@ * remove_logo filter * lavcresample now used by default (-af-adv force=0 gives old behavior) * vf_expand and vf_dsize now support aspect and round parameters + * af_pan can mix channels in portions greater than 100% MEncoder: * audio encoding modularized Index: DOCS/man/en/mplayer.1 =================================================================== RCS file: /cvsroot/mplayer/main/DOCS/man/en/mplayer.1,v retrieving revision 1.1087 diff -u -r1.1087 mplayer.1 --- DOCS/man/en/mplayer.1 3 Sep 2005 16:49:17 -0000 1.1087 +++ DOCS/man/en/mplayer.1 3 Sep 2005 19:57:10 -0000 @@ -3923,7 +3923,13 @@ .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 exceed the sample range of your sound card. If you hear any +painful pops or clicks, either decrease the values or follow pan with +",volume" so the volume filter will clip out-of-range values. Clipping +damages sound quality so use it sparingly. .RE .sp 1 .RS Index: libaf/af_pan.c =================================================================== 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 19:57:11 -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:{