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 class RealTimePluginInstance; 00029 00030 class RealTimePluginDescriptor 00031 { 00032 public: 00033 std::string name; 00034 std::string label; 00035 std::string maker; 00036 std::string copyright; 00037 std::string category; 00038 bool isSynth; 00039 unsigned int parameterCount; 00040 unsigned int audioInputPortCount; 00041 unsigned int audioOutputPortCount; 00042 unsigned int controlOutputPortCount; 00043 std::vector<std::string> controlOutputPortNames; 00044 }; 00045 00046 class RealTimePluginFactory 00047 { 00048 public: 00049 virtual ~RealTimePluginFactory(); 00050 00051 static RealTimePluginFactory *instance(QString pluginType); 00052 static RealTimePluginFactory *instanceFor(QString identifier); 00053 static std::vector<QString> getAllPluginIdentifiers(); 00054 static void enumerateAllPlugins(std::vector<QString> &); 00055 00056 static void setSampleRate(int sampleRate) { m_sampleRate = sampleRate; } 00057 00062 virtual void discoverPlugins() = 0; 00063 00068 virtual const std::vector<QString> &getPluginIdentifiers() const = 0; 00069 00075 virtual void enumeratePlugins(std::vector<QString> &list) = 0; 00076 00080 virtual const RealTimePluginDescriptor *getPluginDescriptor(QString identifier) const = 0; 00081 00085 virtual RealTimePluginInstance *instantiatePlugin(QString identifier, 00086 int clientId, 00087 int position, 00088 unsigned int sampleRate, 00089 unsigned int blockSize, 00090 unsigned int channels) = 0; 00091 00095 virtual QString getPluginCategory(QString identifier) = 0; 00096 00097 protected: 00098 RealTimePluginFactory() { } 00099 00100 // for call by RealTimePluginInstance dtor 00101 virtual void releasePlugin(RealTimePluginInstance *, QString identifier) = 0; 00102 friend class RealTimePluginInstance; 00103 00104 static int m_sampleRate; 00105 }; 00106 00107 #endif
1.5.1