I'm not a programmer at all. I hate programming, so I'll never claim to be better than anyone for that.
Why would you need to apply it to 5 protocol decoders on the same stream at the same time?
Could you not set up a quick test for each system type that it checks against? IE, have the input go through one decoder and if the decoder doesn't produce usable results (IE, the input isn't in the protocol of that particular decoder), it'll move on to the next...once all 5 protocols have been checked against, it would just loop around to the begining. If any of the steps are successful at producing valid data, the conditions would stop and the program would run with that decoder. If the decoder stopped producing usable results due to the user switching the input type, the loop would just take off from where it stopped last time.
In future as you add more protocols, that would be as simple as appending another "if" test on the end.
That way, you'd only be applying one filter at a time and wouldn't need to worry about being a CPU hog. Just as a specific example, TRUNK88 runs with next to no CPU usage and it has better filtering than anything else I've ever tried. It'll have 100% decoding on systems Unitrunker won't even decode anymore.