Chris@320: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@320: Chris@320: /* Chris@320: Sonic Visualiser Chris@320: An audio file viewer and annotation editor. Chris@320: Centre for Digital Music, Queen Mary, University of London. Chris@320: This file copyright 2006 Chris Cannam and QMUL. Chris@320: Chris@320: This program is free software; you can redistribute it and/or Chris@320: modify it under the terms of the GNU General Public License as Chris@320: published by the Free Software Foundation; either version 2 of the Chris@320: License, or (at your option) any later version. See the file Chris@320: COPYING included with this distribution for more information. Chris@320: */ Chris@320: Chris@331: #ifndef _MODEL_TRANSFORMER_FACTORY_H_ Chris@331: #define _MODEL_TRANSFORMER_FACTORY_H_ Chris@320: Chris@331: #include "Transform.h" Chris@329: #include "TransformDescription.h" Chris@329: Chris@331: #include "ModelTransformer.h" Chris@331: Chris@320: #include Chris@320: #include Chris@320: Chris@320: namespace Vamp { class PluginBase; } Chris@320: Chris@320: class AudioCallbackPlaySource; Chris@320: Chris@331: class ModelTransformerFactory : public QObject Chris@320: { Chris@320: Q_OBJECT Chris@320: Chris@320: public: Chris@331: virtual ~ModelTransformerFactory(); Chris@320: Chris@331: static ModelTransformerFactory *getInstance(); Chris@320: Chris@320: /** Chris@350: * Fill out the configuration for the given transform (by asking Chris@350: * the user, most likely). Returns the selected input model and Chris@350: * channel if the transform is acceptable, or an input with a null Chris@350: * model if the operation should be cancelled. Audio callback Chris@350: * play source may be used to audition effects plugins, if Chris@350: * provided. Chris@320: */ Chris@350: ModelTransformer::Input Chris@350: getConfigurationForTransform(Transform &transform, Chris@350: const std::vector &candidateInputModels, Chris@350: Model *defaultInputModel, Chris@350: AudioCallbackPlaySource *source = 0, Chris@350: size_t startFrame = 0, Chris@350: size_t duration = 0); Chris@350: Chris@320: /** Chris@320: * Get the default execution context for the given transform Chris@320: * and input model (if known). Chris@320: */ Chris@350: /*!!! Chris@329: PluginTransformer::ExecutionContext getDefaultContextForTransformer(TransformId identifier, Chris@332: Model *inputModel = 0); Chris@350: */ Chris@320: /** Chris@320: * Return the output model resulting from applying the named Chris@320: * transform to the given input model. The transform may still be Chris@320: * working in the background when the model is returned; check the Chris@320: * output model's isReady completion status for more details. Chris@320: * Chris@320: * If the transform is unknown or the input model is not an Chris@320: * appropriate type for the given transform, or if some other Chris@320: * problem occurs, return 0. Chris@320: * Chris@320: * The returned model is owned by the caller and must be deleted Chris@320: * when no longer needed. Chris@320: */ Chris@350: Model *transform(const Transform &transform, Chris@350: const ModelTransformer::Input &input); Chris@320: Chris@320: protected slots: Chris@331: void transformerFinished(); Chris@320: Chris@320: void modelAboutToBeDeleted(Model *); Chris@320: Chris@320: protected: Chris@350: ModelTransformer *createTransformer(const Transform &transform, Chris@350: const ModelTransformer::Input &input); Chris@320: Chris@329: typedef std::map TransformerConfigurationMap; Chris@328: TransformerConfigurationMap m_lastConfigurations; Chris@320: Chris@331: typedef std::set TransformerSet; Chris@328: TransformerSet m_runningTransformers; Chris@320: Chris@329: bool getChannelRange(TransformId identifier, Chris@320: Vamp::PluginBase *plugin, int &min, int &max); Chris@320: Chris@331: static ModelTransformerFactory *m_instance; Chris@320: }; Chris@320: Chris@320: Chris@320: #endif