Chris@49: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@0: Chris@0: /* Chris@52: Sonic Visualiser Chris@52: An audio file viewer and annotation editor. Chris@52: Centre for Digital Music, Queen Mary, University of London. Chris@0: Chris@52: This program is free software; you can redistribute it and/or Chris@52: modify it under the terms of the GNU General Public License as Chris@52: published by the Free Software Foundation; either version 2 of the Chris@52: License, or (at your option) any later version. See the file Chris@52: COPYING included with this distribution for more information. Chris@0: */ Chris@0: Chris@0: /* Chris@0: This is a modified version of a source file from the Chris@0: Rosegarden MIDI and audio sequencer and notation editor. Chris@17: This file copyright 2000-2006 Chris Cannam and Richard Bown. Chris@0: */ Chris@0: Chris@1581: #ifndef SV_LADSPA_PLUGIN_FACTORY_H Chris@1581: #define SV_LADSPA_PLUGIN_FACTORY_H Chris@0: Chris@0: #include "RealTimePluginFactory.h" Chris@0: #include "api/ladspa.h" Chris@0: Chris@1179: #include "PluginScan.h" Chris@1179: Chris@0: #include Chris@0: #include Chris@0: #include Chris@0: #include Chris@0: Chris@0: class LADSPAPluginInstance; Chris@0: Chris@0: class LADSPAPluginFactory : public RealTimePluginFactory Chris@0: { Chris@0: public: Chris@0: virtual ~LADSPAPluginFactory(); Chris@0: Chris@1580: void discoverPlugins() override; Chris@0: Chris@1580: const std::vector &getPluginIdentifiers() const override; Chris@0: Chris@1580: void enumeratePlugins(std::vector &list) override; Chris@0: Chris@1830: RealTimePluginDescriptor getPluginDescriptor(QString identifier) Chris@1830: const override; Chris@60: Chris@1830: std::shared_ptr Chris@1830: instantiatePlugin(QString identifier, Chris@1830: int clientId, Chris@1830: int position, Chris@1830: sv_samplerate_t sampleRate, Chris@1830: int blockSize, Chris@1830: int channels) override; Chris@0: Chris@1580: QString getPluginCategory(QString identifier) override; Chris@165: Chris@1580: QString getPluginLibraryPath(QString identifier) override; Chris@1464: Chris@0: float getPortMinimum(const LADSPA_Descriptor *, int port); Chris@0: float getPortMaximum(const LADSPA_Descriptor *, int port); Chris@0: float getPortDefault(const LADSPA_Descriptor *, int port); Chris@57: float getPortQuantization(const LADSPA_Descriptor *, int port); Chris@0: int getPortDisplayHint(const LADSPA_Descriptor *, int port); Chris@0: Chris@1472: static std::vector getPluginPath(); Chris@1472: Chris@0: protected: Chris@0: LADSPAPluginFactory(); Chris@0: friend class RealTimePluginFactory; Chris@0: Chris@1180: virtual PluginScan::PluginType getPluginType() const { Chris@1180: return PluginScan::LADSPAPlugin; Chris@1179: } Chris@1179: Chris@0: virtual std::vector getLRDFPath(QString &baseUri); Chris@0: Chris@929: virtual void discoverPluginsFrom(QString soName); Chris@0: virtual void generateTaxonomy(QString uri, QString base); Chris@0: virtual void generateFallbackCategories(); Chris@0: Chris@0: virtual const LADSPA_Descriptor *getLADSPADescriptor(QString identifier); Chris@0: Chris@0: void loadLibrary(QString soName); Chris@0: void unloadLibrary(QString soName); Chris@0: void unloadUnusedLibraries(); Chris@0: Chris@0: std::vector m_identifiers; Chris@1464: std::map m_libraries; // identifier -> full file path Chris@1830: std::map m_rtDescriptors; Chris@0: Chris@165: std::map m_taxonomy; Chris@165: std::map m_lrdfTaxonomy; Chris@0: std::map > m_portDefaults; Chris@0: Chris@1830: std::set, Chris@1830: std::owner_less>> m_instances; Chris@0: Chris@0: typedef std::map LibraryHandleMap; Chris@0: LibraryHandleMap m_libraryHandles; Chris@0: }; Chris@0: Chris@0: #endif Chris@0: