[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