annotate plugin/transform/TransformFactory.h @ 350:d7c41483af8f

* Merge from transforms branch -- switch over to using Transform object properly
author Chris Cannam
date Fri, 07 Dec 2007 16:47:31 +0000
parents 13e5870040e6
children 7263e37d8913
rev   line source
Chris@330 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@330 2
Chris@330 3 /*
Chris@330 4 Sonic Visualiser
Chris@330 5 An audio file viewer and annotation editor.
Chris@330 6 Centre for Digital Music, Queen Mary, University of London.
Chris@330 7 This file copyright 2006-2007 Chris Cannam and QMUL.
Chris@330 8
Chris@330 9 This program is free software; you can redistribute it and/or
Chris@330 10 modify it under the terms of the GNU General Public License as
Chris@330 11 published by the Free Software Foundation; either version 2 of the
Chris@330 12 License, or (at your option) any later version. See the file
Chris@330 13 COPYING included with this distribution for more information.
Chris@330 14 */
Chris@330 15
Chris@330 16 #ifndef _TRANSFORM_FACTORY_H_
Chris@330 17 #define _TRANSFORM_FACTORY_H_
Chris@330 18
Chris@330 19 #include "TransformDescription.h"
Chris@330 20
Chris@350 21 #include <vamp-sdk/Plugin.h>
Chris@350 22
Chris@330 23 #include <map>
Chris@330 24 #include <set>
Chris@330 25
Chris@330 26 class TransformFactory : public QObject
Chris@330 27 {
Chris@330 28 Q_OBJECT
Chris@330 29
Chris@330 30 public:
Chris@330 31 virtual ~TransformFactory();
Chris@330 32
Chris@330 33 static TransformFactory *getInstance();
Chris@330 34
Chris@350 35 TransformList getAllTransformDescriptions();
Chris@350 36 TransformDescription getTransformDescription(TransformId id);
Chris@330 37
Chris@330 38 std::vector<QString> getAllTransformTypes();
Chris@330 39 std::vector<QString> getTransformCategories(QString transformType);
Chris@330 40 std::vector<QString> getTransformMakers(QString transformType);
Chris@330 41
Chris@330 42 /**
Chris@330 43 * Return true if the given transform is known.
Chris@330 44 */
Chris@330 45 bool haveTransform(TransformId identifier);
Chris@330 46
Chris@330 47 /**
Chris@350 48 * A single transform ID can lead to many possible Transforms,
Chris@350 49 * with different parameters and execution context settings.
Chris@350 50 * Return the default one for the given transform.
Chris@350 51 */
Chris@350 52 Transform getDefaultTransformFor(TransformId identifier, size_t rate = 0);
Chris@350 53
Chris@350 54 /**
Chris@330 55 * Full name of a transform, suitable for putting on a menu.
Chris@330 56 */
Chris@330 57 QString getTransformName(TransformId identifier);
Chris@330 58
Chris@330 59 /**
Chris@330 60 * Brief but friendly name of a transform, suitable for use
Chris@330 61 * as the name of the output layer.
Chris@330 62 */
Chris@330 63 QString getTransformFriendlyName(TransformId identifier);
Chris@330 64
Chris@330 65 QString getTransformUnits(TransformId identifier);
Chris@330 66
Chris@350 67 Vamp::Plugin::InputDomain getTransformInputDomain(TransformId identifier);
Chris@350 68
Chris@330 69 /**
Chris@330 70 * Return true if the transform has any configurable parameters,
Chris@330 71 * i.e. if getConfigurationForTransform can ever return a non-trivial
Chris@330 72 * (not equivalent to empty) configuration string.
Chris@330 73 */
Chris@330 74 bool isTransformConfigurable(TransformId identifier);
Chris@330 75
Chris@330 76 /**
Chris@330 77 * If the transform has a prescribed number or range of channel
Chris@330 78 * inputs, return true and set minChannels and maxChannels to the
Chris@330 79 * minimum and maximum number of channel inputs the transform can
Chris@330 80 * accept. Return false if it doesn't care.
Chris@330 81 */
Chris@330 82 bool getTransformChannelRange(TransformId identifier,
Chris@330 83 int &minChannels, int &maxChannels);
Chris@332 84
Chris@332 85 /**
Chris@332 86 * Set the plugin parameters, program and configuration strings on
Chris@332 87 * the given Transform object from the given plugin instance.
Chris@332 88 * Note that no check is made whether the plugin is actually the
Chris@332 89 * "correct" one for the transform.
Chris@332 90 */
Chris@332 91 void setParametersFromPlugin(Transform &transform, Vamp::PluginBase *plugin);
Chris@332 92
Chris@332 93 /**
Chris@350 94 * Set the parameters, program and configuration strings on the
Chris@350 95 * given plugin from the given Transform object.
Chris@350 96 */
Chris@350 97 void setPluginParameters(const Transform &transform, Vamp::PluginBase *plugin);
Chris@350 98
Chris@350 99 /**
Chris@332 100 * If the given Transform object has no processing step and block
Chris@332 101 * sizes set, set them to appropriate defaults for the given
Chris@332 102 * plugin.
Chris@332 103 */
Chris@332 104 void makeContextConsistentWithPlugin(Transform &transform, Vamp::PluginBase *plugin);
Chris@332 105
Chris@332 106 /**
Chris@350 107 * Retrieve a <plugin ... /> XML fragment that describes the
Chris@350 108 * plugin parameters, program and configuration data for the given
Chris@350 109 * transform.
Chris@350 110 *
Chris@350 111 * This function is provided for backward compatibility only. Use
Chris@350 112 * Transform::toXml where compatibility with PluginXml
Chris@350 113 * descriptions of transforms is not required.
Chris@332 114 */
Chris@350 115 QString getPluginConfigurationXml(const Transform &transform);
Chris@350 116
Chris@350 117 /**
Chris@350 118 * Set the plugin parameters, program and configuration strings on
Chris@350 119 * the given Transform object from the given <plugin ... /> XML
Chris@350 120 * fragment.
Chris@350 121 *
Chris@350 122 * This function is provided for backward compatibility only. Use
Chris@350 123 * Transform(QString) where compatibility with PluginXml
Chris@350 124 * descriptions of transforms is not required.
Chris@350 125 */
Chris@350 126 void setParametersFromPluginConfigurationXml(Transform &transform,
Chris@350 127 QString xml);
Chris@332 128
Chris@330 129 protected:
Chris@330 130 typedef std::map<TransformId, TransformDescription> TransformDescriptionMap;
Chris@330 131 TransformDescriptionMap m_transforms;
Chris@330 132
Chris@330 133 void populateTransforms();
Chris@330 134 void populateFeatureExtractionPlugins(TransformDescriptionMap &);
Chris@330 135 void populateRealTimePlugins(TransformDescriptionMap &);
Chris@330 136
Chris@350 137 Vamp::PluginBase *instantiatePluginFor(TransformId id, size_t rate);
Chris@350 138 Vamp::Plugin *downcastVampPlugin(Vamp::PluginBase *);
Chris@350 139
Chris@330 140 static TransformFactory *m_instance;
Chris@330 141 };
Chris@330 142
Chris@330 143
Chris@330 144 #endif