[LV2] Configurable channels for LV2 plugins

David Robillard d at drobilla.net
Sun Mar 24 13:20:13 PDT 2013

On Sun, 2013-03-24 at 19:16 +0000, Harry van Haaren wrote:
> On Sun, Mar 24, 2013 at 6:24 PM, David Robillard <d at drobilla.net> 
>          Things would work as you described, but
>         you'd configure the group(s) individually.  I guess the buffer
>         type
>         could be an array of pointers to buffers?
> Sound pretty logical.
> So we must define a new lv2:port
> which has attributes of the Port group extension
> -pg:inputGroup or pg:outputGroup
> -pg:group subclass (mono stereo, ambisonic  etc)
> -pg:mainInput or mainOutput attributes
> ..

I haven't thought about this too much in detail, but something like
that.  I think it would essentially still be a port in almost every way,
i.e. would still just use lv2:InputPort and lv2:OutputPort, but a new
type where the buffer is an array of pointers to several buffers.
pg:GroupPort or something.

In a hypothetical world starting from scratch we would maybe want to do
something different/better, but I don't see any obvious problems with it
being as much a normal port as possible, and it's much more pragmatic.
One could maybe argue that we need a fully dynamic port system anyway,
though... that would require a bunch of atom stuff.  It's not a bad
idea, but I think some work on the host support level (i.e. lilv) is
really needed for such things to be reasonable.

A conservative solution, with backwards compatibility to a mono
AudioPort, might be something like:

<plug> lv2:port [
    a lv2:InputPort , lv2:AudioPort , pg:GroupPort ;
    pg:supportsConfiguration pg:MonoGroup , pg:StereoGroup ;
    lv2:index 0 ;
    # etc...

By setting a pg:configuration property via the options interface, the
host could configure the port at run-time.

Tricky thing is that lv2:AudioPort isn't a pointer to a pointer to a
buffer, it's just a pointer to a buffer.  A binary backwards compatible
format would be an array of buffers, but not being able to connect
in-place would be problematic for some hosts.  Another backwards
compatible route is to use the morph extension.

The buffer order would be defined as in the port-group documentation,
though we might want to put all that in a static C header so hosts don't
have to query a bunch of stuff.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.lv2plug.in/pipermail/devel-lv2plug.in/attachments/20130324/7d7c0a07/attachment-0002.pgp>

More information about the Devel mailing list