Did you understand @xenakios answer? It is a common mistake to send different signals through the same processor/filter instance. About every third newcomer thread for DSP is about that mistake…
You need a left reverb instance, only processing data from the left channel, and another right channel instance, only processing data from the right channel. Same for the filter. The filter has to be confused, when all the sudden the signal jumps from left data to right data. And the reverb would create artefacts on the wrong channel.
For your routing problem some pseudo code:
inputMapper = new ChannelRemappingAudioSource (this /*AudioAppComponent*/, false);
inputMapper->setOutputChannelMapping (leftIn, 0);
inputMapper->setOutputChannelMapping (rightIn, 1);
mixer->addInputSource (inputMapper, false);
mixer->addInputSource (transportSource, false);
// all prepareToPlay and all that jazz
outputMapper = new ChannelRemappingAudioSource (mixer, false);
outputMapper->setOutputChannelMapping (0, leftOut);
outputMapper->setOutputChannelMapping (1, rightOut);
When that works, you can think about writing a custom MixerSource, where you add custom processors in each source etc. It is up to you, if you want to write all by hand in the mixer’s getNextAudioBlock, or have a look at AudioProcessorGraph. And there are more options to choose from.