[gmpi] Re: Topic 7: Audio packaging, Process-In-Place

>Our host app uses the some component API for internal mixers and tees as
>what's used for the plugins.  This will be true when we host GMPI plugins.
>One internal mixer component is "Y" split, known to the user as a "bus
>send."  This a very common component from the host side, and actually sadly
>one of the most expensive because of the reuqired buffer copy.
>
>What we do today with splitters is have the plugin process the first output
>in place, and then allocate new buffers for all other outputs.  We don't
>attempt to determine whether or not output buffers are processed in-place
>downstream or not to try to save an extra buffer copy.  Must plugins are
>in-place, so it's simply more likely that a buffer copy will be needed.

to amplify and contrast ron's description: in ardour, the send object
has its own buffers allocated at creation; its run() method will get
pointers to the input buffers and copies them (with processing such as
gain control) to its output buffers. the same is true of non-plugin
inserts (that route audio out of the host and back again (e.g via the
audio interface to an external FX unit)), although these do two
copies: from the inputs to its output buffers, then from the return
buffers back to the input buffers, effectively doing both in-place and
copy style processing :)

by contrast, plugin inserts operate entirely in-place, and in fact
tend to be working on the buffer that is the final destination of the
audio signal.

in ardour, since the buffers are actually JACK-level object, these
copies cannot be optimised away since the buffers are intended to be
visible to any participant in the JACK graph (other processes, for
example). this prompts a different perspective on the "Y": in the case
of serial processing, we typically have:

   in -> node A -> node B -> node C -> out

the output buffers of A and B are not publically visible. as soon as
you make them visible, either by architectural design or by using a Y,
then the data *must* be copied so that it becomes visible and distinct
from the input.

ps. one nice aspect of using JACK as the "component API" for the
internal mixer is that you automatically expose the insides of the
mixer for free: every bus, every send, every non-plugin insert is
visible without any work to any other participant in a JACK graph. i
quite like this.


----------------------------------------------------------------------
Generalized Music Plugin Interface (GMPI) public discussion list
Participation in this list is contingent upon your abiding by the
following rules:  Please stay on topic.  You are responsible for your own
words.  Please respect your fellow subscribers.  Please do not
redistribute anyone else's words without their permission.

Archive: http://www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe

Other related posts: