Mercurial > hg > svcore
diff plugin/transform/TransformerFactory.h @ 329:3179d8b29336
* Another incremental Transform update
author | Chris Cannam |
---|---|
date | Tue, 06 Nov 2007 17:08:11 +0000 |
parents | 21bd032ae791 |
children |
line wrap: on
line diff
--- a/plugin/transform/TransformerFactory.h Mon Nov 05 15:31:06 2007 +0000 +++ b/plugin/transform/TransformerFactory.h Tue Nov 06 17:08:11 2007 +0000 @@ -16,6 +16,8 @@ #ifndef _TRANSFORMER_FACTORY_H_ #define _TRANSFORMER_FACTORY_H_ +#include "TransformDescription.h" + #include "Transformer.h" #include "PluginTransformer.h" @@ -26,6 +28,10 @@ class AudioCallbackPlaySource; +//!!! split into TransformFactory (information about available +// transforms, create default Transform for each transform ID etc) and +// TransformerFactory (create Transformers to apply transforms) + class TransformerFactory : public QObject { Q_OBJECT @@ -35,43 +41,7 @@ static TransformerFactory *getInstance(); - // The identifier is intended to be computer-referenceable, and - // unique within the application. The name is intended to be - // human readable. In principle it doesn't have to be unique, but - // the factory will add suffixes to ensure that it is, all the - // same (just to avoid user confusion). The friendly name is a - // shorter version of the name. The type is also intended to be - // user-readable, for use in menus. - - struct TransformerDesc { - - TransformerDesc() { } - TransformerDesc(QString _type, QString _category, - TransformerId _identifier, QString _name, - QString _friendlyName, QString _description, - QString _maker, QString _units, bool _configurable) : - type(_type), category(_category), - identifier(_identifier), name(_name), - friendlyName(_friendlyName), description(_description), - maker(_maker), units(_units), configurable(_configurable) { } - - QString type; // e.g. feature extraction plugin - QString category; // e.g. time > onsets - TransformerId identifier; // e.g. vamp:vamp-aubio:aubioonset - QString name; // plugin's name if 1 output, else "name: output" - QString friendlyName; // short text for layer name - QString description; // sentence describing transform - QString maker; - QString units; - bool configurable; - - bool operator<(const TransformerDesc &od) const { - return (name < od.name); - }; - }; - typedef std::vector<TransformerDesc> TransformerList; - - TransformerList getAllTransformers(); + TransformList getAllTransforms(); std::vector<QString> getAllTransformerTypes(); @@ -85,7 +55,7 @@ * be cancelled. Audio callback play source may be used to * audition effects plugins, if provided. */ - Model *getConfigurationForTransformer(TransformerId identifier, + Model *getConfigurationForTransformer(TransformId identifier, const std::vector<Model *> &candidateInputModels, PluginTransformer::ExecutionContext &context, QString &configurationXml, @@ -97,7 +67,7 @@ * Get the default execution context for the given transform * and input model (if known). */ - PluginTransformer::ExecutionContext getDefaultContextForTransformer(TransformerId identifier, + PluginTransformer::ExecutionContext getDefaultContextForTransformer(TransformId identifier, Model *inputModel = 0); /** @@ -113,34 +83,34 @@ * The returned model is owned by the caller and must be deleted * when no longer needed. */ - Model *transform(TransformerId identifier, Model *inputModel, + Model *transform(TransformId identifier, Model *inputModel, const PluginTransformer::ExecutionContext &context, QString configurationXml = ""); /** * Return true if the given transform is known. */ - bool haveTransformer(TransformerId identifier); + bool haveTransformer(TransformId identifier); /** * Full name of a transform, suitable for putting on a menu. */ - QString getTransformerName(TransformerId identifier); + QString getTransformerName(TransformId identifier); /** * Brief but friendly name of a transform, suitable for use * as the name of the output layer. */ - QString getTransformerFriendlyName(TransformerId identifier); + QString getTransformerFriendlyName(TransformId identifier); - QString getTransformerUnits(TransformerId identifier); + QString getTransformerUnits(TransformId identifier); /** * Return true if the transform has any configurable parameters, * i.e. if getConfigurationForTransformer can ever return a non-trivial * (not equivalent to empty) configuration string. */ - bool isTransformerConfigurable(TransformerId identifier); + bool isTransformerConfigurable(TransformId identifier); /** * If the transform has a prescribed number or range of channel @@ -148,7 +118,7 @@ * minimum and maximum number of channel inputs the transform can * accept. Return false if it doesn't care. */ - bool getTransformerChannelRange(TransformerId identifier, + bool getTransformerChannelRange(TransformId identifier, int &minChannels, int &maxChannels); protected slots: @@ -157,30 +127,30 @@ void modelAboutToBeDeleted(Model *); protected: - Transformer *createTransformer(TransformerId identifier, Model *inputModel, + Transformer *createTransformer(TransformId identifier, Model *inputModel, const PluginTransformer::ExecutionContext &context, QString configurationXml); - struct TransformerIdent + struct TransformIdent { - TransformerId identifier; + TransformId identifier; QString configurationXml; }; - typedef std::map<TransformerId, QString> TransformerConfigurationMap; + typedef std::map<TransformId, QString> TransformerConfigurationMap; TransformerConfigurationMap m_lastConfigurations; - typedef std::map<TransformerId, TransformerDesc> TransformerDescriptionMap; - TransformerDescriptionMap m_transforms; + typedef std::map<TransformId, TransformDescription> TransformDescriptionMap; + TransformDescriptionMap m_transforms; typedef std::set<Transformer *> TransformerSet; TransformerSet m_runningTransformers; - void populateTransformers(); - void populateFeatureExtractionPlugins(TransformerDescriptionMap &); - void populateRealTimePlugins(TransformerDescriptionMap &); + void populateTransforms(); + void populateFeatureExtractionPlugins(TransformDescriptionMap &); + void populateRealTimePlugins(TransformDescriptionMap &); - bool getChannelRange(TransformerId identifier, + bool getChannelRange(TransformId identifier, Vamp::PluginBase *plugin, int &min, int &max); static TransformerFactory *m_instance;