# HG changeset patch # User reimar # Date 1170695365 0 # Node ID c6c141ab4fcf40d22000a9c8dc7749a62a982a2e # Parent b49bc3a14c3c2eda5f12b906cdc2f68f5b7ecc4b Experimental support for multichannel ladspa effects diff -r b49bc3a14c3c -r c6c141ab4fcf libaf/af_ladspa.c --- a/libaf/af_ladspa.c Mon Feb 05 14:17:33 2007 +0000 +++ b/libaf/af_ladspa.c Mon Feb 05 17:09:25 2007 +0000 @@ -253,12 +253,9 @@ af_msg(AF_MSG_VERBOSE, "%s: this is a mono effect\n", setup->myname); } else if (setup->ninputs == 2) { af_msg(AF_MSG_VERBOSE, "%s: this is a stereo effect\n", setup->myname); - } - - if (setup->ninputs > 2) { - af_msg(AF_MSG_ERROR, "%s: %s\n", setup->myname, - MSGTR_AF_LADSPA_ErrMultiChannel); - return AF_ERROR; + } else { + af_msg(AF_MSG_VERBOSE, "%s: this is a %i-channel effect," + "support is experimental\n", setup->myname, setup->ninputs); } if (setup->noutputs == 0) { @@ -704,11 +701,7 @@ } if (setup->chhandles) { - for(i=0; inch; i++) { - if ( (setup->ninputs == 2) && (i & 1) ) { /* stereo effect */ - i++; - continue; - } + for(i=0; inch; i+=setup->ninputs) { if (pdes->deactivate) pdes->deactivate(setup->chhandles[i]); if (pdes->cleanup) pdes->cleanup(setup->chhandles[i]); } @@ -837,7 +830,7 @@ for(i=0; ininputs == 2) && (i & 1) ) { /* stereo effect */ + if (i % setup->ninputs) { /* stereo effect */ /* copy the handle from previous channel */ setup->chhandles[i] = setup->chhandles[i-1]; continue; @@ -854,10 +847,10 @@ for(i=0; iconnect_port(setup->chhandles[i], - setup->inputs[ (setup->ninputs==2) ? i&1 : 0 ], + setup->inputs[i % setup->ninputs], setup->inbufs[i]); pdes->connect_port(setup->chhandles[i], - setup->outputs[ (setup->ninputs==2) ? i&1 : 0 ], + setup->outputs[i % setup->ninputs], setup->outbufs[i]); /* connect (input) controls */ @@ -888,12 +881,12 @@ * and right. connect it to the second port. */ - if( (setup->ninputs == 2) && (i&1) && (i >= 1) ) { + for (p = i; p % setup->ninputs; p++) { pdes->connect_port(setup->chhandles[i-1], - setup->inputs[ (setup->ninputs==2) ? i&1 : 0 ], + setup->inputs[p % setup->ninputs], setup->inbufs[i-1]); pdes->connect_port(setup->chhandles[i-1], - setup->outputs[ (setup->ninputs==2) ? i&1 : 0 ], + setup->outputs[p % setup->ninputs], setup->outbufs[i-1]); } /* done! */ @@ -917,10 +910,8 @@ /* Run filter(s) */ - for (i=0; ininputs) { pdes->run(setup->chhandles[i], setup->bufsize); - if (setup->ninputs==2) // stereo effect just ran - i++; } /* Extract outbufs */