svcore
1.9
|
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