LADSPAPluginFactory.h
Go to the documentation of this file.
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 
35 
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 
48  const override;
49 
50  std::shared_ptr<RealTimePluginInstance>
51  instantiatePlugin(QString identifier,
52  int clientId,
53  int position,
54  sv_samplerate_t sampleRate,
55  int blockSize,
56  int channels) override;
57 
58  QString getPluginCategory(QString identifier) override;
59 
60  QString getPluginLibraryPath(QString identifier) override;
61 
62  float getPortMinimum(const LADSPA_Descriptor *, int port);
63  float getPortMaximum(const LADSPA_Descriptor *, int port);
64  float getPortDefault(const LADSPA_Descriptor *, int port);
65  float getPortQuantization(const LADSPA_Descriptor *, int port);
66  int getPortDisplayHint(const LADSPA_Descriptor *, int port);
67 
68  static std::vector<QString> getPluginPath();
69 
70 protected:
72  friend class RealTimePluginFactory;
73 
76  }
77 
78  virtual std::vector<QString> getLRDFPath(QString &baseUri);
79 
80  virtual void discoverPluginsFrom(QString soName);
81  virtual void generateTaxonomy(QString uri, QString base);
82  virtual void generateFallbackCategories();
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<std::weak_ptr<RealTimePluginInstance>,
99  std::owner_less<std::weak_ptr<RealTimePluginInstance>>> m_instances;
100 
101  typedef std::map<QString, void *> LibraryHandleMap;
102  LibraryHandleMap m_libraryHandles;
103 };
104 
105 #endif
106 
double sv_samplerate_t
Sample rate.
Definition: BaseTypes.h:51
std::map< QString, QString > m_libraries
void unloadLibrary(QString soName)
int getPortDisplayHint(const LADSPA_Descriptor *, int port)
QString getPluginLibraryPath(QString identifier) override
Get the full file path (including both directory and filename) of the library file that provides a gi...
LibraryHandleMap m_libraryHandles
virtual void generateTaxonomy(QString uri, QString base)
void discoverPlugins() override
Look up the plugin path and find the plugins in it.
float getPortDefault(const LADSPA_Descriptor *, int port)
static std::vector< QString > getPluginPath()
std::set< std::weak_ptr< RealTimePluginInstance >, std::owner_less< std::weak_ptr< RealTimePluginInstance > > > m_instances
virtual void generateFallbackCategories()
virtual PluginScan::PluginType getPluginType() const
float getPortMaximum(const LADSPA_Descriptor *, int port)
float getPortQuantization(const LADSPA_Descriptor *, int port)
virtual std::vector< QString > getLRDFPath(QString &baseUri)
std::map< QString, void * > LibraryHandleMap
std::map< unsigned long, std::map< int, float > > m_portDefaults
std::map< QString, RealTimePluginDescriptor > m_rtDescriptors
QString getPluginCategory(QString identifier) override
Get category metadata about a plugin (without instantiating it).
std::map< QString, QString > m_taxonomy
void enumeratePlugins(std::vector< QString > &list) override
Append to the given list descriptions of all the available plugins and their ports.
std::vector< QString > m_identifiers
virtual void discoverPluginsFrom(QString soName)
std::map< unsigned long, QString > m_lrdfTaxonomy
const std::vector< QString > & getPluginIdentifiers() const override
Return a reference to a list of all plugin identifiers that can be created by this factory...
void loadLibrary(QString soName)
RealTimePluginDescriptor getPluginDescriptor(QString identifier) const override
Get some basic information about a plugin (rapidly).
float getPortMinimum(const LADSPA_Descriptor *, int port)
virtual const LADSPA_Descriptor * getLADSPADescriptor(QString identifier)
std::shared_ptr< RealTimePluginInstance > instantiatePlugin(QString identifier, int clientId, int position, sv_samplerate_t sampleRate, int blockSize, int channels) override
Instantiate a plugin.