summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-11-07 23:37:10 +0100
committerRobin Gareus <robin@gareus.org>2018-11-07 23:37:10 +0100
commit41abf75077921766f25aae45c87aca927244e520 (patch)
treeaa16ca6d967b706e5c03479d25bc70910cc9b138 /libs
parentbc83e6f75334e3493d70635ff1060a1798430456 (diff)
Consolidate VST Plugin Info
This unifies common PluginManager VST code to construct *VSTPluginInfo and also provides a dedicated is_instrument() method for VST plugins.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/lxvst_plugin.h4
-rw-r--r--libs/ardour/ardour/mac_vst_plugin.h4
-rw-r--r--libs/ardour/ardour/vst_plugin.h11
-rw-r--r--libs/ardour/ardour/windows_vst_plugin.h4
-rw-r--r--libs/ardour/lxvst_plugin.cc4
-rw-r--r--libs/ardour/mac_vst_plugin.cc2
-rw-r--r--libs/ardour/plugin_manager.cc67
-rw-r--r--libs/ardour/vst_plugin.cc30
-rw-r--r--libs/ardour/windows_vst_plugin.cc4
9 files changed, 56 insertions, 74 deletions
diff --git a/libs/ardour/ardour/lxvst_plugin.h b/libs/ardour/ardour/lxvst_plugin.h
index 5a35d9832e..25703956c7 100644
--- a/libs/ardour/ardour/lxvst_plugin.h
+++ b/libs/ardour/ardour/lxvst_plugin.h
@@ -40,10 +40,10 @@ class LIBARDOUR_API LXVSTPlugin : public VSTPlugin
std::string state_node_name () const { return "lxvst"; }
};
-class LIBARDOUR_API LXVSTPluginInfo : public PluginInfo
+class LIBARDOUR_API LXVSTPluginInfo : public VSTPluginInfo
{
public:
- LXVSTPluginInfo ();
+ LXVSTPluginInfo (_VSTInfo*);
~LXVSTPluginInfo () {}
PluginPtr load (Session& session);
diff --git a/libs/ardour/ardour/mac_vst_plugin.h b/libs/ardour/ardour/mac_vst_plugin.h
index fa05dff80f..d7ab8c2698 100644
--- a/libs/ardour/ardour/mac_vst_plugin.h
+++ b/libs/ardour/ardour/mac_vst_plugin.h
@@ -42,10 +42,10 @@ protected:
void open_plugin ();
};
-class LIBARDOUR_API MacVSTPluginInfo : public PluginInfo
+class LIBARDOUR_API MacVSTPluginInfo : public VSTPluginInfo
{
public:
- MacVSTPluginInfo ();
+ MacVSTPluginInfo (_VSTInfo*);
~MacVSTPluginInfo () {}
PluginPtr load (Session& session);
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h
index b2189143d3..21ac6775ad 100644
--- a/libs/ardour/ardour/vst_plugin.h
+++ b/libs/ardour/ardour/vst_plugin.h
@@ -32,6 +32,8 @@ typedef struct _VSTState VSTState;
#include "ardour/vestige/vestige.h"
+struct _VSTInfo;
+
namespace ARDOUR {
class PluginInsert;
@@ -134,6 +136,15 @@ protected:
bool _eff_bypassed;
};
+class LIBARDOUR_API VSTPluginInfo : public PluginInfo
+{
+public:
+ VSTPluginInfo (_VSTInfo*);
+ bool is_instrument () const;
+protected:
+ bool _is_instrument;
+};
+
}
#endif
diff --git a/libs/ardour/ardour/windows_vst_plugin.h b/libs/ardour/ardour/windows_vst_plugin.h
index 7566eab098..fbbe8d1491 100644
--- a/libs/ardour/ardour/windows_vst_plugin.h
+++ b/libs/ardour/ardour/windows_vst_plugin.h
@@ -40,10 +40,10 @@ public:
std::string state_node_name () const { return "windows-vst"; }
};
-class LIBARDOUR_API WindowsVSTPluginInfo : public PluginInfo
+class LIBARDOUR_API WindowsVSTPluginInfo : public VSTPluginInfo
{
public:
- WindowsVSTPluginInfo ();
+ WindowsVSTPluginInfo (_VSTInfo*);
~WindowsVSTPluginInfo () {}
PluginPtr load (Session& session);
diff --git a/libs/ardour/lxvst_plugin.cc b/libs/ardour/lxvst_plugin.cc
index 8bfd5d61d3..d9aa971387 100644
--- a/libs/ardour/lxvst_plugin.cc
+++ b/libs/ardour/lxvst_plugin.cc
@@ -168,8 +168,8 @@ LXVSTPluginInfo::get_presets (bool user_only) const
return p;
}
-LXVSTPluginInfo::LXVSTPluginInfo()
+LXVSTPluginInfo::LXVSTPluginInfo (_VSTInfo* nfo) : VSTPluginInfo (nfo)
{
- type = ARDOUR::LXVST;
+ type = ARDOUR::LXVST;
}
diff --git a/libs/ardour/mac_vst_plugin.cc b/libs/ardour/mac_vst_plugin.cc
index 240da414a0..60ff7220bd 100644
--- a/libs/ardour/mac_vst_plugin.cc
+++ b/libs/ardour/mac_vst_plugin.cc
@@ -175,7 +175,7 @@ MacVSTPluginInfo::get_presets (bool user_only) const
return p;
}
-MacVSTPluginInfo::MacVSTPluginInfo ()
+MacVSTPluginInfo::MacVSTPluginInfo (_VSTInfo* nfo) : VSTPluginInfo (nfo)
{
type = ARDOUR::MacVST;
}
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index aa151aa975..06a7e0ee77 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -993,7 +993,6 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("VST plugin %1 does not support processReplacing, and cannot be used in %2 at this time"),
@@ -1002,33 +1001,14 @@ PluginManager::windows_vst_discover (string path, bool cache_only)
continue;
}
- PluginInfoPtr info (new WindowsVSTPluginInfo);
+ PluginInfoPtr info (new WindowsVSTPluginInfo (finfo));
+ info->path = path;
/* what a joke freeware VST is */
-
if (!strcasecmp ("The Unnamed plugin", finfo->name)) {
info->name = PBD::basename_nosuffix (path);
- } else {
- info->name = finfo->name;
}
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- if (finfo->isInstrument) {
- info->category = X_("Instrument");
- } else {
- info->category = finfo->Category;
- }
- info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::Windows_VST;
-
/* if we don't have any tags for this plugin, make some up. */
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
@@ -1144,7 +1124,6 @@ PluginManager::mac_vst_discover (string path, bool cache_only)
uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("Mac VST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"),
@@ -1153,25 +1132,8 @@ PluginManager::mac_vst_discover (string path, bool cache_only)
continue;
}
- PluginInfoPtr info (new MacVSTPluginInfo);
-
- info->name = finfo->name;
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- if (finfo->isInstrument) {
- info->category = X_("Instrument");
- } else {
- info->category = finfo->Category;
- }
+ PluginInfoPtr info (new MacVSTPluginInfo (finfo));
info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::MacVST;
/* if we don't have any tags for this plugin, make some up. */
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
@@ -1265,7 +1227,6 @@ PluginManager::lxvst_discover (string path, bool cache_only)
uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("linuxVST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"),
@@ -1274,31 +1235,13 @@ PluginManager::lxvst_discover (string path, bool cache_only)
continue;
}
- PluginInfoPtr info(new LXVSTPluginInfo);
+ PluginInfoPtr info(new LXVSTPluginInfo (finfo));
+ info->path = path;
if (!strcasecmp ("The Unnamed plugin", finfo->name)) {
info->name = PBD::basename_nosuffix (path);
- } else {
- info->name = finfo->name;
}
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- if (finfo->isInstrument) {
- info->category = X_("Instrument");
- } else {
- info->category = finfo->Category;
- }
- info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::LXVST;
-
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
/* Make sure we don't find the same plugin in more than one place along
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc
index cbd88877cd..4183283bff 100644
--- a/libs/ardour/vst_plugin.cc
+++ b/libs/ardour/vst_plugin.cc
@@ -27,10 +27,10 @@
#include "pbd/floating.h"
#include "pbd/locale_guard.h"
+#include "ardour/vst_types.h"
#include "ardour/vst_plugin.h"
#include "ardour/vestige/vestige.h"
#include "ardour/session.h"
-#include "ardour/vst_types.h"
#include "ardour/filesystem_paths.h"
#include "ardour/audio_buffer.h"
@@ -923,3 +923,31 @@ VSTPlugin::presets_file () const
return string("vst-") + unique_id ();
}
+
+VSTPluginInfo::VSTPluginInfo (VSTInfo* nfo)
+{
+
+ char buf[32];
+ snprintf (buf, sizeof (buf), "%d", nfo->UniqueID);
+ unique_id = buf;
+
+ index = 0;
+
+ name = nfo->name;
+ creator = nfo->creator;
+ n_inputs.set_audio (nfo->numInputs);
+ n_outputs.set_audio (nfo->numOutputs);
+ n_inputs.set_midi ((nfo->wantMidi & 1) ? 1 : 0);
+ n_outputs.set_midi ((nfo->wantMidi & 2) ? 1 : 0);
+
+ _is_instrument = nfo->isInstrument;
+}
+
+bool
+VSTPluginInfo::is_instrument () const
+{
+ if (_is_instrument) {
+ return true;
+ }
+ return PluginInfo::is_instrument ();
+}
diff --git a/libs/ardour/windows_vst_plugin.cc b/libs/ardour/windows_vst_plugin.cc
index 4bfe822645..7a7caa9ed8 100644
--- a/libs/ardour/windows_vst_plugin.cc
+++ b/libs/ardour/windows_vst_plugin.cc
@@ -134,8 +134,8 @@ WindowsVSTPluginInfo::get_presets (bool user_only) const
return p;
}
-WindowsVSTPluginInfo::WindowsVSTPluginInfo()
+WindowsVSTPluginInfo::WindowsVSTPluginInfo (_VSTInfo* nfo) : VSTPluginInfo (nfo)
{
- type = ARDOUR::Windows_VST;
+ type = ARDOUR::Windows_VST;
}