Chris@58: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@58: Chris@58: /* Chris@58: Sonic Visualiser Chris@58: An audio file viewer and annotation editor. Chris@58: Centre for Digital Music, Queen Mary, University of London. Chris@58: This file copyright 2006 Chris Cannam. Chris@58: Chris@58: This program is free software; you can redistribute it and/or Chris@58: modify it under the terms of the GNU General Public License as Chris@58: published by the Free Software Foundation; either version 2 of the Chris@58: License, or (at your option) any later version. See the file Chris@58: COPYING included with this distribution for more information. Chris@58: */ Chris@58: Chris@58: #ifndef _FEATURE_EXTRACTION_PLUGIN_ADAPTER_H_ Chris@58: #define _FEATURE_EXTRACTION_PLUGIN_ADAPTER_H_ Chris@58: Chris@58: #include "api/svp.h" Chris@58: #include "FeatureExtractionPlugin.h" Chris@58: Chris@58: #include Chris@58: Chris@60: class FeatureExtractionPluginAdapterBase Chris@58: { Chris@58: public: Chris@60: virtual ~FeatureExtractionPluginAdapterBase(); Chris@60: const SVPPluginDescriptor *getDescriptor(); Chris@58: Chris@58: protected: Chris@60: FeatureExtractionPluginAdapterBase(); Chris@60: Chris@60: virtual FeatureExtractionPlugin *createPlugin(float inputSampleRate) = 0; Chris@60: Chris@58: static SVPPluginHandle svpInstantiate(const SVPPluginDescriptor *desc, Chris@60: float inputSampleRate); Chris@58: Chris@60: static void svpCleanup(SVPPluginHandle handle); Chris@58: Chris@58: static int svpInitialise(SVPPluginHandle handle, unsigned int channels, Chris@60: unsigned int stepSize, unsigned int blockSize); Chris@58: Chris@60: static void svpReset(SVPPluginHandle handle); Chris@58: Chris@60: static float svpGetParameter(SVPPluginHandle handle, int param); Chris@60: static void svpSetParameter(SVPPluginHandle handle, int param, float value); Chris@58: Chris@60: static unsigned int svpGetCurrentProgram(SVPPluginHandle handle); Chris@60: static void svpSelectProgram(SVPPluginHandle handle, unsigned int program); Chris@58: Chris@60: static unsigned int svpGetPreferredStepSize(SVPPluginHandle handle); Chris@60: static unsigned int svpGetPreferredBlockSize(SVPPluginHandle handle); Chris@60: static unsigned int svpGetMinChannelCount(SVPPluginHandle handle); Chris@60: static unsigned int svpGetMaxChannelCount(SVPPluginHandle handle); Chris@58: Chris@60: static unsigned int svpGetOutputCount(SVPPluginHandle handle); Chris@58: Chris@58: static SVPOutputDescriptor *svpGetOutputDescriptor(SVPPluginHandle handle, Chris@60: unsigned int i); Chris@58: Chris@60: static void svpReleaseOutputDescriptor(SVPOutputDescriptor *desc); Chris@58: Chris@58: static SVPFeatureList **svpProcess(SVPPluginHandle handle, Chris@58: float **inputBuffers, Chris@58: int sec, Chris@60: int nsec); Chris@58: Chris@60: static SVPFeatureList **svpGetRemainingFeatures(SVPPluginHandle handle); Chris@58: Chris@60: static void svpReleaseFeatureSet(SVPFeatureList **fs); Chris@58: Chris@60: void cleanup(FeatureExtractionPlugin *plugin); Chris@60: void checkOutputMap(FeatureExtractionPlugin *plugin); Chris@60: unsigned int getOutputCount(FeatureExtractionPlugin *plugin); Chris@60: SVPOutputDescriptor *getOutputDescriptor(FeatureExtractionPlugin *plugin, Chris@60: unsigned int i); Chris@60: SVPFeatureList **process(FeatureExtractionPlugin *plugin, Chris@60: float **inputBuffers, Chris@60: int sec, int nsec); Chris@60: SVPFeatureList **getRemainingFeatures(FeatureExtractionPlugin *plugin); Chris@60: SVPFeatureList **convertFeatures(const FeatureExtractionPlugin::FeatureSet &features); Chris@60: Chris@60: typedef std::map AdapterMap; Chris@60: static AdapterMap m_adapterMap; Chris@60: static FeatureExtractionPluginAdapterBase *lookupAdapter(SVPPluginHandle); Chris@58: Chris@60: bool m_populated; Chris@58: SVPPluginDescriptor m_descriptor; Chris@58: FeatureExtractionPlugin::ParameterList m_parameters; Chris@58: FeatureExtractionPlugin::ProgramList m_programs; Chris@60: Chris@60: typedef std::map OutputMap; Chris@58: OutputMap m_pluginOutputs; Chris@58: Chris@60: typedef std::map FeatureBufferMap; Chris@58: FeatureBufferMap m_pluginFeatures; Chris@58: }; Chris@58: Chris@58: template Chris@60: class FeatureExtractionPluginAdapter : public FeatureExtractionPluginAdapterBase Chris@60: { Chris@60: public: Chris@60: FeatureExtractionPluginAdapter() : FeatureExtractionPluginAdapterBase() { } Chris@60: ~FeatureExtractionPluginAdapter() { } Chris@60: Chris@60: protected: Chris@60: FeatureExtractionPlugin *createPlugin(float inputSampleRate) { Chris@60: Plugin *plugin = new Plugin(inputSampleRate); Chris@60: FeatureExtractionPlugin *fep = Chris@60: dynamic_cast(plugin); Chris@60: if (!fep) { Chris@60: std::cerr << "ERROR: FeatureExtractionPlugin::createPlugin: " Chris@60: << "Plugin is not a feature extraction plugin" Chris@60: << std::endl; Chris@60: delete plugin; Chris@60: return 0; Chris@60: } Chris@60: return fep; Chris@60: } Chris@60: }; Chris@60: Chris@58: Chris@58: #endif Chris@58: