00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 discoverPlugins(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