commit a711a05f4617e62c9d6570352eb32ec70f8260e7
parent 1e1320026430b7d3800ec5ecbd3580a8a3dfcb4a
Author: Alexandre Bique <bique.alexandre@gmail.com>
Date: Thu, 16 Oct 2014 01:04:20 +0200
Updates ports interface
Diffstat:
2 files changed, 105 insertions(+), 77 deletions(-)
diff --git a/include/clap/clap.h b/include/clap/clap.h
@@ -129,7 +129,7 @@ struct clap_param
char name[CLAP_NAME_SIZE]; // the display name
char desc[CLAP_DESC_SIZE];
bool is_per_note;
- const char display_text[CLAP_DISPLAY_SIZE]; // use this for display if not NULL.
+ char display_text[CLAP_DISPLAY_SIZE];
union clap_param_value value;
union clap_param_value min;
union clap_param_value max;
@@ -327,12 +327,17 @@ struct clap_plugin
/* audio ports */
uint32_t (*get_ports_configs_count)(struct clap_plugin *plugin);
bool (*get_ports_config)(struct clap_plugin *plugin,
- uint32_t index,
- struct clap_ports_config *config,);
+ uint32_t config_index,
+ struct clap_ports_config *config);
bool (*get_port_info)(struct clap_plugin *plugin,
uint32_t config_index,
uint32_t port_index,
struct clap_port_info *port);
+ bool (*set_ports_config)(struct clap_plugin *plugin,
+ uint32_t config_index);
+ bool (*set_port_repeat)(struct clap_plugin *plugin,
+ uint32_t port_index,
+ uint32_t count);
/* Returns a newly allocated parameters tree. The caller has to free it. */
uint32_t (*get_params_count)(struct clap_plugin *plugin);
diff --git a/spec.html b/spec.html
@@ -863,40 +863,49 @@ big endian machine, it should load again successfully.</p>
<span class="k">struct</span> <span class="n">clap_plugin</span><span class="p">;</span>
<span class="k">struct</span> <span class="n">clap_host</span><span class="p">;</span>
-<span class="c1">//////////////
-// CHANNELS //
-//////////////
-</span>
-<span class="k">enum</span> <span class="n">clap_channel_type</span>
+<span class="k">enum</span> <span class="n">clap_string_size</span>
<span class="p">{</span>
- <span class="n">CLAP_CHANNEL_MONO</span><span class="p">,</span>
- <span class="n">CLAP_CHANNEL_STEREO</span><span class="p">,</span>
- <span class="n">CLAP_CHANNEL_SURROUND</span><span class="p">,</span>
+ <span class="n">CLAP_ID_SIZE</span> <span class="o">=</span> <span class="mi">32</span><span class="p">,</span>
+ <span class="n">CLAP_NAME_SIZE</span> <span class="o">=</span> <span class="mi">32</span><span class="p">,</span>
+ <span class="n">CLAP_DESC_SIZE</span> <span class="o">=</span> <span class="mi">256</span><span class="p">,</span>
+ <span class="n">CLAP_DISPLAY_SIZE</span> <span class="o">=</span> <span class="mi">32</span><span class="p">,</span>
+ <span class="n">CLAP_TAGS_SIZE</span> <span class="o">=</span> <span class="mi">64</span><span class="p">,</span>
+ <span class="n">CLAP_URL_SIZE</span> <span class="o">=</span> <span class="mi">256</span><span class="p">,</span>
<span class="p">};</span>
-<span class="k">enum</span> <span class="n">clap_channel_role</span>
+<span class="c1">///////////
+// PORTS //
+///////////
+</span>
+<span class="k">enum</span> <span class="n">clap_port_type</span>
<span class="p">{</span>
- <span class="n">CLAP_CHANNEL_INOUT</span><span class="p">,</span>
- <span class="n">CLAP_CHANNEL_SIDECHAIN</span><span class="p">,</span>
- <span class="n">CLAP_CHANNEL_FEEDBACK</span><span class="p">,</span>
+ <span class="n">CLAP_PORT_MONO</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+ <span class="n">CLAP_PORT_STEREO</span><span class="p">,</span>
+ <span class="n">CLAP_PORT_SURROUND</span><span class="p">,</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="n">clap_channel</span>
+<span class="k">enum</span> <span class="n">clap_port_role</span>
<span class="p">{</span>
- <span class="k">struct</span> <span class="n">clap_channel</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span>
+ <span class="n">CLAP_PORT_INOUT</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
+ <span class="n">CLAP_PORT_SIDECHAIN</span><span class="p">,</span>
+ <span class="n">CLAP_PORT_FEEDBACK</span><span class="p">,</span>
+<span class="p">};</span>
- <span class="k">enum</span> <span class="n">clap_channel_type</span> <span class="n">type</span><span class="p">;</span>
- <span class="k">enum</span> <span class="n">clap_channel_role</span> <span class="n">role</span><span class="p">;</span>
- <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
- <span class="kt">uint32_t</span> <span class="n">stream_id</span><span class="p">;</span> <span class="c1">// used to connect feedback loops
-</span> <span class="kt">bool</span> <span class="n">repeatable</span><span class="p">;</span>
+<span class="k">struct</span> <span class="n">clap_port_info</span>
+<span class="p">{</span>
+ <span class="k">enum</span> <span class="n">clap_port_type</span> <span class="n">type</span><span class="p">;</span>
+ <span class="k">enum</span> <span class="n">clap_port_role</span> <span class="n">role</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">uint32_t</span> <span class="n">stream_id</span><span class="p">;</span> <span class="c1">// used to connect feedback loops
+</span> <span class="kt">bool</span> <span class="n">repeatable</span><span class="p">;</span>
<span class="p">};</span>
-<span class="k">struct</span> <span class="n">clap_channels_config</span>
+<span class="k">struct</span> <span class="n">clap_ports_config</span>
<span class="p">{</span>
- <span class="k">struct</span> <span class="n">clap_channel</span> <span class="o">*</span><span class="n">inputs</span><span class="p">;</span> <span class="c1">// linked list
-</span> <span class="k">struct</span> <span class="n">clap_channel</span> <span class="o">*</span><span class="n">outputs</span><span class="p">;</span> <span class="c1">// linked list
-</span><span class="p">};</span>
+ <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">uint32_t</span> <span class="n">inputs_count</span><span class="p">;</span>
+ <span class="kt">uint32_t</span> <span class="n">outputs_count</span><span class="p">;</span>
+<span class="p">};</span>
<span class="c1">////////////////
// PARAMETERS //
@@ -904,7 +913,7 @@ big endian machine, it should load again successfully.</p>
</span>
<span class="k">enum</span> <span class="n">clap_param_type</span>
<span class="p">{</span>
- <span class="n">CLAP_PARAM_GROUP</span><span class="p">,</span>
+ <span class="n">CLAP_PARAM_GROUP</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">CLAP_PARAM_BOOL</span><span class="p">,</span>
<span class="n">CLAP_PARAM_FLOAT</span><span class="p">,</span>
<span class="n">CLAP_PARAM_INT</span><span class="p">,</span>
@@ -913,7 +922,7 @@ big endian machine, it should load again successfully.</p>
<span class="k">enum</span> <span class="n">clap_param_scale</span>
<span class="p">{</span>
- <span class="n">CLAP_PARAM_LINEAR</span><span class="p">,</span>
+ <span class="n">CLAP_PARAM_LINEAR</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">CLAP_PARAM_LOG</span><span class="p">,</span>
<span class="p">};</span>
@@ -926,18 +935,18 @@ big endian machine, it should load again successfully.</p>
<span class="k">struct</span> <span class="n">clap_param</span>
<span class="p">{</span>
- <span class="cm">/* tree field */</span>
- <span class="k">struct</span> <span class="n">clap_param</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span>
- <span class="k">struct</span> <span class="n">clap_param</span> <span class="o">*</span><span class="n">childs</span><span class="p">;</span>
-
+ <span class="cm">/* tree fields */</span>
+ <span class="kt">uint32_t</span> <span class="n">index</span><span class="p">;</span> <span class="c1">// parameter's index
+</span> <span class="kt">uint32_t</span> <span class="n">parent</span><span class="p">;</span> <span class="c1">// parent index
+</span>
<span class="cm">/* param info */</span>
<span class="k">enum</span> <span class="n">clap_param_type</span> <span class="n">type</span><span class="p">;</span>
- <span class="kt">char</span> <span class="o">*</span><span class="n">id</span><span class="p">;</span> <span class="c1">// a string which identify the param
-</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> <span class="c1">// the display name
-</span> <span class="kt">char</span> <span class="o">*</span><span class="n">desc</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="n">id</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span> <span class="c1">// a string which identify the param
+</span> <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span> <span class="c1">// the display name
+</span> <span class="kt">char</span> <span class="n">desc</span><span class="p">[</span><span class="n">CLAP_DESC_SIZE</span><span class="p">];</span>
<span class="kt">bool</span> <span class="n">is_per_note</span><span class="p">;</span>
- <span class="kt">char</span> <span class="o">*</span><span class="n">display_text</span><span class="p">;</span> <span class="c1">// use this for display if not NULL.
-</span> <span class="k">union</span> <span class="n">clap_param_value</span> <span class="n">value</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="n">display_text</span><span class="p">[</span><span class="n">CLAP_DISPLAY_SIZE</span><span class="p">];</span>
+ <span class="k">union</span> <span class="n">clap_param_value</span> <span class="n">value</span><span class="p">;</span>
<span class="k">union</span> <span class="n">clap_param_value</span> <span class="n">min</span><span class="p">;</span>
<span class="k">union</span> <span class="n">clap_param_value</span> <span class="n">max</span><span class="p">;</span>
<span class="k">enum</span> <span class="n">clap_param_scale</span> <span class="n">scale</span><span class="p">;</span>
@@ -949,13 +958,11 @@ big endian machine, it should load again successfully.</p>
</span>
<span class="k">struct</span> <span class="n">clap_preset</span>
<span class="p">{</span>
- <span class="k">struct</span> <span class="n">clap_preset</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span>
-
- <span class="kt">char</span> <span class="o">*</span><span class="n">id</span><span class="p">;</span>
- <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> <span class="c1">// display name
-</span> <span class="kt">char</span> <span class="o">*</span><span class="n">desc</span><span class="p">;</span> <span class="c1">// desc and how to use it
-</span> <span class="kt">char</span> <span class="o">*</span><span class="n">author</span><span class="p">;</span>
- <span class="kt">char</span> <span class="o">**</span><span class="n">tags</span><span class="p">;</span> <span class="c1">// null terminated array of tags
+ <span class="kt">uint32_t</span> <span class="n">id</span><span class="p">;</span> <span class="c1">// preset id
+</span> <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span> <span class="c1">// display name
+</span> <span class="kt">char</span> <span class="n">desc</span><span class="p">[</span><span class="n">CLAP_DESC_SIZE</span><span class="p">];</span> <span class="c1">// desc and how to use it
+</span> <span class="kt">char</span> <span class="n">author</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">tags</span><span class="p">[</span><span class="n">CLAP_TAGS_SIZE</span><span class="p">];</span> <span class="c1">// "tag1;tag2;tag3;...
</span><span class="p">};</span>
<span class="c1">////////////
@@ -964,7 +971,7 @@ big endian machine, it should load again successfully.</p>
</span>
<span class="k">enum</span> <span class="n">clap_event_type</span>
<span class="p">{</span>
- <span class="n">CLAP_EVENT_NOTE_ON</span><span class="p">,</span> <span class="c1">// note attribute
+ <span class="n">CLAP_EVENT_NOTE_ON</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="c1">// note attribute
</span> <span class="n">CLAP_EVENT_NOTE_MODULATION</span><span class="p">,</span> <span class="c1">// note attribute
</span> <span class="n">CLAP_EVENT_NOTE_OFF</span><span class="p">,</span> <span class="c1">// note attribute
</span>
@@ -993,10 +1000,10 @@ big endian machine, it should load again successfully.</p>
<span class="p">{</span>
<span class="kt">uint32_t</span> <span class="n">index</span><span class="p">;</span>
<span class="k">union</span> <span class="n">clap_param_value</span> <span class="n">value</span><span class="p">;</span>
- <span class="kt">float</span> <span class="n">increment</span><span class="p">;</span> <span class="c1">// for param ramp
-</span> <span class="kt">char</span> <span class="o">*</span><span class="n">display_text</span><span class="p">;</span> <span class="c1">// use this for display if not NULL.
-</span> <span class="kt">bool</span> <span class="n">is_recordable</span><span class="p">;</span> <span class="c1">// used to tell the host if this event
-</span> <span class="c1">// can be recorded
+ <span class="kt">float</span> <span class="n">increment</span><span class="p">;</span> <span class="c1">// for param ramp
+</span> <span class="kt">char</span> <span class="n">display_text</span><span class="p">[</span><span class="n">CLAP_DISPLAY_SIZE</span><span class="p">];</span> <span class="c1">// use this for display if not NULL.
+</span> <span class="kt">bool</span> <span class="n">is_recordable</span><span class="p">;</span> <span class="c1">// used to tell the host if this event
+</span> <span class="c1">// can be recorded
</span><span class="p">};</span>
<span class="k">struct</span> <span class="n">clap_event_control</span>
@@ -1012,7 +1019,7 @@ big endian machine, it should load again successfully.</p>
<span class="k">struct</span> <span class="n">clap_event_preset</span>
<span class="p">{</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">id</span><span class="p">;</span>
+ <span class="kt">uint32_t</span> <span class="n">id</span><span class="p">;</span>
<span class="p">};</span>
<span class="k">struct</span> <span class="n">clap_event_midi</span>
@@ -1028,11 +1035,11 @@ big endian machine, it should load again successfully.</p>
<span class="kt">uint64_t</span> <span class="n">sample_offset</span><span class="p">;</span> <span class="c1">// offset from the parent event or current time in samples
</span>
<span class="k">union</span> <span class="p">{</span>
- <span class="k">struct</span> <span class="n">clap_event_note</span> <span class="n">note</span><span class="p">;</span>
- <span class="k">struct</span> <span class="n">clap_event_param</span> <span class="n">param</span><span class="p">;</span>
- <span class="k">struct</span> <span class="n">clap_event_pitch</span> <span class="n">pitch</span><span class="p">;</span>
- <span class="k">struct</span> <span class="n">clap_event_preset</span> <span class="n">preset</span><span class="p">;</span>
- <span class="k">struct</span> <span class="n">clap_event_midi</span> <span class="n">midi</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_note</span> <span class="n">note</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_param</span> <span class="n">param</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_pitch</span> <span class="n">pitch</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_preset</span> <span class="n">preset</span><span class="p">;</span>
+ <span class="k">struct</span> <span class="n">clap_event_midi</span> <span class="n">midi</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
@@ -1097,11 +1104,14 @@ big endian machine, it should load again successfully.</p>
////////////
</span>
<span class="c1">// bitfield
-</span><span class="cp"># define CLAP_PLUGIN_INSTRUMENT (1 << 0)
-# define CLAP_PLUGIN_EFFECT (1 << 1)
-# define CLAP_PLUGIN_MIDI_EFFECT (1 << 2)
-# define CLAP_PLUGIN_ANALYZER (1 << 3)
-</span>
+</span><span class="k">enum</span> <span class="n">clap_plugin_type</span>
+<span class="p">{</span>
+ <span class="n">CLAP_PLUGIN_INSTRUMENT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">0</span><span class="p">),</span>
+ <span class="n">CLAP_PLUGIN_EFFECT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">1</span><span class="p">),</span>
+ <span class="n">CLAP_PLUGIN_MIDI_EFFECT</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">2</span><span class="p">),</span>
+ <span class="n">CLAP_PLUGIN_ANALYZER</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="mi">3</span><span class="p">)</span>
+<span class="p">};</span>
+
<span class="k">struct</span> <span class="n">clap_plugin</span>
<span class="p">{</span>
<span class="kt">uint32_t</span> <span class="n">clap_version</span><span class="p">;</span> <span class="c1">// initialized to CALP_VERSION
@@ -1113,32 +1123,45 @@ big endian machine, it should load again successfully.</p>
<span class="kt">void</span> <span class="p">(</span><span class="o">*</span><span class="n">destroy</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
<span class="cm">/* plugin info */</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">id</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">description</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">manufacturer</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">version</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">license</span><span class="p">;</span>
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">support</span><span class="p">;</span> <span class="c1">// a link to the support
-</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">**</span><span class="n">caterogries</span><span class="p">;</span> <span class="c1">// fm, analogue, delay, reverb, ...
-</span> <span class="kt">uint32_t</span> <span class="n">plugin_type</span><span class="p">;</span>
- <span class="kt">uint32_t</span> <span class="n">chunk_size</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="n">id</span><span class="p">[</span><span class="n">CLAP_ID_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">name</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">description</span><span class="p">[</span><span class="n">CLAP_DESC_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">manufacturer</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">version</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">url</span><span class="p">[</span><span class="n">CLAP_URL_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">license</span><span class="p">[</span><span class="n">CLAP_NAME_SIZE</span><span class="p">];</span>
+ <span class="kt">char</span> <span class="n">support</span><span class="p">[</span><span class="n">CLAP_URL_SIZE</span><span class="p">];</span> <span class="c1">// a link to the support
+</span> <span class="kt">char</span> <span class="n">caterogries</span><span class="p">[</span><span class="n">CLAP_TAGS_SIZE</span><span class="p">];</span> <span class="c1">// fm;analogue;delay;...
+</span>
+ <span class="kt">uint32_t</span> <span class="n">plugin_type</span><span class="p">;</span>
+ <span class="kt">uint32_t</span> <span class="n">chunk_size</span><span class="p">;</span>
<span class="kt">bool</span> <span class="n">has_gui</span><span class="p">;</span>
<span class="kt">bool</span> <span class="n">supports_tunning</span><span class="p">;</span>
<span class="kt">bool</span> <span class="n">supports_microtones</span><span class="p">;</span>
- <span class="cm">/* audio channels */</span>
- <span class="k">struct</span> <span class="n">clap_channels_config</span> <span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="n">get_channels_configs</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
- <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">set_channels_config</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span>
- <span class="k">struct</span> <span class="n">clap_channels_config</span> <span class="o">*</span><span class="n">config</span><span class="p">);</span>
+ <span class="cm">/* audio ports */</span>
+ <span class="kt">uint32_t</span> <span class="p">(</span><span class="o">*</span><span class="n">get_ports_configs_count</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">get_ports_config</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">config_index</span><span class="p">,</span>
+ <span class="k">struct</span> <span class="n">clap_ports_config</span> <span class="o">*</span><span class="n">config</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">get_port_info</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">config_index</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">port_index</span><span class="p">,</span>
+ <span class="k">struct</span> <span class="n">clap_port_info</span> <span class="o">*</span><span class="n">port</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">set_ports_config</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">config_index</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">set_port_repeat</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">port_index</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">count</span><span class="p">);</span>
<span class="cm">/* Returns a newly allocated parameters tree. The caller has to free it. */</span>
- <span class="k">struct</span> <span class="n">clap_param</span> <span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="n">get_params</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="kt">uint32_t</span> <span class="p">(</span><span class="o">*</span><span class="n">get_params_count</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">get_param</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">index</span><span class="p">,</span> <span class="k">struct</span> <span class="n">clap_param</span> <span class="o">*</span><span class="n">param</span><span class="p">);</span>
<span class="cm">/* Returns a newly allocated preset list. The caller has to free it. */</span>
- <span class="k">struct</span> <span class="n">clap_preset</span> <span class="o">*</span><span class="p">(</span><span class="o">*</span><span class="n">get_presets</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="kt">uint32_t</span> <span class="p">(</span><span class="o">*</span><span class="n">get_presets_count</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">get_presets</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">,</span> <span class="kt">uint32_t</span> <span class="n">index</span><span class="p">,</span> <span class="k">struct</span> <span class="n">clap_preset</span> <span class="o">*</span><span class="n">preset</span><span class="p">);</span>
<span class="cm">/* activation */</span>
<span class="kt">bool</span> <span class="p">(</span><span class="o">*</span><span class="n">activate</span><span class="p">)(</span><span class="k">struct</span> <span class="n">clap_plugin</span> <span class="o">*</span><span class="n">plugin</span><span class="p">);</span>