changeset 283:6c9f10b8a53a

* Add skeleton
author cannam
date Thu, 23 Apr 2009 08:59:24 +0000
parents e0b7a35ea18e
children 1ed95908a397
files skeleton/MyPlugin.cpp skeleton/MyPlugin.h skeleton/plugins.cpp src/vamp-hostsdk/PluginInputDomainAdapter.cpp
diffstat 4 files changed, 310 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skeleton/MyPlugin.cpp	Thu Apr 23 08:59:24 2009 +0000
@@ -0,0 +1,210 @@
+
+// This is a skeleton file for use in creating your own plugin
+// libraries.  Replace MyPlugin and myPlugin throughout with the name
+// of your first plugin class, and fill in the gaps as appropriate.
+
+
+#include "MyPlugin.h"
+
+
+MyPlugin::MyPlugin(float inputSampleRate) :
+    Plugin(inputSampleRate)
+{
+}
+
+MyPlugin::~MyPlugin()
+{
+}
+
+string
+MyPlugin::getIdentifier() const
+{
+    return "myplugin";
+}
+
+string
+MyPlugin::getName() const
+{
+    return "My Plugin";
+}
+
+string
+MyPlugin::getDescription() const
+{
+    // Return something helpful here!
+    return "";
+}
+
+string
+MyPlugin::getMaker() const
+{
+    // Your name here
+    return "";
+}
+
+int
+MyPlugin::getPluginVersion() const
+{
+    // Increment this each time you release a version that behaves
+    // differently from the previous one
+    return 1;
+}
+
+string
+MyPlugin::getCopyright() const
+{
+    // This function is not ideally named.  It does not necessarily
+    // need to say who made the plugin -- getMaker does that -- but it
+    // should indicate the terms under which it is distributed.  For
+    // example, "Copyright (year). All Rights Reserved", or "GPL"
+    return "";
+}
+
+MyPlugin::InputDomain
+MyPlugin::getInputDomain() const
+{
+    return TimeDomain;
+}
+
+size_t
+MyPlugin::getPreferredBlockSize() const
+{
+    return 0; // 0 means "I can handle any block size"
+}
+
+size_t 
+MyPlugin::getPreferredStepSize() const
+{
+    return 0; // 0 means "anything sensible"; in practice this
+              // means the same as the block size for TimeDomain
+              // plugins, or half of it for FrequencyDomain plugins
+}
+
+size_t
+MyPlugin::getMinChannelCount() const
+{
+    return 1;
+}
+
+size_t
+MyPlugin::getMaxChannelCount() const
+{
+    return 1;
+}
+
+MyPlugin::ParameterList
+MyPlugin::getParameterDescriptors() const
+{
+    ParameterList list;
+
+    // If the plugin has no adjustable parameters, return an empty
+    // list here (and there's no need to provide implementations of
+    // getParameter and setParameter in that case either).
+
+    ParameterDescriptor d;
+    d.identifier = "parameter";
+    d.name = "Some Parameter";
+    d.description = "";
+    d.unit = "";
+    d.minValue = 0;
+    d.maxValue = 10;
+    d.defaultValue = 5;
+    d.isQuantized = false;
+    list.push_back(d);
+
+    return list;
+}
+
+float
+MyPlugin::getParameter(string identifier) const
+{
+    if (identifier == "parameter") {
+        return 5; // return the ACTUAL current value of your parameter here!
+    }
+    return 0;
+}
+
+void
+MyPlugin::setParameter(string identifier, float value) 
+{
+    if (identifier == "parameter") {
+        // set the actual value of your parameter
+    }
+}
+
+MyPlugin::ProgramList
+MyPlugin::getPrograms() const
+{
+    ProgramList list;
+
+    // If you have no programs, return an empty list (or simply don't
+    // implement this function or getCurrentProgram/selectProgram)
+
+    return list;
+}
+
+string
+MyPlugin::getCurrentProgram() const
+{
+    return ""; // no programs
+}
+
+void
+MyPlugin::selectProgram(string name)
+{
+}
+
+MyPlugin::OutputList
+MyPlugin::getOutputDescriptors() const
+{
+    OutputList list;
+
+    // See OutputDescriptor documentation for the possibilities here.
+    // Every plugin must have at least one output.
+
+    OutputDescriptor d;
+    d.identifier = "output";
+    d.name = "My Output";
+    d.description = "";
+    d.unit = "";
+    d.hasFixedBinCount = true;
+    d.binCount = 1;
+    d.hasKnownExtents = false;
+    d.isQuantized = false;
+    d.sampleType = OutputDescriptor::OneSamplePerStep;
+    d.hasDuration = false;
+    list.push_back(d);
+
+    return list;
+}
+
+bool
+MyPlugin::initialise(size_t channels, size_t stepSize, size_t blockSize)
+{
+    if (channels < getMinChannelCount() ||
+	channels > getMaxChannelCount()) return false;
+
+    // Real initialisation work goes here!
+
+    return true;
+}
+
+void
+MyPlugin::reset()
+{
+    // Clear buffers, reset stored values, etc
+}
+
+MyPlugin::FeatureSet
+MyPlugin::process(const float *const *inputBuffers, Vamp::RealTime timestamp)
+{
+    // Do actual work!
+    return FeatureSet();
+}
+
+MyPlugin::FeatureSet
+MyPlugin::getRemainingFeatures()
+{
+    return FeatureSet();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skeleton/MyPlugin.h	Thu Apr 23 08:59:24 2009 +0000
@@ -0,0 +1,59 @@
+
+// This is a skeleton file for use in creating your own plugin
+// libraries.  Replace MyPlugin and myPlugin throughout with the name
+// of your first plugin class, and fill in the gaps as appropriate.
+
+
+// Remember to use a different guard symbol in each header!
+#ifndef _MY_PLUGIN_H_
+#define _MY_PLUGIN_H_
+
+#include <vamp-sdk/Plugin.h>
+
+using std::string;
+
+
+class MyPlugin : public Vamp::Plugin
+{
+public:
+    MyPlugin(float inputSampleRate);
+    virtual ~MyPlugin();
+
+    string getIdentifier() const;
+    string getName() const;
+    string getDescription() const;
+    string getMaker() const;
+    int getPluginVersion() const;
+    string getCopyright() const;
+
+    InputDomain getInputDomain() const;
+    size_t getPreferredBlockSize() const;
+    size_t getPreferredStepSize() const;
+    size_t getMinChannelCount() const;
+    size_t getMaxChannelCount() const;
+
+    ParameterList getParameterDescriptors() const;
+    float getParameter(string identifier) const;
+    void setParameter(string identifier, float value);
+
+    ProgramList getPrograms() const;
+    string getCurrentProgram() const;
+    void selectProgram(string name);
+
+    OutputList getOutputDescriptors() const;
+
+    bool initialise(size_t channels, size_t stepSize, size_t blockSize);
+    void reset();
+
+    FeatureSet process(const float *const *inputBuffers,
+                       Vamp::RealTime timestamp);
+
+    FeatureSet getRemainingFeatures();
+
+protected:
+    // plugin-specific data and methods go here
+};
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skeleton/plugins.cpp	Thu Apr 23 08:59:24 2009 +0000
@@ -0,0 +1,37 @@
+
+// This is a skeleton file for use in creating your own plugin
+// libraries.  Replace MyPlugin and myPlugin throughout with the name
+// of your first plugin class, and fill in the gaps as appropriate.
+
+
+#include <vamp/vamp.h>
+#include <vamp-sdk/PluginAdapter.h>
+
+#include "MyPlugin.h"
+
+
+// Declare one static adapter here for each plugin class in this library.
+
+static Vamp::PluginAdapter<MyPlugin> myPluginAdapter;
+
+
+// This is the entry-point for the library, and the only function that
+// needs to be publicly exported.
+
+const VampPluginDescriptor *
+vampGetPluginDescriptor(unsigned int version, unsigned int index)
+{
+    if (version < 1) return 0;
+
+    // Return a different plugin adaptor's descriptor for each index,
+    // and return 0 for the first index after you run out of plugins.
+    // (That's how the host finds out how many plugins are in this
+    // library.)
+
+    switch (index) {
+    case  0: return myPluginAdapter.getDescriptor();
+    default: return 0;
+    }
+}
+
+
--- a/src/vamp-hostsdk/PluginInputDomainAdapter.cpp	Fri Mar 20 15:49:59 2009 +0000
+++ b/src/vamp-hostsdk/PluginInputDomainAdapter.cpp	Thu Apr 23 08:59:24 2009 +0000
@@ -222,12 +222,12 @@
     }
 
     if (blockSize < 2) {
-        std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: blocksize < 2 not supported" << std::endl;
+        std::cerr << "ERROR: PluginInputDomainAdapter::initialise: blocksize < 2 not supported" << std::endl;
         return false;
     }                
         
     if (blockSize & (blockSize-1)) {
-        std::cerr << "ERROR: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: non-power-of-two\nblocksize " << blockSize << " not supported" << std::endl;
+        std::cerr << "ERROR: PluginInputDomainAdapter::initialise: non-power-of-two\nblocksize " << blockSize << " not supported" << std::endl;
         return false;
     }
 
@@ -311,7 +311,7 @@
 {
     if (blockSize < 2) {
 
-        std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: blocksize < 2 not" << std::endl
+        std::cerr << "WARNING: PluginInputDomainAdapter::initialise: blocksize < 2 not" << std::endl
                   << "supported, increasing from " << blockSize << " to 2" << std::endl;
         blockSize = 2;
         
@@ -340,7 +340,7 @@
             nearest = nearest*2;
         }
         
-        std::cerr << "WARNING: Vamp::HostExt::PluginInputDomainAdapter::Impl::initialise: non-power-of-two\nblocksize " << blockSize << " not supported, using blocksize " << nearest << " instead" << std::endl;
+        std::cerr << "WARNING: PluginInputDomainAdapter::initialise: non-power-of-two\nblocksize " << blockSize << " not supported, using blocksize " << nearest << " instead" << std::endl;
         blockSize = nearest;
 
 #endif