annotate vamp-hostsdk/PluginWrapper.h @ 263:4454843ff384

* OK, we're going to have to place the host stuff in its own namespace too. Otherwise our new SV build on OSX fails to load old plugins because they pull in the host namespace PluginBase and thus report the wrong Vamp version... *sigh*
author cannam
date Thu, 20 Nov 2008 15:01:30 +0000
parents 3cf5bd155e5b
children c97e70ed5abc
rev   line source
cannam@233 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
cannam@233 2
cannam@233 3 /*
cannam@233 4 Vamp
cannam@233 5
cannam@233 6 An API for audio analysis and feature extraction plugins.
cannam@233 7
cannam@233 8 Centre for Digital Music, Queen Mary, University of London.
cannam@233 9 Copyright 2006-2007 Chris Cannam and QMUL.
cannam@233 10
cannam@233 11 Permission is hereby granted, free of charge, to any person
cannam@233 12 obtaining a copy of this software and associated documentation
cannam@233 13 files (the "Software"), to deal in the Software without
cannam@233 14 restriction, including without limitation the rights to use, copy,
cannam@233 15 modify, merge, publish, distribute, sublicense, and/or sell copies
cannam@233 16 of the Software, and to permit persons to whom the Software is
cannam@233 17 furnished to do so, subject to the following conditions:
cannam@233 18
cannam@233 19 The above copyright notice and this permission notice shall be
cannam@233 20 included in all copies or substantial portions of the Software.
cannam@233 21
cannam@233 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
cannam@233 23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cannam@233 24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
cannam@233 25 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
cannam@233 26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
cannam@233 27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
cannam@233 28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cannam@233 29
cannam@233 30 Except as contained in this notice, the names of the Centre for
cannam@233 31 Digital Music; Queen Mary, University of London; and Chris Cannam
cannam@233 32 shall not be used in advertising or otherwise to promote the sale,
cannam@233 33 use or other dealings in this Software without prior written
cannam@233 34 authorization.
cannam@233 35 */
cannam@233 36
cannam@233 37 #ifndef _VAMP_PLUGIN_WRAPPER_H_
cannam@233 38 #define _VAMP_PLUGIN_WRAPPER_H_
cannam@233 39
cannam@243 40 #include "hostguard.h"
cannam@233 41 #include <vamp-hostsdk/Plugin.h>
cannam@233 42
cannam@263 43 _VAMP_SDK_HOSTSPACE_BEGIN(PluginWrapper.h)
cannam@263 44
cannam@233 45 namespace Vamp {
cannam@233 46
cannam@233 47 namespace HostExt {
cannam@233 48
cannam@233 49 /**
cannam@233 50 * \class PluginWrapper PluginWrapper.h <vamp-hostsdk/PluginWrapper.h>
cannam@233 51 *
cannam@233 52 * PluginWrapper is a simple base class for adapter plugins. It takes
cannam@233 53 * a pointer to a "to be wrapped" Vamp plugin on construction, and
cannam@233 54 * provides implementations of all the Vamp plugin methods that simply
cannam@233 55 * delegate through to the wrapped plugin. A subclass can therefore
cannam@233 56 * override only the methods that are meaningful for the particular
cannam@233 57 * adapter.
cannam@233 58 *
cannam@233 59 * \note This class was introduced in version 1.1 of the Vamp plugin SDK.
cannam@233 60 */
cannam@233 61
cannam@233 62 class PluginWrapper : public Plugin
cannam@233 63 {
cannam@233 64 public:
cannam@233 65 virtual ~PluginWrapper();
cannam@233 66
cannam@233 67 bool initialise(size_t channels, size_t stepSize, size_t blockSize);
cannam@233 68 void reset();
cannam@233 69
cannam@233 70 InputDomain getInputDomain() const;
cannam@233 71
cannam@233 72 unsigned int getVampApiVersion() const;
cannam@233 73 std::string getIdentifier() const;
cannam@233 74 std::string getName() const;
cannam@233 75 std::string getDescription() const;
cannam@233 76 std::string getMaker() const;
cannam@233 77 int getPluginVersion() const;
cannam@233 78 std::string getCopyright() const;
cannam@233 79
cannam@233 80 ParameterList getParameterDescriptors() const;
cannam@233 81 float getParameter(std::string) const;
cannam@233 82 void setParameter(std::string, float);
cannam@233 83
cannam@233 84 ProgramList getPrograms() const;
cannam@233 85 std::string getCurrentProgram() const;
cannam@233 86 void selectProgram(std::string);
cannam@233 87
cannam@233 88 size_t getPreferredStepSize() const;
cannam@233 89 size_t getPreferredBlockSize() const;
cannam@233 90
cannam@233 91 size_t getMinChannelCount() const;
cannam@233 92 size_t getMaxChannelCount() const;
cannam@233 93
cannam@233 94 OutputList getOutputDescriptors() const;
cannam@233 95
cannam@233 96 FeatureSet process(const float *const *inputBuffers, RealTime timestamp);
cannam@233 97
cannam@233 98 FeatureSet getRemainingFeatures();
cannam@233 99
cannam@233 100 /**
cannam@233 101 * Return a pointer to the plugin wrapper of type WrapperType
cannam@233 102 * surrounding this wrapper's plugin, if present.
cannam@233 103 *
cannam@233 104 * This is useful in situations where a plugin is wrapped by
cannam@233 105 * multiple different wrappers (one inside another) and the host
cannam@233 106 * wants to call some wrapper-specific function on one of the
cannam@233 107 * layers without having to care about the order in which they are
cannam@233 108 * wrapped. For example, the plugin returned by
cannam@233 109 * PluginLoader::loadPlugin may have more than one wrapper; if the
cannam@233 110 * host wanted to query or fine-tune some property of one of them,
cannam@233 111 * it would be hard to do so without knowing the order of the
cannam@233 112 * wrappers. This function therefore gives direct access to the
cannam@233 113 * wrapper of a particular type.
cannam@233 114 */
cannam@233 115 template <typename WrapperType>
cannam@233 116 WrapperType *getWrapper() {
cannam@233 117 WrapperType *w = dynamic_cast<WrapperType *>(this);
cannam@233 118 if (w) return w;
cannam@233 119 PluginWrapper *pw = dynamic_cast<PluginWrapper *>(m_plugin);
cannam@233 120 if (pw) return pw->getWrapper<WrapperType>();
cannam@233 121 return 0;
cannam@233 122 }
cannam@233 123
cannam@233 124 protected:
cannam@233 125 PluginWrapper(Plugin *plugin); // I take ownership of plugin
cannam@233 126 Plugin *m_plugin;
cannam@233 127 };
cannam@233 128
cannam@233 129 }
cannam@233 130
cannam@233 131 }
cannam@233 132
cannam@263 133 _VAMP_SDK_HOSTSPACE_END(PluginWrapper.h)
cannam@263 134
cannam@233 135 #endif