comparison vamp-hostsdk/host-c.h @ 389:93683cf9fce3 vh

Some work toward C API for plugin loading
author Chris Cannam
date Wed, 20 May 2015 13:54:46 +0100
parents
children 632c662e95e7
comparison
equal deleted inserted replaced
388:4ec736a36546 389:93683cf9fce3
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 /*
4 Vamp
5
6 An API for audio analysis and feature extraction plugins.
7
8 Centre for Digital Music, Queen Mary, University of London.
9 Copyright 2006-2015 Chris Cannam and QMUL.
10
11 Permission is hereby granted, free of charge, to any person
12 obtaining a copy of this software and associated documentation
13 files (the "Software"), to deal in the Software without
14 restriction, including without limitation the rights to use, copy,
15 modify, merge, publish, distribute, sublicense, and/or sell copies
16 of the Software, and to permit persons to whom the Software is
17 furnished to do so, subject to the following conditions:
18
19 The above copyright notice and this permission notice shall be
20 included in all copies or substantial portions of the Software.
21
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 Except as contained in this notice, the names of the Centre for
31 Digital Music; Queen Mary, University of London; and Chris Cannam
32 shall not be used in advertising or otherwise to promote the sale,
33 use or other dealings in this Software without prior written
34 authorization.
35 */
36
37 /*
38 This file defines a low-level API for enumerating and loading
39 plugin libraries using C calling conventions. It could be used in
40 C programs or in languages with C-compatible foreign-function
41 interfaces.
42
43 This is not the simplest or easiest interface for hosting Vamp
44 plugins -- if you have the capability to use the C++ API, please
45 do that instead. (Most programs should not even include this
46 header.)
47
48 The C and C++ interfaces provide different abstraction levels:
49
50 In the C++ interface, the class PluginLoader provides a list of
51 keys corresponding to the installed plugins (where a key combines
52 the plugin's library name and plugin identifier into a single
53 string) plus a method to load a single plugin based on its key
54 (obtaining an instance of class Plugin). With the C++ interface
55 you go straight from the key to a live instance of the plugin. The
56 PluginLoader also provides various facilities to adapt the plugin
57 based on your requirements (e.g. to do time- to frequency-domain
58 conversion for its input).
59
60 This low-level C interface, on the other hand, deals only in
61 plugin libraries and static descriptors, not in plugin
62 instances. You can enumerate the installed libraries, getting just
63 the base .soname of each library. Then you can retrieve each of
64 the raw C plugin descriptors from a library, and use the
65 descriptor (whose interface is defined in vamp/vamp.h) to
66 instantiate the plugin. So this header corresponds to the first
67 part of the PluginLoader class interface (finding and loading
68 plugin libraries and retrieving plugin descriptors from them) but
69 does not do any of the rest (instantiating and adapting the
70 plugins themselves), which may mean the resulting plugin is
71 relatively hard to use compared to that provided by the
72 PluginLoader API.
73
74 This API is not thread-safe; use it from a single application
75 thread, or guard access to it with a mutex.
76
77 This header was introduced in version 2.6 of the Vamp plugin SDK.
78 */
79
80 #ifndef VAMPHOST_C_H_INCLUDED
81 #define VAMPHOST_C_H_INCLUDED
82
83 #include <vamp/vamp.h>
84
85 #ifdef __cplusplus
86 extern "C" {
87 #endif
88
89 typedef struct vhLibrary_t *vhLibrary;
90
91 /**
92 * Return the number of Vamp plugin libraries discovered in the
93 * installation path. This number will remain fixed after the first
94 * call -- plugins are only discovered once, the first time this
95 * function is called.
96 */
97 extern int vhGetLibraryCount();
98
99 /**
100 * Return the library name (base soname) of the library with the given
101 * index, in the range 0..(vhGetLibraryCount()-1).
102 */
103 extern const char *vhGetLibraryName(int library);
104
105 /**
106 * Load a plugin library given its library name, that is, the base
107 * soname as returned by vhGetLibraryName. If the library cannot be
108 * loaded for any reason, the return value is 0; otherwise it is an
109 * opaque pointer suitable for passing to other functions in this API.
110 */
111 extern vhLibrary vhLoadLibrary(const char *libraryName);
112
113 /**
114 * Return the number of Vamp plugins in the given library.
115 */
116 extern int vhGetPluginCount(vhLibrary library);
117
118 /**
119 * Return a Vamp plugin descriptor for a plugin in a given
120 * library. (This simply calls the vampGetPluginDescriptor function in
121 * that library with the given plugin index and returns the result.)
122 */
123 extern const VampPluginDescriptor *vhGetPluginDescriptor(vhLibrary library,
124 int plugin);
125
126 /**
127 * Unload a plugin library. Do not do this while any of its plugins
128 * are still in use.
129 */
130 extern void vhUnloadLibrary(vhLibrary);
131
132 #ifdef __cplusplus
133 }
134 #endif
135
136 #endif