annotate plugin/FeatureExtractionPluginAdapter.h @ 61:749b5521e082

* adjust for latency if the plugin reports it
author Chris Cannam
date Mon, 27 Mar 2006 16:15:19 +0000
parents 3086ff194ea0
children
rev   line source
Chris@58 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@58 2
Chris@58 3 /*
Chris@58 4 Sonic Visualiser
Chris@58 5 An audio file viewer and annotation editor.
Chris@58 6 Centre for Digital Music, Queen Mary, University of London.
Chris@58 7 This file copyright 2006 Chris Cannam.
Chris@58 8
Chris@58 9 This program is free software; you can redistribute it and/or
Chris@58 10 modify it under the terms of the GNU General Public License as
Chris@58 11 published by the Free Software Foundation; either version 2 of the
Chris@58 12 License, or (at your option) any later version. See the file
Chris@58 13 COPYING included with this distribution for more information.
Chris@58 14 */
Chris@58 15
Chris@58 16 #ifndef _FEATURE_EXTRACTION_PLUGIN_ADAPTER_H_
Chris@58 17 #define _FEATURE_EXTRACTION_PLUGIN_ADAPTER_H_
Chris@58 18
Chris@58 19 #include "api/svp.h"
Chris@58 20 #include "FeatureExtractionPlugin.h"
Chris@58 21
Chris@58 22 #include <map>
Chris@58 23
Chris@60 24 class FeatureExtractionPluginAdapterBase
Chris@58 25 {
Chris@58 26 public:
Chris@60 27 virtual ~FeatureExtractionPluginAdapterBase();
Chris@60 28 const SVPPluginDescriptor *getDescriptor();
Chris@58 29
Chris@58 30 protected:
Chris@60 31 FeatureExtractionPluginAdapterBase();
Chris@60 32
Chris@60 33 virtual FeatureExtractionPlugin *createPlugin(float inputSampleRate) = 0;
Chris@60 34
Chris@58 35 static SVPPluginHandle svpInstantiate(const SVPPluginDescriptor *desc,
Chris@60 36 float inputSampleRate);
Chris@58 37
Chris@60 38 static void svpCleanup(SVPPluginHandle handle);
Chris@58 39
Chris@58 40 static int svpInitialise(SVPPluginHandle handle, unsigned int channels,
Chris@60 41 unsigned int stepSize, unsigned int blockSize);
Chris@58 42
Chris@60 43 static void svpReset(SVPPluginHandle handle);
Chris@58 44
Chris@60 45 static float svpGetParameter(SVPPluginHandle handle, int param);
Chris@60 46 static void svpSetParameter(SVPPluginHandle handle, int param, float value);
Chris@58 47
Chris@60 48 static unsigned int svpGetCurrentProgram(SVPPluginHandle handle);
Chris@60 49 static void svpSelectProgram(SVPPluginHandle handle, unsigned int program);
Chris@58 50
Chris@60 51 static unsigned int svpGetPreferredStepSize(SVPPluginHandle handle);
Chris@60 52 static unsigned int svpGetPreferredBlockSize(SVPPluginHandle handle);
Chris@60 53 static unsigned int svpGetMinChannelCount(SVPPluginHandle handle);
Chris@60 54 static unsigned int svpGetMaxChannelCount(SVPPluginHandle handle);
Chris@58 55
Chris@60 56 static unsigned int svpGetOutputCount(SVPPluginHandle handle);
Chris@58 57
Chris@58 58 static SVPOutputDescriptor *svpGetOutputDescriptor(SVPPluginHandle handle,
Chris@60 59 unsigned int i);
Chris@58 60
Chris@60 61 static void svpReleaseOutputDescriptor(SVPOutputDescriptor *desc);
Chris@58 62
Chris@58 63 static SVPFeatureList **svpProcess(SVPPluginHandle handle,
Chris@58 64 float **inputBuffers,
Chris@58 65 int sec,
Chris@60 66 int nsec);
Chris@58 67
Chris@60 68 static SVPFeatureList **svpGetRemainingFeatures(SVPPluginHandle handle);
Chris@58 69
Chris@60 70 static void svpReleaseFeatureSet(SVPFeatureList **fs);
Chris@58 71
Chris@60 72 void cleanup(FeatureExtractionPlugin *plugin);
Chris@60 73 void checkOutputMap(FeatureExtractionPlugin *plugin);
Chris@60 74 unsigned int getOutputCount(FeatureExtractionPlugin *plugin);
Chris@60 75 SVPOutputDescriptor *getOutputDescriptor(FeatureExtractionPlugin *plugin,
Chris@60 76 unsigned int i);
Chris@60 77 SVPFeatureList **process(FeatureExtractionPlugin *plugin,
Chris@60 78 float **inputBuffers,
Chris@60 79 int sec, int nsec);
Chris@60 80 SVPFeatureList **getRemainingFeatures(FeatureExtractionPlugin *plugin);
Chris@60 81 SVPFeatureList **convertFeatures(const FeatureExtractionPlugin::FeatureSet &features);
Chris@60 82
Chris@60 83 typedef std::map<const void *, FeatureExtractionPluginAdapterBase *> AdapterMap;
Chris@60 84 static AdapterMap m_adapterMap;
Chris@60 85 static FeatureExtractionPluginAdapterBase *lookupAdapter(SVPPluginHandle);
Chris@58 86
Chris@60 87 bool m_populated;
Chris@58 88 SVPPluginDescriptor m_descriptor;
Chris@58 89 FeatureExtractionPlugin::ParameterList m_parameters;
Chris@58 90 FeatureExtractionPlugin::ProgramList m_programs;
Chris@60 91
Chris@60 92 typedef std::map<FeatureExtractionPlugin *,
Chris@60 93 FeatureExtractionPlugin::OutputList *> OutputMap;
Chris@58 94 OutputMap m_pluginOutputs;
Chris@58 95
Chris@60 96 typedef std::map<FeatureExtractionPlugin *,
Chris@60 97 SVPFeature ***> FeatureBufferMap;
Chris@58 98 FeatureBufferMap m_pluginFeatures;
Chris@58 99 };
Chris@58 100
Chris@58 101 template <typename Plugin>
Chris@60 102 class FeatureExtractionPluginAdapter : public FeatureExtractionPluginAdapterBase
Chris@60 103 {
Chris@60 104 public:
Chris@60 105 FeatureExtractionPluginAdapter() : FeatureExtractionPluginAdapterBase() { }
Chris@60 106 ~FeatureExtractionPluginAdapter() { }
Chris@60 107
Chris@60 108 protected:
Chris@60 109 FeatureExtractionPlugin *createPlugin(float inputSampleRate) {
Chris@60 110 Plugin *plugin = new Plugin(inputSampleRate);
Chris@60 111 FeatureExtractionPlugin *fep =
Chris@60 112 dynamic_cast<FeatureExtractionPlugin *>(plugin);
Chris@60 113 if (!fep) {
Chris@60 114 std::cerr << "ERROR: FeatureExtractionPlugin::createPlugin: "
Chris@60 115 << "Plugin is not a feature extraction plugin"
Chris@60 116 << std::endl;
Chris@60 117 delete plugin;
Chris@60 118 return 0;
Chris@60 119 }
Chris@60 120 return fep;
Chris@60 121 }
Chris@60 122 };
Chris@60 123
Chris@58 124
Chris@58 125 #endif
Chris@58 126