summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/lv2_plugin.h1
-rw-r--r--libs/ardour/ardour/plugin.h1
-rw-r--r--libs/ardour/lv2_plugin.cc8
3 files changed, 9 insertions, 1 deletions
diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h
index d4b6ca819f..c3d437b6f7 100644
--- a/libs/ardour/ardour/lv2_plugin.h
+++ b/libs/ardour/ardour/lv2_plugin.h
@@ -344,6 +344,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
bool has_midnam ();
bool read_midnam ();
std::string midnam_model ();
+ bool _midnam_dirty;
#endif
void latency_compute_run ();
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 52fbc71c68..f51f34b099 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -182,6 +182,7 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
virtual bool read_midnam () { return false; }
virtual std::string midnam_model () { return ""; }
PBD::Signal0<void> UpdateMidnam;
+ PBD::Signal0<void> UpdatedMidnam;
virtual bool knows_bank_patch () { return false; }
virtual uint32_t bank_patch (uint8_t chn) { return UINT32_MAX; }
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 5311136afc..b51db65485 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -241,6 +241,7 @@ void
LV2Plugin::midnam_update (LV2_Midnam_Handle handle)
{
LV2Plugin* plugin = (LV2Plugin*)handle;
+ plugin->_midnam_dirty = true;
plugin->UpdateMidnam (); /* EMIT SIGNAL */
}
@@ -590,6 +591,7 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
_midname_interface = (const LV2_Midnam_Interface*)
extension_data (LV2_MIDNAM__interface);
if (_midname_interface) {
+ _midnam_dirty = true;
read_midnam ();
}
#endif
@@ -1029,7 +1031,7 @@ LV2Plugin::has_midnam () {
bool
LV2Plugin::read_midnam () {
bool rv = false;
- if (!_midname_interface) {
+ if (!_midname_interface || !_midnam_dirty) {
return rv;
}
char* midnam = _midname_interface->midnam ((void*)_impl->instance->lv2_handle);
@@ -1047,6 +1049,10 @@ LV2Plugin::read_midnam () {
}
#endif
_midname_interface->free (midnam);
+ if (rv) {
+ UpdatedMidnam ();
+ _midnam_dirty = false;
+ }
return rv;
}