Mercurial > hg > svcore
diff transform/FeatureExtractionModelTransformer.h @ 851:c9846844ac11 tonioni
Merge branch tonioni_multi_transform
author | Chris Cannam |
---|---|
date | Mon, 02 Dec 2013 15:47:06 +0000 |
parents | dba8a02b0413 |
children | 13803edd513d |
line wrap: on
line diff
--- a/transform/FeatureExtractionModelTransformer.h Tue Nov 26 14:37:01 2013 +0000 +++ b/transform/FeatureExtractionModelTransformer.h Mon Dec 02 15:47:06 2013 +0000 @@ -13,8 +13,8 @@ COPYING included with this distribution for more information. */ -#ifndef _FEATURE_EXTRACTION_PLUGIN_TRANSFORMER_H_ -#define _FEATURE_EXTRACTION_PLUGIN_TRANSFORMER_H_ +#ifndef _FEATURE_EXTRACTION_MODEL_TRANSFORMER_H_ +#define _FEATURE_EXTRACTION_MODEL_TRANSFORMER_H_ #include "ModelTransformer.h" @@ -31,33 +31,43 @@ Q_OBJECT public: - enum PreferredOutputModel { - NoteOutputModel, - FlexiNoteOutputModel, - UndefinedOutputModel = 255 - }; + enum PreferredOutputModel { + NoteOutputModel, + FlexiNoteOutputModel, + UndefinedOutputModel = 255 + }; FeatureExtractionModelTransformer(Input input, const Transform &transform, - const PreferredOutputModel outputmodel); + const PreferredOutputModel outputmodel); + + // Obtain outputs for a set of transforms that all use the same + // plugin and input (but with different outputs). i.e. run the + // plugin once only and collect more than one output from it. + FeatureExtractionModelTransformer(Input input, + const Transforms &relatedTransforms, + const PreferredOutputModel outputmodel); virtual ~FeatureExtractionModelTransformer(); protected: + bool initialise(); + virtual void run(); Vamp::Plugin *m_plugin; - Vamp::Plugin::OutputDescriptor *m_descriptor; - int m_fixedRateFeatureNo; // to assign times to FixedSampleRate features - int m_outputNo; + std::vector<Vamp::Plugin::OutputDescriptor *> m_descriptors; // per transform + std::vector<int> m_fixedRateFeatureNos; // to assign times to FixedSampleRate features + std::vector<int> m_outputNos; PreferredOutputModel m_preferredOutputModel; - void createOutputModel(); + void createOutputModel(int n); - void addFeature(size_t blockFrame, + void addFeature(int n, + size_t blockFrame, const Vamp::Plugin::Feature &feature); - void setCompletion(int); + void setCompletion(int, int); void getFrames(int channelCount, long startFrame, long size, float **buffer); @@ -66,16 +76,21 @@ DenseTimeValueModel *getConformingInput(); - template <typename ModelClass> bool isOutput() { - return dynamic_cast<ModelClass *>(m_output) != 0; + template <typename ModelClass> bool isOutput(int n) { + return dynamic_cast<ModelClass *>(m_outputs[n]) != 0; } - template <typename ModelClass> ModelClass *getConformingOutput() { - ModelClass *mc = dynamic_cast<ModelClass *>(m_output); - if (!mc) { - std::cerr << "FeatureExtractionModelTransformer::getOutput: Output model not conformable" << std::endl; - } - return mc; + template <typename ModelClass> ModelClass *getConformingOutput(int n) { + if ((int)m_outputs.size() > n) { + ModelClass *mc = dynamic_cast<ModelClass *>(m_outputs[n]); + if (!mc) { + std::cerr << "FeatureExtractionModelTransformer::getOutput: Output model not conformable" << std::endl; + } + return mc; + } else { + std::cerr << "FeatureExtractionModelTransformer::getOutput: No such output number " << n << std::endl; + return 0; + } } };