1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 2 3 /* 4 Sonic Visualiser 5 An audio file viewer and annotation editor. 6 Centre for Digital Music, Queen Mary, University of London. 7 8 This program is free software; you can redistribute it and/or 9 modify it under the terms of the GNU General Public License as 10 published by the Free Software Foundation; either version 2 of the 11 License, or (at your option) any later version. See the file 12 COPYING included with this distribution for more information. 13 */ 14 15 /* 16 This is a modified version of a source file from the 17 Rosegarden MIDI and audio sequencer and notation editor. 18 This file copyright 2000-2006 Chris Cannam and Richard Bown. 19 */ 20 21 #ifndef SV_LADSPA_PLUGIN_FACTORY_H 22 #define SV_LADSPA_PLUGIN_FACTORY_H 23 24 #include "RealTimePluginFactory.h" 25 #include "api/ladspa.h" 26 27 #include "PluginScan.h" 28 29 #include <vector> 30 #include <map> 31 #include <set> 32 #include <QString> 33 34 class LADSPAPluginInstance; 35 36 class LADSPAPluginFactory : public RealTimePluginFactory 37 { 38 public: 39 virtual ~LADSPAPluginFactory(); 40 41 void discoverPlugins() override; 42 43 const std::vector<QString> &getPluginIdentifiers() const override; 44 45 void enumeratePlugins(std::vector<QString> &list) override; 46 47 const RealTimePluginDescriptor *getPluginDescriptor(QString identifier) const override; 48 49 RealTimePluginInstance *instantiatePlugin(QString identifier, 50 int clientId, 51 int position, 52 sv_samplerate_t sampleRate, 53 int blockSize, 54 int channels) override; 55 56 QString getPluginCategory(QString identifier) override; 57 58 QString getPluginLibraryPath(QString identifier) override; 59 60 float getPortMinimum(const LADSPA_Descriptor *, int port); 61 float getPortMaximum(const LADSPA_Descriptor *, int port); 62 float getPortDefault(const LADSPA_Descriptor *, int port); 63 float getPortQuantization(const LADSPA_Descriptor *, int port); 64 int getPortDisplayHint(const LADSPA_Descriptor *, int port); 65 66 static std::vector<QString> getPluginPath(); 67 68 protected: 69 LADSPAPluginFactory(); 70 friend class RealTimePluginFactory; 71 getPluginType()72 virtual PluginScan::PluginType getPluginType() const { 73 return PluginScan::LADSPAPlugin; 74 } 75 76 virtual std::vector<QString> getLRDFPath(QString &baseUri); 77 78 virtual void discoverPluginsFrom(QString soName); 79 virtual void generateTaxonomy(QString uri, QString base); 80 virtual void generateFallbackCategories(); 81 82 void releasePlugin(RealTimePluginInstance *, QString) override; 83 84 virtual const LADSPA_Descriptor *getLADSPADescriptor(QString identifier); 85 86 void loadLibrary(QString soName); 87 void unloadLibrary(QString soName); 88 void unloadUnusedLibraries(); 89 90 std::vector<QString> m_identifiers; 91 std::map<QString, QString> m_libraries; // identifier -> full file path 92 std::map<QString, RealTimePluginDescriptor *> m_rtDescriptors; 93 94 std::map<QString, QString> m_taxonomy; 95 std::map<unsigned long, QString> m_lrdfTaxonomy; 96 std::map<unsigned long, std::map<int, float> > m_portDefaults; 97 98 std::set<RealTimePluginInstance *> m_instances; 99 100 typedef std::map<QString, void *> LibraryHandleMap; 101 LibraryHandleMap m_libraryHandles; 102 }; 103 104 #endif 105 106