Index: ChangeLog =================================================================== RCS file: /cvsroot/mplayer/main/ChangeLog,v retrieving revision 1.244 diff -u -r1.244 ChangeLog --- ChangeLog 11 Sep 2005 08:00:38 -0000 1.244 +++ ChangeLog 11 Sep 2005 10:58:36 -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 proportions greater than 100% * screenshot filter MEncoder: Index: DOCS/man/en/mplayer.1 =================================================================== RCS file: /cvsroot/mplayer/main/DOCS/man/en/mplayer.1,v retrieving revision 1.1094 diff -u -r1.1094 mplayer.1 --- DOCS/man/en/mplayer.1 11 Sep 2005 08:00:22 -0000 1.1094 +++ DOCS/man/en/mplayer.1 11 Sep 2005 10:58:46 -0000 @@ -3925,7 +3925,14 @@ .IPs \ \ number of input channels (1\-6) .IPs -How much of input channel j is mixed into output channel i (0\-1). +The multiple of input channel j which 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 11 Sep 2005 10:58:46 -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:{