commit a16836fe3db1ef1b2b8f49898bf769d56ed17c76
parent 33898cfbc7005e7f95811a351778d822c1edfefb
Author: Alexandre Bique <bique.alexandre@gmail.com>
Date: Wed, 14 Jan 2015 16:01:16 +0100
Regen the spec
Diffstat:
M | spec.html | | | 147 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------- |
1 file changed, 119 insertions(+), 28 deletions(-)
diff --git a/spec.html b/spec.html
@@ -1004,6 +1004,8 @@ the plugin.</p>
plugin state on a little endian machine and send it through the network to a
big endian machine, it should load again successfully.</p>
<p>See <a class="reference internal" href="#clap-ext-state-h">clap/ext/state.h</a>.</p>
+<p>Note: if the plugin do not have the state extension, the host can save the
+plugin's parameters and restore them.</p>
</div>
</div>
<div class="section" id="examples">
@@ -1015,6 +1017,7 @@ big endian machine, it should load again successfully.</p>
#include <dlfcn.h>
</span>
<span class="cp">#include <clap/clap.h>
+#include <clap/ext/params.h>
</span>
<span class="k">static</span> <span class="kt">void</span> <span class="nf">host_events</span><span class="p">(</span><span class="k">struct</span> <span class="n">clap_host</span> <span class="o">*</span><span class="n">host</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>
@@ -1040,6 +1043,94 @@ big endian machine, it should load again successfully.</p>
<span class="n">host</span><span class="o">-></span><span class="n">extension</span> <span class="o">=</span> <span class="n">host_extension</span><span class="p">;</span>
<span class="p">}</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="nf">print_attr</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="p">{</span>
+ <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span>
+
+<span class="cp">#define prt_attr(Attr) \
+ do { \
+ int size = plugin->get_attribute( \
+ plugin, CLAP_ATTR_##Attr, buffer, sizeof (buffer)); \
+ if (size > 0) \
+ fprintf(stdout, " %s: %s\n", CLAP_ATTR_##Attr, buffer); \
+ } while (0)
+</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"Attributes:</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">ID</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">NAME</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">DESCRIPTION</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">MANUFACTURER</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">VERSION</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">URL</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">SUPPORT</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">LICENSE</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">CATEGORIES</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">TYPE</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">CHUNK_SIZE</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">LATENCY</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">SUPPORTS_TUNING</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">SUPPORTS_IN_PLACE_PROCESSING</span><span class="p">);</span>
+ <span class="n">prt_attr</span><span class="p">(</span><span class="n">IS_REMOTE_PROCESSING</span><span class="p">);</span>
+
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"-------------------</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+
+<span class="cp">#undef print_attr
+</span><span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="nf">print_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="p">{</span>
+ <span class="k">struct</span> <span class="n">clap_plugin_params</span> <span class="o">*</span><span class="n">params</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">-></span><span class="n">extension</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="n">CLAP_EXT_PARAMS</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">params</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"no parameter extension</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+ <span class="k">return</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">uint32_t</span> <span class="n">count</span> <span class="o">=</span> <span class="n">params</span><span class="o">-></span><span class="n">count</span><span class="p">(</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"parameters count: %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">count</span><span class="p">);</span>
+
+ <span class="k">struct</span> <span class="n">clap_param</span> <span class="n">param</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">uint32_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">count</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">params</span><span class="o">-></span><span class="n">get</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="o">&</span><span class="n">param</span><span class="p">))</span>
+ <span class="k">continue</span><span class="p">;</span>
+
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">" => {id: %s, name: %s, desc: %s, display: %s, "</span>
+ <span class="s">"is_per_note: %d, is_used: %d, is_periodic: %d"</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">desc</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">display</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">is_per_note</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">is_used</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">is_periodic</span><span class="p">);</span>
+
+ <span class="k">switch</span> <span class="p">(</span><span class="n">param</span><span class="p">.</span><span class="n">type</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="nl">CLAP_PARAM_FLOAT</span><span class="p">:</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">", type: float, value: %f, min: %f, max: %f"</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">f</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">min</span><span class="p">.</span><span class="n">f</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">max</span><span class="p">.</span><span class="n">f</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="nl">CLAP_PARAM_INT</span><span class="p">:</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">", type: int, value: %d, min: %d, max: %d"</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">min</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">max</span><span class="p">.</span><span class="n">i</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="nl">CLAP_PARAM_ENUM</span><span class="p">:</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">", type: enum, value: %d, min: %d, max: %d"</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">min</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">max</span><span class="p">.</span><span class="n">i</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="nl">CLAP_PARAM_BOOL</span><span class="p">:</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">", type: bool, value: %d, min: %d, max: %d"</span><span class="p">,</span>
+ <span class="n">param</span><span class="p">.</span><span class="n">value</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">min</span><span class="p">.</span><span class="n">i</span><span class="p">,</span> <span class="n">param</span><span class="p">.</span><span class="n">max</span><span class="p">.</span><span class="n">i</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="nl">CLAP_PARAM_GROUP</span><span class="p">:</span>
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">", type: group"</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"}</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">fprintf</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="s">"-------------------</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+<span class="p">}</span>
+
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">clap_host</span> <span class="n">host</span><span class="p">;</span>
@@ -1072,33 +1163,9 @@ big endian machine, it should load again successfully.</p>
<span class="k">continue</span><span class="p">;</span>
<span class="p">}</span>
- <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span>
-
-<span class="cp">#define print_attr(Attr) \
- do { \
- plugin->get_attribute( \
- plugin, CLAP_ATTR_##Attr, buffer, sizeof (buffer)); \
- fprintf(stdout, " %s: %s\n", CLAP_ATTR_##Attr, buffer); \
- } while (0)
-</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">ID</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">NAME</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">DESCRIPTION</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">MANUFACTURER</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">VERSION</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">URL</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">SUPPORT</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">LICENSE</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">CATEGORIES</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">TYPE</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">CHUNK_SIZE</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">LATENCY</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">SUPPORTS_TUNING</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">SUPPORTS_IN_PLACE_PROCESSING</span><span class="p">);</span>
- <span class="n">print_attr</span><span class="p">(</span><span class="n">IS_REMOTE_PROCESSING</span><span class="p">);</span>
+ <span class="n">print_attr</span><span class="p">(</span><span class="n">plugin</span><span class="p">);</span>
+ <span class="n">print_params</span><span class="p">(</span><span class="n">plugin</span><span class="p">);</span>
-<span class="cp">#undef print_attr
-</span>
<span class="c1">// destroy the plugin
</span> <span class="n">plugin</span><span class="o">-></span><span class="n">destroy</span><span class="p">(</span><span class="n">plugin</span><span class="p">);</span>
<span class="p">}</span>
@@ -1346,8 +1413,8 @@ big endian machine, it should load again successfully.</p>
<span class="k">struct</span> <span class="n">clap_process</span>
<span class="p">{</span>
<span class="cm">/* audio buffers */</span>
- <span class="kt">float</span> <span class="o">**</span><span class="n">input</span><span class="p">;</span>
- <span class="kt">float</span> <span class="o">**</span><span class="n">output</span><span class="p">;</span>
+ <span class="kt">float</span> <span class="o">**</span><span class="n">inputs</span><span class="p">;</span>
+ <span class="kt">float</span> <span class="o">**</span><span class="n">outputs</span><span class="p">;</span>
<span class="kt">uint32_t</span> <span class="n">samples_count</span><span class="p">;</span>
<span class="cm">/* process info */</span>
@@ -1571,6 +1638,7 @@ big endian machine, it should load again successfully.</p>
# define CLAP_EXT_PARAMS_H
</span>
<span class="cp"># include "../clap.h"
+# include "../serialize/serialize.h"
</span>
<span class="cp"># define CLAP_EXT_PARAMS "clap/params"
</span>
@@ -1622,6 +1690,29 @@ big endian machine, it should load again successfully.</p>
<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="p">};</span>
+<span class="cm">/* Helper that will serialize the plugin's parameters value into the buffer.
+ * (*size) must be set to the size of the buffer.
+ * At return, (*size) contains the number of bytes used and returns true on
+ * success, the only possible error is that the buffer is too small.
+ */</span>
+<span class="k">static</span> <span class="kr">inline</span> <span class="kt">bool</span>
+<span class="nf">clap_plugin_params_save</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">uint8_t</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="o">*</span><span class="n">size</span><span class="p">);</span>
+
+<span class="cm">/* Helper that will deserialize parameters value from the buffer
+ * and send CLAP_EVENT_PARAM_SET to the plugin to restore them.
+ * The steady_time is required because the plugin can discard
+ * events from the past.
+ */</span>
+<span class="k">static</span> <span class="kr">inline</span> <span class="kt">void</span>
+<span class="nf">clap_plugin_params_restore</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">const</span> <span class="kt">uint8_t</span> <span class="o">*</span><span class="n">buffer</span><span class="p">,</span>
+ <span class="kt">uint32_t</span> <span class="n">size</span><span class="p">,</span>
+ <span class="kt">uint64_t</span> <span class="n">steady_time</span><span class="p">);</span>
+
+<span class="cp"># include "params.c"
+</span>
<span class="cp">#endif </span><span class="cm">/* !CLAP_EXT_PARAMS_H */</span>
</pre>
</div>