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 00008 This program is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU General Public License as 00010 published by the Free Software Foundation; either version 2 of the 00011 License, or (at your option) any later version. See the file 00012 COPYING included with this distribution for more information. 00013 */ 00014 00015 /* 00016 This is a modified version of a source file from the 00017 Rosegarden MIDI and audio sequencer and notation editor. 00018 This file copyright 2000-2006 Chris Cannam and Richard Bown. 00019 */ 00020 00021 #ifndef _LADSPA_PLUGIN_FACTORY_H_ 00022 #define _LADSPA_PLUGIN_FACTORY_H_ 00023 00024 #include "RealTimePluginFactory.h" 00025 #include "api/ladspa.h" 00026 00027 #include <vector> 00028 #include <map> 00029 #include <set> 00030 #include <QString> 00031 00032 class LADSPAPluginInstance; 00033 00034 class LADSPAPluginFactory : public RealTimePluginFactory 00035 { 00036 public: 00037 virtual ~LADSPAPluginFactory(); 00038 00039 virtual void discoverPlugins(); 00040 00041 virtual const std::vector<QString> &getPluginIdentifiers() const; 00042 00043 virtual void enumeratePlugins(std::vector<QString> &list); 00044 00045 virtual const RealTimePluginDescriptor *getPluginDescriptor(QString identifier) const; 00046 00047 virtual RealTimePluginInstance *instantiatePlugin(QString identifier, 00048 int clientId, 00049 int position, 00050 unsigned int sampleRate, 00051 unsigned int blockSize, 00052 unsigned int channels); 00053 00054 virtual QString getPluginCategory(QString identifier); 00055 00056 float getPortMinimum(const LADSPA_Descriptor *, int port); 00057 float getPortMaximum(const LADSPA_Descriptor *, int port); 00058 float getPortDefault(const LADSPA_Descriptor *, int port); 00059 float getPortQuantization(const LADSPA_Descriptor *, int port); 00060 int getPortDisplayHint(const LADSPA_Descriptor *, int port); 00061 00062 protected: 00063 LADSPAPluginFactory(); 00064 friend class RealTimePluginFactory; 00065 00066 virtual std::vector<QString> getPluginPath(); 00067 00068 virtual std::vector<QString> getLRDFPath(QString &baseUri); 00069 00070 virtual void discoverPluginsFrom(QString soName); 00071 virtual void generateTaxonomy(QString uri, QString base); 00072 virtual void generateFallbackCategories(); 00073 00074 virtual void releasePlugin(RealTimePluginInstance *, QString); 00075 00076 virtual const LADSPA_Descriptor *getLADSPADescriptor(QString identifier); 00077 00078 void loadLibrary(QString soName); 00079 void unloadLibrary(QString soName); 00080 void unloadUnusedLibraries(); 00081 00082 std::vector<QString> m_identifiers; 00083 std::map<QString, RealTimePluginDescriptor *> m_rtDescriptors; 00084 00085 std::map<QString, QString> m_taxonomy; 00086 std::map<unsigned long, QString> m_lrdfTaxonomy; 00087 std::map<unsigned long, std::map<int, float> > m_portDefaults; 00088 00089 std::set<RealTimePluginInstance *> m_instances; 00090 00091 typedef std::map<QString, void *> LibraryHandleMap; 00092 LibraryHandleMap m_libraryHandles; 00093 }; 00094 00095 #endif 00096