svcore  1.9
RealTimePluginFactory.h
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006 Chris Cannam.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 /*
00017    This is a modified version of a source file from the 
00018    Rosegarden MIDI and audio sequencer and notation editor.
00019    This file copyright 2000-2006 Chris Cannam.
00020 */
00021 
00022 #ifndef _REALTIME_PLUGIN_FACTORY_H_
00023 #define _REALTIME_PLUGIN_FACTORY_H_
00024 
00025 #include <QString>
00026 #include <vector>
00027 
00028 #include "base/Debug.h"
00029 
00030 class RealTimePluginInstance;
00031 
00032 class RealTimePluginDescriptor
00033 {
00034 public:
00035     std::string name;
00036     std::string label;
00037     std::string maker;
00038     std::string copyright;
00039     std::string category;
00040     bool isSynth;
00041     unsigned int parameterCount;
00042     unsigned int audioInputPortCount;
00043     unsigned int audioOutputPortCount;
00044     unsigned int controlOutputPortCount;
00045     std::vector<std::string> controlOutputPortNames;
00046 };
00047 
00048 class RealTimePluginFactory
00049 {
00050 public:
00051     virtual ~RealTimePluginFactory();
00052 
00053     static RealTimePluginFactory *instance(QString pluginType);
00054     static RealTimePluginFactory *instanceFor(QString identifier);
00055     static std::vector<QString> getAllPluginIdentifiers();
00056     static void enumerateAllPlugins(std::vector<QString> &);
00057 
00058     static void setSampleRate(int sampleRate) { m_sampleRate = sampleRate; }
00059 
00064     virtual void discoverPlugins() = 0;
00065 
00070     virtual const std::vector<QString> &getPluginIdentifiers() const = 0;
00071 
00077     virtual void enumeratePlugins(std::vector<QString> &list) = 0;
00078 
00082     virtual const RealTimePluginDescriptor *getPluginDescriptor(QString identifier) const = 0;
00083 
00087     virtual RealTimePluginInstance *instantiatePlugin(QString identifier,
00088                                                       int clientId,
00089                                                       int position,
00090                                                       unsigned int sampleRate,
00091                                                       unsigned int blockSize,
00092                                                       unsigned int channels) = 0;
00093 
00097     virtual QString getPluginCategory(QString identifier) = 0;
00098 
00099 protected:
00100     RealTimePluginFactory() { }
00101 
00102     // for call by RealTimePluginInstance dtor
00103     virtual void releasePlugin(RealTimePluginInstance *, QString identifier) = 0;
00104     friend class RealTimePluginInstance;
00105 
00106     static int m_sampleRate;
00107 };
00108 
00109 #endif