annotate vamp-hostsdk/RequestResponse.h @ 434:e979a9c4ffb6 vampipe

Switch from Cross FFT with option of FFTW build, to KissFFT only (code bundled). This is much faster than the default build and simpler than managing two options.
author Chris Cannam
date Tue, 16 Aug 2016 16:04:09 +0100
parents 8dea61e4a7be
children d6262c77e5a5
rev   line source
Chris@423 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@423 2
Chris@423 3 /*
Chris@423 4 Vamp
Chris@423 5
Chris@423 6 An API for audio analysis and feature extraction plugins.
Chris@423 7
Chris@423 8 Centre for Digital Music, Queen Mary, University of London.
Chris@423 9 Copyright 2006-2016 Chris Cannam and QMUL.
Chris@423 10
Chris@423 11 Permission is hereby granted, free of charge, to any person
Chris@423 12 obtaining a copy of this software and associated documentation
Chris@423 13 files (the "Software"), to deal in the Software without
Chris@423 14 restriction, including without limitation the rights to use, copy,
Chris@423 15 modify, merge, publish, distribute, sublicense, and/or sell copies
Chris@423 16 of the Software, and to permit persons to whom the Software is
Chris@423 17 furnished to do so, subject to the following conditions:
Chris@423 18
Chris@423 19 The above copyright notice and this permission notice shall be
Chris@423 20 included in all copies or substantial portions of the Software.
Chris@423 21
Chris@423 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@423 23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@423 24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Chris@423 25 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
Chris@423 26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@423 27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@423 28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@423 29
Chris@423 30 Except as contained in this notice, the names of the Centre for
Chris@423 31 Digital Music; Queen Mary, University of London; and Chris Cannam
Chris@423 32 shall not be used in advertising or otherwise to promote the sale,
Chris@423 33 use or other dealings in this Software without prior written
Chris@423 34 authorization.
Chris@423 35 */
Chris@423 36
Chris@430 37 #ifndef VAMP_REQUEST_RESPONSE_H
Chris@430 38 #define VAMP_REQUEST_RESPONSE_H
Chris@423 39
Chris@423 40 #include "PluginStaticData.h"
Chris@423 41 #include "PluginConfiguration.h"
Chris@423 42
Chris@423 43 #include "hostguard.h"
Chris@423 44
Chris@423 45 #include <map>
Chris@423 46 #include <string>
Chris@423 47
Chris@429 48 _VAMP_SDK_HOSTSPACE_BEGIN(RequestResponse.h)
Chris@423 49
Chris@423 50 namespace Vamp {
Chris@423 51
Chris@423 52 class Plugin;
Chris@423 53
Chris@423 54 namespace HostExt {
Chris@423 55
Chris@423 56 /**
Chris@429 57 * \class LoadRequest RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@423 58 *
Chris@423 59 * Vamp::HostExt::LoadRequest is a structure containing the
Chris@423 60 * information necessary to load a plugin. When a request is made to
Chris@423 61 * load a plugin using a LoadRequest, the response is typically
Chris@423 62 * returned in a LoadResponse structure.
Chris@423 63 *
Chris@423 64 * \see LoadResponse
Chris@423 65 *
Chris@423 66 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@423 67 * SDK, along with the PluginLoader method that accepts this structure
Chris@423 68 * rather than accepting its elements individually.
Chris@423 69 */
Chris@423 70 struct LoadRequest
Chris@423 71 {
Chris@423 72 LoadRequest() : // invalid request by default
Chris@423 73 inputSampleRate(0.f),
Chris@423 74 adapterFlags(0) { }
Chris@425 75
Chris@425 76 /**
Chris@425 77 * PluginKey is a string type that is used to identify a plugin
Chris@425 78 * uniquely within the scope of "the current system". For further
Chris@425 79 * details \see PluginLoader::PluginKey.
Chris@425 80 */
Chris@425 81 typedef std::string PluginKey;
Chris@425 82
Chris@425 83 /**
Chris@425 84 * The identifying key for the plugin to be loaded.
Chris@425 85 */
Chris@425 86 PluginKey pluginKey;
Chris@425 87
Chris@425 88 /**
Chris@425 89 * Sample rate to be passed to the plugin's constructor.
Chris@425 90 */
Chris@423 91 float inputSampleRate;
Chris@425 92
Chris@425 93 /**
Chris@425 94 * A bitwise OR of the values in the PluginLoader::AdapterFlags
Chris@425 95 * enumeration, indicating under which circumstances an adapter
Chris@425 96 * should be used to wrap the original plugin. If adapterFlags is
Chris@425 97 * 0, no optional adapters will be used.
Chris@425 98 *
Chris@425 99 * \see PluginLoader::AdapterFlags, PluginLoader::loadPlugin
Chris@425 100 */
Chris@425 101 int adapterFlags;
Chris@423 102 };
Chris@423 103
Chris@423 104 /**
Chris@429 105 * \class LoadResponse RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@423 106 *
Chris@423 107 * Vamp::HostExt::LoadResponse is a structure containing the
Chris@423 108 * information returned by PluginLoader when asked to load a plugin
Chris@423 109 * using a LoadRequest.
Chris@423 110 *
Chris@423 111 * If the plugin could not be loaded, the plugin field will be 0.
Chris@423 112 *
Chris@423 113 * The caller takes ownership of the plugin contained here, which
Chris@423 114 * should be deleted (using the standard C++ delete keyword) after
Chris@423 115 * use.
Chris@423 116 *
Chris@423 117 * \see LoadRequest
Chris@423 118 *
Chris@423 119 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@423 120 * SDK, along with the PluginLoader method that returns this structure.
Chris@423 121 */
Chris@423 122 struct LoadResponse
Chris@423 123 {
Chris@423 124 LoadResponse() : // invalid (failed) response by default
Chris@423 125 plugin(0) { }
Chris@425 126
Chris@425 127 /**
Chris@425 128 * A pointer to the loaded plugin, or 0 if loading failed. Caller
Chris@425 129 * takes ownership of the plugin and must delete it after use.
Chris@425 130 */
Chris@423 131 Plugin *plugin;
Chris@425 132
Chris@425 133 /**
Chris@425 134 * The static data associated with the loaded plugin, that is, all
Chris@425 135 * information about it that does not depend on its configuration
Chris@425 136 * (parameters, programs, initialisation parameters). The contents
Chris@425 137 * of this structure are only valid if plugin is non-0.
Chris@426 138 *
Chris@426 139 * Much of the data in here is duplicated with the plugin itself.
Chris@425 140 */
Chris@423 141 PluginStaticData staticData;
Chris@425 142
Chris@425 143 /**
Chris@425 144 * The default configuration for this plugin, that is, default
Chris@425 145 * values for parameters etc. The contents of this structure are
Chris@425 146 * only valid if plugin is non-0.
Chris@425 147 */
Chris@423 148 PluginConfiguration defaultConfiguration;
Chris@423 149 };
Chris@423 150
Chris@430 151 /**
Chris@430 152 * \class ConfigurationRequest RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@430 153 *
Chris@430 154 * A wrapper for a plugin pointer and PluginConfiguration, bundling up
Chris@430 155 * the data needed to configure a plugin after it has been loaded.
Chris@430 156 *
Chris@430 157 * \see PluginConfiguration, ConfigurationResponse, LoadRequest, LoadResponse
Chris@431 158 *
Chris@431 159 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@431 160 * SDK, along with the PluginLoader method that returns this structure.
Chris@430 161 */
Chris@430 162 struct ConfigurationRequest
Chris@430 163 {
Chris@430 164 public:
Chris@430 165 ConfigurationRequest() : // invalid request by default
Chris@430 166 plugin(0) { }
Chris@430 167
Chris@430 168 Plugin *plugin;
Chris@430 169 PluginConfiguration configuration;
Chris@430 170 };
Chris@430 171
Chris@430 172 /**
Chris@430 173 * \class ConfigurationResponse RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@430 174 *
Chris@430 175 * The return value from a configuration request (i.e. setting the
Chris@430 176 * parameters and initialising the plugin). If the configuration was
Chris@430 177 * successful, the output list will contain the final
Chris@430 178 * post-initialisation output descriptors. If configuration failed,
Chris@430 179 * the output list will be empty.
Chris@430 180 *
Chris@430 181 * \see PluginConfiguration, ConfigurationRequest, LoadRequest, LoadResponse
Chris@431 182 *
Chris@431 183 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@431 184 * SDK, along with the PluginLoader method that returns this structure.
Chris@430 185 */
Chris@430 186 struct ConfigurationResponse
Chris@430 187 {
Chris@430 188 public:
Chris@430 189 ConfigurationResponse() // failed by default
Chris@430 190 { }
Chris@430 191
Chris@430 192 Plugin::OutputList outputs;
Chris@430 193 };
Chris@430 194
Chris@431 195 /**
Chris@431 196 * \class ProcessRequest RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@431 197 *
Chris@431 198 * A structure that bundles the necessary data for making a process
Chris@431 199 * call: plugin, input buffers, and timestamp. Caller retains
Chris@431 200 * ownership of the plugin, but the buffers are passed "by value" to
Chris@431 201 * avoid ownership concerns.
Chris@431 202 *
Chris@431 203 * \see Plugin::process()
Chris@431 204 *
Chris@431 205 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@431 206 * SDK, but it is not currently used by the SDK. It is supplied as a
Chris@431 207 * convenience for code using the SDK, and for symmetry with the load
Chris@431 208 * and configuration request structs.
Chris@431 209 */
Chris@431 210 struct ProcessRequest
Chris@431 211 {
Chris@431 212 public:
Chris@431 213 ProcessRequest() : // invalid by default
Chris@431 214 plugin(0) { }
Chris@431 215
Chris@431 216 Plugin *plugin;
Chris@432 217 std::vector<std::vector<float> > inputBuffers;
Chris@431 218 RealTime timestamp;
Chris@431 219 };
Chris@431 220
Chris@431 221 /**
Chris@431 222 * \class ProcessResponse RequestResponse.h <vamp-hostsdk/RequestResponse.h>
Chris@431 223 *
Chris@431 224 * A structure that bundles the data returned by a process call and by
Chris@431 225 * Plugin::getRemainingFeatures(). This is simply a FeatureSet
Chris@431 226 * wrapper, named for symmetry with the other request-response pairs.
Chris@431 227 *
Chris@431 228 * \see Plugin::process(), Plugin::getRemainingFeatures()
Chris@431 229 *
Chris@431 230 * \note This class was introduced in version 2.7 of the Vamp plugin
Chris@431 231 * SDK, but it is not currently used by the SDK. It is supplied as a
Chris@431 232 * convenience for code using the SDK, and for symmetry with the load
Chris@431 233 * and configuration request structs.
Chris@431 234 */
Chris@431 235 struct ProcessResponse
Chris@431 236 {
Chris@431 237 public:
Chris@431 238 ProcessResponse() // empty by default
Chris@431 239 { }
Chris@431 240
Chris@431 241 Plugin::FeatureSet features;
Chris@431 242 };
Chris@431 243
Chris@423 244 }
Chris@423 245
Chris@423 246 }
Chris@423 247
Chris@429 248 _VAMP_SDK_HOSTSPACE_END(RequestResponse.h)
Chris@423 249
Chris@423 250 #endif