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