summaryrefslogtreecommitdiff
path: root/pluginlv2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pluginlv2.cc')
-rw-r--r--pluginlv2.cc22
1 files changed, 17 insertions, 5 deletions
diff --git a/pluginlv2.cc b/pluginlv2.cc
index 6474d5c..d12c0e7 100644
--- a/pluginlv2.cc
+++ b/pluginlv2.cc
@@ -39,6 +39,15 @@
#include <lv2/lv2plug.in/ns/ext/midi/midi.h>
#include <lv2/lv2plug.in/ns/ext/instance-access/instance-access.h>
+void PluginLV2::init()
+{
+ for(auto& m : midnamData)
+ {
+ m.first = -1; // Mark midnam slot as unsued.
+ m.second.reserve(64); // Reserve 64 characters for the midnam name.
+ }
+}
+
bool PluginLV2::getFreeWheel() const
{
return free_wheel;
@@ -363,10 +372,10 @@ void PluginLV2::run(LV2_Handle instance, uint32_t sample_count)
plugin_lv2->pos += sample_count;
#ifdef MIDNAM_INTERFACE
- if(plugin_lv2->midnam && plugin_lv2->midnam_changed)
+ if(plugin_lv2->midnam && plugin_lv2->midnam_changed.load())
{
plugin_lv2->midnam->update(plugin_lv2->midnam->handle);
- plugin_lv2->midnam_changed = false;
+ plugin_lv2->midnam_changed.store(false);
}
#endif
@@ -490,14 +499,17 @@ void PluginLV2::setMidnamData(const std::vector<std::pair<int, std::string>>& mi
auto idx = 0u;
for(const auto& m : midnam)
{
- this->midnamData[idx] = m;
+ midnamData[idx].first = m.first;
+ // Duplicate name making sure no reallocation is being performed.
+ midnamData[idx].second =
+ m.second.substr(0, midnamData[idx].second.capacity() - 1);
idx++;
}
for(;idx < this->midnamData.size(); ++idx)
{
- this->midnamData[idx] = {-1, {}};
+ midnamData[idx].first = -1; // Mark as unused
}
- midnam_changed = true;
+ midnam_changed.store(true);
}
#ifdef MIDNAM_INTERFACE