[linux-audio-dev] Plugin APIs (again)
Tim Hockin
thockin at hockin.org
Mon Dec 9 19:24:00 UTC 2002
Long context, sorry
> > Do let me see if I get this right:
> >
> > Host allocates the VVID pool (perhaps a bitmask or some other way
> > of indicating usage)
> > Host wants to send a VOICE_ON:
> > allocates an unused VVID
> > sends VOICE_ON with that VVID
> > when it sends a VOICE_OFF or receives a VOICE_OFF it can mark that
> > VVID as unused again.
>
> It seems like this would be a host global matter... What would be the
> point in that? All you need is a way to address Voices within *one
> Channel* - you don't have to worry about other Plugins, or even other
> Channels on the same Plugin. (For table based implementations,
> plugins have one table per Channel, and for tag/search
> implementations, you just tag Voices with VVIDs *and* Channel
> indices.)
>
> > Plugin wants to send a VOICE_ON:
> > calls host->get_vvids(32)
> > host allocates it 32 VVIDs
>
> You do this when the host tells you to connect to an event port, and
> what you do is actually:
>
> first_id = host->get_vvids(target_port, number_of_VVIDs);
> if(first_id < 0)
> give_up;
>
> Note that the first_id thing is actually *only* needed when the host
> connects multiple output ports to the same input port. Normally, it
> will be 0.
>
> The host will at some point ask the plugin, or rather *tell* the
> plugin how many VVIDs are needed for each Event Input port it wants
> to connect. Plugins may say
>
> "I don't have Voices!"
> (No need for VVIDs...)
>
> or
>
> "Anything that fits makes a fine VVID for me."
> (Full 32 bit range, no actual allocation needed.
>
> or
>
> "I need internal tables. How many VVIDs do you need?"
> (Host says N, and plugin allocates tables for N
> VVIDs, addressed as 0..N-1.)
OK, let me again see if I understand (sorry for being dense, something is
not clicking this week..)
// Normal case of host connecting to an event_port
Host somewhere:
evp = instrument->get_event_port(n);
vvid_max = instrument->alloc_vvids(evp, 256); /* should be enough! */
Plugin alloc_vvids:
/* make room for specified number of vvids, or what not */
return the requested # back, or negative on error
Host again:
store the number of VVIDs somehow - array/list
So how does a plugin controlling another plugin go?
More information about the Linux-audio-dev
mailing list