diff src/PiperAdapter.h @ 152:c43d2e93153f

Provide category and output static info
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 13 Jun 2017 17:25:47 +0100
parents c0256c2debf5
children
line wrap: on
line diff
--- a/src/PiperAdapter.h	Tue Mar 14 16:07:46 2017 +0000
+++ b/src/PiperAdapter.h	Tue Jun 13 17:25:47 2017 +0100
@@ -38,6 +38,7 @@
 #include "vamp-support/PluginStaticData.h"
 #include "vamp-support/PluginConfiguration.h"
 #include "vamp-support/RequestResponse.h"
+#include "vamp-support/StaticOutputDescriptor.h"
 
 #include <vamp-hostsdk/PluginInputDomainAdapter.h>
 #include <vamp-hostsdk/PluginBufferingAdapter.h>
@@ -62,7 +63,12 @@
     const int adaptBufferSize = 0x04;
 
 protected:
-    PiperAdapterBase(std::string libname) : m_soname(libname) { }
+    PiperAdapterBase(std::string libname,
+                     std::vector<std::string> category = {},
+                     piper_vamp::StaticOutputInfo staticOutputInfo = {}) :
+        m_soname(libname),
+        m_category(category),
+        m_staticOutputInfo(staticOutputInfo) { }
     
 public:
     virtual std::string getLibraryName() const override {
@@ -73,8 +79,9 @@
         Vamp::Plugin *p = createPlugin(44100.f);
 	auto data = piper_vamp::PluginStaticData::fromPlugin
 	    (m_soname + ":" + p->getIdentifier(),
-	     {}, //!!! todo: category - tricky one that
+             m_category,
 	     p);
+        data.staticOutputInfo = m_staticOutputInfo;
         delete p;
         return data;
     }
@@ -107,8 +114,9 @@
 
 	response.staticData = piper_vamp::PluginStaticData::fromPlugin
 	    (m_soname + ":" + p->getIdentifier(),
-	     {}, //!!! todo: category - tricky one that
+             m_category,
 	     p);
+        response.staticData.staticOutputInfo = m_staticOutputInfo;
 
 	int defaultChannels = 0;
 	if (p->getMinChannelCount() == p->getMaxChannelCount()) {
@@ -141,13 +149,18 @@
     
 private:
     std::string m_soname;
+    std::vector<std::string> m_category;
+    piper_vamp::StaticOutputInfo m_staticOutputInfo;
 };
 
 template <typename P>
 class PiperAdapter : public PiperAdapterBase<P>
 {
 public:
-    PiperAdapter(std::string libname) : PiperAdapterBase<P>(libname) { }
+    PiperAdapter(std::string libname,
+                 std::vector<std::string> category = {},
+                 piper_vamp::StaticOutputInfo staticOutputInfo = {}) :
+        PiperAdapterBase<P>(libname, category, staticOutputInfo) { }
     
     virtual Vamp::Plugin *createPlugin(float inputSampleRate) const override {
         return new P(inputSampleRate);