• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ladspa.h
2 
3    Linux Audio Developer's Simple Plugin API Version 1.1[LGPL].
4    Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis,
5    Stefan Westerfeld.
6 
7    This library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Lesser General Public License
9    as published by the Free Software Foundation; either version 2.1 of
10    the License, or (at your option) any later version.
11 
12    This library is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15    Lesser General Public License for more details.
16 
17    You should have received a copy of the GNU Lesser General Public
18    License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef LADSPA_INCLUDED
22 #define LADSPA_INCLUDED
23 
24 #define LADSPA_VERSION "1.1"
25 #define LADSPA_VERSION_MAJOR 1
26 #define LADSPA_VERSION_MINOR 1
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 /*****************************************************************************/
33 
34 /* Overview:
35 
36    There is a large number of synthesis packages in use or development
37    on the Linux platform at this time. This API (`The Linux Audio
38    Developer's Simple Plugin API') attempts to give programmers the
39    ability to write simple `plugin' audio processors in C/C++ and link
40    them dynamically (`plug') into a range of these packages (`hosts').
41    It should be possible for any host and any plugin to communicate
42    completely through this interface.
43 
44    This API is deliberately short and simple. To achieve compatibility
45    with a range of promising Linux sound synthesis packages it
46    attempts to find the `greatest common divisor' in their logical
47    behaviour. Having said this, certain limiting decisions are
48    implicit, notably the use of a fixed type (LADSPA_Data) for all
49    data transfer and absence of a parameterised `initialisation'
50    phase. See below for the LADSPA_Data typedef.
51 
52    Plugins are expected to distinguish between control and audio
53    data. Plugins have `ports' that are inputs or outputs for audio or
54    control data and each plugin is `run' for a `block' corresponding
55    to a short time interval measured in samples. Audio data is
56    communicated using arrays of LADSPA_Data, allowing a block of audio
57    to be processed by the plugin in a single pass. Control data is
58    communicated using single LADSPA_Data values. Control data has a
59    single value at the start of a call to the `run()' or `run_adding()'
60    function, and may be considered to remain this value for its
61    duration. The plugin may assume that all its input and output ports
62    have been connected to the relevant data location (see the
63    `connect_port()' function below) before it is asked to run.
64 
65    Plugins will reside in shared object files suitable for dynamic
66    linking by dlopen() and family. The file will provide a number of
67    `plugin types' that can be used to instantiate actual plugins
68    (sometimes known as `plugin instances') that can be connected
69    together to perform tasks.
70 
71    This API contains very limited error-handling. */
72 
73 /*****************************************************************************/
74 
75 /* Fundamental data type passed in and out of plugin. This data type
76    is used to communicate audio samples and control values. It is
77    assumed that the plugin will work sensibly given any numeric input
78    value although it may have a preferred range (see hints below).
79 
80    For audio it is generally assumed that 1.0f is the `0dB' reference
81    amplitude and is a `normal' signal level. */
82 
83 typedef float LADSPA_Data;
84 
85 /*****************************************************************************/
86 
87 /* Special Plugin Properties:
88 
89    Optional features of the plugin type are encapsulated in the
90    LADSPA_Properties type. This is assembled by ORing individual
91    properties together. */
92 
93 typedef int LADSPA_Properties;
94 
95 /* Property LADSPA_PROPERTY_REALTIME indicates that the plugin has a
96    real-time dependency (e.g. listens to a MIDI device) and so its
97    output must not be cached or subject to significant latency. */
98 #define LADSPA_PROPERTY_REALTIME        0x1
99 
100 /* Property LADSPA_PROPERTY_INPLACE_BROKEN indicates that the plugin
101    may cease to work correctly if the host elects to use the same data
102    location for both input and output (see connect_port()). This
103    should be avoided as enabling this flag makes it impossible for
104    hosts to use the plugin to process audio `in-place.' */
105 #define LADSPA_PROPERTY_INPLACE_BROKEN  0x2
106 
107 /* Property LADSPA_PROPERTY_HARD_RT_CAPABLE indicates that the plugin
108    is capable of running not only in a conventional host but also in a
109    `hard real-time' environment. To qualify for this the plugin must
110    satisfy all of the following:
111 
112    (1) The plugin must not use malloc(), free() or other heap memory
113    management within its run() or run_adding() functions. All new
114    memory used in run() must be managed via the stack. These
115    restrictions only apply to the run() function.
116 
117    (2) The plugin will not attempt to make use of any library
118    functions with the exceptions of functions in the ANSI standard C
119    and C maths libraries, which the host is expected to provide.
120 
121    (3) The plugin will not access files, devices, pipes, sockets, IPC
122    or any other mechanism that might result in process or thread
123    blocking.
124 
125    (4) The plugin will take an amount of time to execute a run() or
126    run_adding() call approximately of form (A+B*SampleCount) where A
127    and B depend on the machine and host in use. This amount of time
128    may not depend on input signals or plugin state. The host is left
129    the responsibility to perform timings to estimate upper bounds for
130    A and B. */
131 #define LADSPA_PROPERTY_HARD_RT_CAPABLE 0x4
132 
133 #define LADSPA_IS_REALTIME(x)        ((x) & LADSPA_PROPERTY_REALTIME)
134 #define LADSPA_IS_INPLACE_BROKEN(x)  ((x) & LADSPA_PROPERTY_INPLACE_BROKEN)
135 #define LADSPA_IS_HARD_RT_CAPABLE(x) ((x) & LADSPA_PROPERTY_HARD_RT_CAPABLE)
136 
137 /*****************************************************************************/
138 
139 /* Plugin Ports:
140 
141    Plugins have `ports' that are inputs or outputs for audio or
142    data. Ports can communicate arrays of LADSPA_Data (for audio
143    inputs/outputs) or single LADSPA_Data values (for control
144    input/outputs). This information is encapsulated in the
145    LADSPA_PortDescriptor type which is assembled by ORing individual
146    properties together.
147 
148    Note that a port must be an input or an output port but not both
149    and that a port must be a control or audio port but not both. */
150 
151 typedef int LADSPA_PortDescriptor;
152 
153 /* Property LADSPA_PORT_INPUT indicates that the port is an input. */
154 #define LADSPA_PORT_INPUT   0x1
155 
156 /* Property LADSPA_PORT_OUTPUT indicates that the port is an output. */
157 #define LADSPA_PORT_OUTPUT  0x2
158 
159 /* Property LADSPA_PORT_CONTROL indicates that the port is a control
160    port. */
161 #define LADSPA_PORT_CONTROL 0x4
162 
163 /* Property LADSPA_PORT_AUDIO indicates that the port is a audio
164    port. */
165 #define LADSPA_PORT_AUDIO   0x8
166 
167 #define LADSPA_IS_PORT_INPUT(x)   ((x) & LADSPA_PORT_INPUT)
168 #define LADSPA_IS_PORT_OUTPUT(x)  ((x) & LADSPA_PORT_OUTPUT)
169 #define LADSPA_IS_PORT_CONTROL(x) ((x) & LADSPA_PORT_CONTROL)
170 #define LADSPA_IS_PORT_AUDIO(x)   ((x) & LADSPA_PORT_AUDIO)
171 
172 /*****************************************************************************/
173 
174 /* Plugin Port Range Hints:
175 
176    The host may wish to provide a representation of data entering or
177    leaving a plugin (e.g. to generate a GUI automatically). To make
178    this more meaningful, the plugin should provide `hints' to the host
179    describing the usual values taken by the data.
180 
181    Note that these are only hints. The host may ignore them and the
182    plugin must not assume that data supplied to it is meaningful. If
183    the plugin receives invalid input data it is expected to continue
184    to run without failure and, where possible, produce a sensible
185    output (e.g. a high-pass filter given a negative cutoff frequency
186    might switch to an all-pass mode).
187 
188    Hints are meaningful for all input and output ports but hints for
189    input control ports are expected to be particularly useful.
190 
191    More hint information is encapsulated in the
192    LADSPA_PortRangeHintDescriptor type which is assembled by ORing
193    individual hint types together. Hints may require further
194    LowerBound and UpperBound information.
195 
196    All the hint information for a particular port is aggregated in the
197    LADSPA_PortRangeHint structure. */
198 
199 typedef int LADSPA_PortRangeHintDescriptor;
200 
201 /* Hint LADSPA_HINT_BOUNDED_BELOW indicates that the LowerBound field
202    of the LADSPA_PortRangeHint should be considered meaningful. The
203    value in this field should be considered the (inclusive) lower
204    bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also
205    specified then the value of LowerBound should be multiplied by the
206    sample rate. */
207 #define LADSPA_HINT_BOUNDED_BELOW   0x1
208 
209 /* Hint LADSPA_HINT_BOUNDED_ABOVE indicates that the UpperBound field
210    of the LADSPA_PortRangeHint should be considered meaningful. The
211    value in this field should be considered the (inclusive) upper
212    bound of the valid range. If LADSPA_HINT_SAMPLE_RATE is also
213    specified then the value of UpperBound should be multiplied by the
214    sample rate. */
215 #define LADSPA_HINT_BOUNDED_ABOVE   0x2
216 
217 /* Hint LADSPA_HINT_TOGGLED indicates that the data item should be
218    considered a Boolean toggle. Data less than or equal to zero should
219    be considered `off' or `false,' and data above zero should be
220    considered `on' or `true.' LADSPA_HINT_TOGGLED may not be used in
221    conjunction with any other hint except LADSPA_HINT_DEFAULT_0 or
222    LADSPA_HINT_DEFAULT_1. */
223 #define LADSPA_HINT_TOGGLED         0x4
224 
225 /* Hint LADSPA_HINT_SAMPLE_RATE indicates that any bounds specified
226    should be interpreted as multiples of the sample rate. For
227    instance, a frequency range from 0Hz to the Nyquist frequency (half
228    the sample rate) could be requested by this hint in conjunction
229    with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds
230    at all must support this hint to retain meaning. */
231 #define LADSPA_HINT_SAMPLE_RATE     0x8
232 
233 /* Hint LADSPA_HINT_LOGARITHMIC indicates that it is likely that the
234    user will find it more intuitive to view values using a logarithmic
235    scale. This is particularly useful for frequencies and gains. */
236 #define LADSPA_HINT_LOGARITHMIC     0x10
237 
238 /* Hint LADSPA_HINT_INTEGER indicates that a user interface would
239    probably wish to provide a stepped control taking only integer
240    values. Any bounds set should be slightly wider than the actual
241    integer range required to avoid floating point rounding errors. For
242    instance, the integer set {0,1,2,3} might be described as [-0.1,
243    3.1]. */
244 #define LADSPA_HINT_INTEGER         0x20
245 
246 /* The various LADSPA_HINT_HAS_DEFAULT_* hints indicate a `normal'
247    value for the port that is sensible as a default. For instance,
248    this value is suitable for use as an initial value in a user
249    interface or as a value the host might assign to a control port
250    when the user has not provided one. Defaults are encoded using a
251    mask so only one default may be specified for a port. Some of the
252    hints make use of lower and upper bounds, in which case the
253    relevant bound or bounds must be available and
254    LADSPA_HINT_SAMPLE_RATE must be applied as usual. The resulting
255    default must be rounded if LADSPA_HINT_INTEGER is present. Default
256    values were introduced in LADSPA v1.1. */
257 #define LADSPA_HINT_DEFAULT_MASK    0x3C0
258 
259 /* This default values indicates that no default is provided. */
260 #define LADSPA_HINT_DEFAULT_NONE    0x0
261 
262 /* This default hint indicates that the suggested lower bound for the
263    port should be used. */
264 #define LADSPA_HINT_DEFAULT_MINIMUM 0x40
265 
266 /* This default hint indicates that a low value between the suggested
267    lower and upper bounds should be chosen. For ports with
268    LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.75 +
269    log(upper) * 0.25). Otherwise, this should be (lower * 0.75 + upper
270    * 0.25). */
271 #define LADSPA_HINT_DEFAULT_LOW     0x80
272 
273 /* This default hint indicates that a middle value between the
274    suggested lower and upper bounds should be chosen. For ports with
275    LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.5 +
276    log(upper) * 0.5). Otherwise, this should be (lower * 0.5 + upper *
277    0.5). */
278 #define LADSPA_HINT_DEFAULT_MIDDLE  0xC0
279 
280 /* This default hint indicates that a high value between the suggested
281    lower and upper bounds should be chosen. For ports with
282    LADSPA_HINT_LOGARITHMIC, this should be exp(log(lower) * 0.25 +
283    log(upper) * 0.75). Otherwise, this should be (lower * 0.25 + upper
284    * 0.75). */
285 #define LADSPA_HINT_DEFAULT_HIGH    0x100
286 
287 /* This default hint indicates that the suggested upper bound for the
288    port should be used. */
289 #define LADSPA_HINT_DEFAULT_MAXIMUM 0x140
290 
291 /* This default hint indicates that the number 0 should be used. Note
292    that this default may be used in conjunction with
293    LADSPA_HINT_TOGGLED. */
294 #define LADSPA_HINT_DEFAULT_0       0x200
295 
296 /* This default hint indicates that the number 1 should be used. Note
297    that this default may be used in conjunction with
298    LADSPA_HINT_TOGGLED. */
299 #define LADSPA_HINT_DEFAULT_1       0x240
300 
301 /* This default hint indicates that the number 100 should be used. */
302 #define LADSPA_HINT_DEFAULT_100     0x280
303 
304 /* This default hint indicates that the Hz frequency of `concert A'
305    should be used. This will be 440 unless the host uses an unusual
306    tuning convention, in which case it may be within a few Hz. */
307 #define LADSPA_HINT_DEFAULT_440     0x2C0
308 
309 #define LADSPA_IS_HINT_BOUNDED_BELOW(x)   ((x) & LADSPA_HINT_BOUNDED_BELOW)
310 #define LADSPA_IS_HINT_BOUNDED_ABOVE(x)   ((x) & LADSPA_HINT_BOUNDED_ABOVE)
311 #define LADSPA_IS_HINT_TOGGLED(x)         ((x) & LADSPA_HINT_TOGGLED)
312 #define LADSPA_IS_HINT_SAMPLE_RATE(x)     ((x) & LADSPA_HINT_SAMPLE_RATE)
313 #define LADSPA_IS_HINT_LOGARITHMIC(x)     ((x) & LADSPA_HINT_LOGARITHMIC)
314 #define LADSPA_IS_HINT_INTEGER(x)         ((x) & LADSPA_HINT_INTEGER)
315 
316 #define LADSPA_IS_HINT_HAS_DEFAULT(x)     ((x) & LADSPA_HINT_DEFAULT_MASK)
317 #define LADSPA_IS_HINT_DEFAULT_MINIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK)   \
318                                            == LADSPA_HINT_DEFAULT_MINIMUM)
319 #define LADSPA_IS_HINT_DEFAULT_LOW(x)     (((x) & LADSPA_HINT_DEFAULT_MASK)   \
320                                            == LADSPA_HINT_DEFAULT_LOW)
321 #define LADSPA_IS_HINT_DEFAULT_MIDDLE(x)  (((x) & LADSPA_HINT_DEFAULT_MASK)   \
322                                            == LADSPA_HINT_DEFAULT_MIDDLE)
323 #define LADSPA_IS_HINT_DEFAULT_HIGH(x)    (((x) & LADSPA_HINT_DEFAULT_MASK)   \
324                                            == LADSPA_HINT_DEFAULT_HIGH)
325 #define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x) (((x) & LADSPA_HINT_DEFAULT_MASK)   \
326                                            == LADSPA_HINT_DEFAULT_MAXIMUM)
327 #define LADSPA_IS_HINT_DEFAULT_0(x)       (((x) & LADSPA_HINT_DEFAULT_MASK)   \
328                                            == LADSPA_HINT_DEFAULT_0)
329 #define LADSPA_IS_HINT_DEFAULT_1(x)       (((x) & LADSPA_HINT_DEFAULT_MASK)   \
330                                            == LADSPA_HINT_DEFAULT_1)
331 #define LADSPA_IS_HINT_DEFAULT_100(x)     (((x) & LADSPA_HINT_DEFAULT_MASK)   \
332                                            == LADSPA_HINT_DEFAULT_100)
333 #define LADSPA_IS_HINT_DEFAULT_440(x)     (((x) & LADSPA_HINT_DEFAULT_MASK)   \
334                                             == LADSPA_HINT_DEFAULT_440)
335 
336 typedef struct _LADSPA_PortRangeHint {
337 
338   /* Hints about the port. */
339   LADSPA_PortRangeHintDescriptor HintDescriptor;
340 
341   /* Meaningful when hint LADSPA_HINT_BOUNDED_BELOW is active. When
342      LADSPA_HINT_SAMPLE_RATE is also active then this value should be
343      multiplied by the relevant sample rate. */
344   LADSPA_Data LowerBound;
345 
346   /* Meaningful when hint LADSPA_HINT_BOUNDED_ABOVE is active. When
347      LADSPA_HINT_SAMPLE_RATE is also active then this value should be
348      multiplied by the relevant sample rate. */
349   LADSPA_Data UpperBound;
350 
351 } LADSPA_PortRangeHint;
352 
353 /*****************************************************************************/
354 
355 /* Plugin Handles:
356 
357    This plugin handle indicates a particular instance of the plugin
358    concerned. It is valid to compare this to NULL (0 for C++) but
359    otherwise the host should not attempt to interpret it. The plugin
360    may use it to reference internal instance data. */
361 
362 typedef void * LADSPA_Handle;
363 
364 /*****************************************************************************/
365 
366 /* Descriptor for a Type of Plugin:
367 
368    This structure is used to describe a plugin type. It provides a
369    number of functions to examine the type, instantiate it, link it to
370    buffers and workspaces and to run it. */
371 
372 typedef struct _LADSPA_Descriptor {
373 
374   /* This numeric identifier indicates the plugin type
375      uniquely. Plugin programmers may reserve ranges of IDs from a
376      central body to avoid clashes. Hosts may assume that IDs are
377      below 0x1000000. */
378   unsigned long UniqueID;
379 
380   /* This identifier can be used as a unique, case-sensitive
381      identifier for the plugin type within the plugin file. Plugin
382      types should be identified by file and label rather than by index
383      or plugin name, which may be changed in new plugin
384      versions. Labels must not contain white-space characters. */
385   const char * Label;
386 
387   /* This indicates a number of properties of the plugin. */
388   LADSPA_Properties Properties;
389 
390   /* This member points to the null-terminated name of the plugin
391      (e.g. "Sine Oscillator"). */
392   const char * Name;
393 
394   /* This member points to the null-terminated string indicating the
395      maker of the plugin. This can be an empty string but not NULL. */
396   const char * Maker;
397 
398   /* This member points to the null-terminated string indicating any
399      copyright applying to the plugin. If no Copyright applies the
400      string "None" should be used. */
401   const char * Copyright;
402 
403   /* This indicates the number of ports (input AND output) present on
404      the plugin. */
405   unsigned long PortCount;
406 
407   /* This member indicates an array of port descriptors. Valid indices
408      vary from 0 to PortCount-1. */
409   const LADSPA_PortDescriptor * PortDescriptors;
410 
411   /* This member indicates an array of null-terminated strings
412      describing ports (e.g. "Frequency (Hz)"). Valid indices vary from
413      0 to PortCount-1. */
414   const char * const * PortNames;
415 
416   /* This member indicates an array of range hints for each port (see
417      above). Valid indices vary from 0 to PortCount-1. */
418   const LADSPA_PortRangeHint * PortRangeHints;
419 
420   /* This may be used by the plugin developer to pass any custom
421      implementation data into an instantiate call. It must not be used
422      or interpreted by the host. It is expected that most plugin
423      writers will not use this facility as LADSPA_Handle should be
424      used to hold instance data. */
425   void * ImplementationData;
426 
427   /* This member is a function pointer that instantiates a plugin. A
428      handle is returned indicating the new plugin instance. The
429      instantiation function accepts a sample rate as a parameter. The
430      plugin descriptor from which this instantiate function was found
431      must also be passed. This function must return NULL if
432      instantiation fails.
433 
434      Note that instance initialisation should generally occur in
435      activate() rather than here. */
436   LADSPA_Handle (*instantiate)(const struct _LADSPA_Descriptor * Descriptor,
437                                unsigned long                     SampleRate);
438 
439   /* This member is a function pointer that connects a port on an
440      instantiated plugin to a memory location at which a block of data
441      for the port will be read/written. The data location is expected
442      to be an array of LADSPA_Data for audio ports or a single
443      LADSPA_Data value for control ports. Memory issues will be
444      managed by the host. The plugin must read/write the data at these
445      locations every time run() or run_adding() is called and the data
446      present at the time of this connection call should not be
447      considered meaningful.
448 
449      connect_port() may be called more than once for a plugin instance
450      to allow the host to change the buffers that the plugin is
451      reading or writing. These calls may be made before or after
452      activate() or deactivate() calls.
453 
454      connect_port() must be called at least once for each port before
455      run() or run_adding() is called. When working with blocks of
456      LADSPA_Data the plugin should pay careful attention to the block
457      size passed to the run function as the block allocated may only
458      just be large enough to contain the block of samples.
459 
460      Plugin writers should be aware that the host may elect to use the
461      same buffer for more than one port and even use the same buffer
462      for both input and output (see LADSPA_PROPERTY_INPLACE_BROKEN).
463      However, overlapped buffers or use of a single buffer for both
464      audio and control data may result in unexpected behaviour. */
465    void (*connect_port)(LADSPA_Handle Instance,
466                         unsigned long Port,
467                         LADSPA_Data * DataLocation);
468 
469   /* This member is a function pointer that initialises a plugin
470      instance and activates it for use. This is separated from
471      instantiate() to aid real-time support and so that hosts can
472      reinitialise a plugin instance by calling deactivate() and then
473      activate(). In this case the plugin instance must reset all state
474      information dependent on the history of the plugin instance
475      except for any data locations provided by connect_port() and any
476      gain set by set_run_adding_gain(). If there is nothing for
477      activate() to do then the plugin writer may provide a NULL rather
478      than an empty function.
479 
480      When present, hosts must call this function once before run() (or
481      run_adding()) is called for the first time. This call should be
482      made as close to the run() call as possible and indicates to
483      real-time plugins that they are now live. Plugins should not rely
484      on a prompt call to run() after activate(). activate() may not be
485      called again unless deactivate() is called first. Note that
486      connect_port() may be called before or after a call to
487      activate(). */
488   void (*activate)(LADSPA_Handle Instance);
489 
490   /* This method is a function pointer that runs an instance of a
491      plugin for a block. Two parameters are required: the first is a
492      handle to the particular instance to be run and the second
493      indicates the block size (in samples) for which the plugin
494      instance may run.
495 
496      Note that if an activate() function exists then it must be called
497      before run() or run_adding(). If deactivate() is called for a
498      plugin instance then the plugin instance may not be reused until
499      activate() has been called again.
500 
501      If the plugin has the property LADSPA_PROPERTY_HARD_RT_CAPABLE
502      then there are various things that the plugin should not do
503      within the run() or run_adding() functions (see above). */
504   void (*run)(LADSPA_Handle Instance,
505               unsigned long SampleCount);
506 
507   /* This method is a function pointer that runs an instance of a
508      plugin for a block. This has identical behaviour to run() except
509      in the way data is output from the plugin. When run() is used,
510      values are written directly to the memory areas associated with
511      the output ports. However when run_adding() is called, values
512      must be added to the values already present in the memory
513      areas. Furthermore, output values written must be scaled by the
514      current gain set by set_run_adding_gain() (see below) before
515      addition.
516 
517      run_adding() is optional. When it is not provided by a plugin,
518      this function pointer must be set to NULL. When it is provided,
519      the function set_run_adding_gain() must be provided also. */
520   void (*run_adding)(LADSPA_Handle Instance,
521                      unsigned long SampleCount);
522 
523   /* This method is a function pointer that sets the output gain for
524      use when run_adding() is called (see above). If this function is
525      never called the gain is assumed to default to 1. Gain
526      information should be retained when activate() or deactivate()
527      are called.
528 
529      This function should be provided by the plugin if and only if the
530      run_adding() function is provided. When it is absent this
531      function pointer must be set to NULL. */
532   void (*set_run_adding_gain)(LADSPA_Handle Instance,
533                               LADSPA_Data   Gain);
534 
535   /* This is the counterpart to activate() (see above). If there is
536      nothing for deactivate() to do then the plugin writer may provide
537      a NULL rather than an empty function.
538 
539      Hosts must deactivate all activated units after they have been
540      run() (or run_adding()) for the last time. This call should be
541      made as close to the last run() call as possible and indicates to
542      real-time plugins that they are no longer live. Plugins should
543      not rely on prompt deactivation. Note that connect_port() may be
544      called before or after a call to deactivate().
545 
546      Deactivation is not similar to pausing as the plugin instance
547      will be reinitialised when activate() is called to reuse it. */
548   void (*deactivate)(LADSPA_Handle Instance);
549 
550   /* Once an instance of a plugin has been finished with it can be
551      deleted using the following function. The instance handle passed
552      ceases to be valid after this call.
553 
554      If activate() was called for a plugin instance then a
555      corresponding call to deactivate() must be made before cleanup()
556      is called. */
557   void (*cleanup)(LADSPA_Handle Instance);
558 
559 } LADSPA_Descriptor;
560 
561 /**********************************************************************/
562 
563 /* Accessing a Plugin: */
564 
565 /* The exact mechanism by which plugins are loaded is host-dependent,
566    however all most hosts will need to know is the name of shared
567    object file containing the plugin types. To allow multiple hosts to
568    share plugin types, hosts may wish to check for environment
569    variable LADSPA_PATH. If present, this should contain a
570    colon-separated path indicating directories that should be searched
571    (in order) when loading plugin types.
572 
573    A plugin programmer must include a function called
574    "ladspa_descriptor" with the following function prototype within
575    the shared object file. This function will have C-style linkage (if
576    you are using C++ this is taken care of by the `extern "C"' clause
577    at the top of the file).
578 
579    A host will find the plugin shared object file by one means or
580    another, find the ladspa_descriptor() function, call it, and
581    proceed from there.
582 
583    Plugin types are accessed by index (not ID) using values from 0
584    upwards. Out of range indexes must result in this function
585    returning NULL, so the plugin count can be determined by checking
586    for the least index that results in NULL being returned. */
587 
588 const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index);
589 
590 /* Datatype corresponding to the ladspa_descriptor() function. */
591 typedef const LADSPA_Descriptor *
592 (*LADSPA_Descriptor_Function)(unsigned long Index);
593 
594 /**********************************************************************/
595 
596 #ifdef __cplusplus
597 }
598 #endif
599 
600 #endif /* LADSPA_INCLUDED */
601 
602 /* EOF */
603