Mercurial > hg > svcore
diff transform/FeatureExtractionModelTransformer.h @ 874:862fe7b20df7 tony_integration
Merge from tonioni branch
author | Chris Cannam |
---|---|
date | Tue, 28 Jan 2014 15:01:54 +0000 |
parents | 13803edd513d |
children | 47aa3aeb687b |
line wrap: on
line diff
--- a/transform/FeatureExtractionModelTransformer.h Wed Dec 11 21:40:27 2013 +0000 +++ b/transform/FeatureExtractionModelTransformer.h Tue Jan 28 15:01:54 2014 +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" @@ -33,22 +33,32 @@ public: FeatureExtractionModelTransformer(Input input, const Transform &transform); + + // 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); + 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; - 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); @@ -57,16 +67,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; + } } };