diff plugin/LADSPAPluginFactory.h @ 1830:5f8fbbde08ff audio-source-refactor

Use shared_ptr for plugin instances throughout
author Chris Cannam
date Fri, 20 Mar 2020 16:30:33 +0000
parents ad5f892c0c4d
children
line wrap: on
line diff
--- a/plugin/LADSPAPluginFactory.h	Fri Mar 20 16:30:16 2020 +0000
+++ b/plugin/LADSPAPluginFactory.h	Fri Mar 20 16:30:33 2020 +0000
@@ -44,14 +44,16 @@
 
     void enumeratePlugins(std::vector<QString> &list) override;
 
-    const RealTimePluginDescriptor *getPluginDescriptor(QString identifier) const override;
+    RealTimePluginDescriptor getPluginDescriptor(QString identifier)
+        const override;
 
-    RealTimePluginInstance *instantiatePlugin(QString identifier,
-                                                      int clientId,
-                                                      int position,
-                                                      sv_samplerate_t sampleRate,
-                                                      int blockSize,
-                                                      int channels) override;
+    std::shared_ptr<RealTimePluginInstance>
+    instantiatePlugin(QString identifier,
+                      int clientId,
+                      int position,
+                      sv_samplerate_t sampleRate,
+                      int blockSize,
+                      int channels) override;
 
     QString getPluginCategory(QString identifier) override;
 
@@ -79,8 +81,6 @@
     virtual void generateTaxonomy(QString uri, QString base);
     virtual void generateFallbackCategories();
 
-    void releasePlugin(RealTimePluginInstance *, QString) override;
-
     virtual const LADSPA_Descriptor *getLADSPADescriptor(QString identifier);
 
     void loadLibrary(QString soName);
@@ -89,13 +89,14 @@
 
     std::vector<QString> m_identifiers;
     std::map<QString, QString> m_libraries; // identifier -> full file path
-    std::map<QString, RealTimePluginDescriptor *> m_rtDescriptors;
+    std::map<QString, RealTimePluginDescriptor> m_rtDescriptors;
 
     std::map<QString, QString> m_taxonomy;
     std::map<unsigned long, QString> m_lrdfTaxonomy;
     std::map<unsigned long, std::map<int, float> > m_portDefaults;
 
-    std::set<RealTimePluginInstance *> m_instances;
+    std::set<std::weak_ptr<RealTimePluginInstance>,
+             std::owner_less<std::weak_ptr<RealTimePluginInstance>>> m_instances;
 
     typedef std::map<QString, void *> LibraryHandleMap;
     LibraryHandleMap m_libraryHandles;