summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-02-25 20:54:38 +0000
committerDavid Robillard <d@drobilla.net>2012-02-25 20:54:38 +0000
commit66f9f3061f35e48b6c1b371e93c2a4effee7ae28 (patch)
tree24aeaae3d0151c1f8b7356285a5197885d25b646
parent1e6694f41af3ba3b25fb19ed802f6806b0b6f0ef (diff)
Fix real-time violation, only send UI updates if explicitly requested by UI.
git-svn-id: svn://localhost/ardour2/branches/3.0@11522 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/lv2_plugin_ui.cc1
-rw-r--r--libs/ardour/ardour/lv2_plugin.h1
-rw-r--r--libs/ardour/lv2_plugin.cc10
3 files changed, 9 insertions, 3 deletions
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index 7524b6b5de..f72e7916c0 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -267,6 +267,7 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
}
if (_lv2->has_message_output()) {
+ _lv2->enable_ui_emmission();
ARDOUR_UI::instance()->RapidScreenUpdate.connect(
sigc::mem_fun(*this, &LV2PluginUI::update_timeout));
}
diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h
index cf764b34d2..8ae9016bb2 100644
--- a/libs/ardour/ardour/lv2_plugin.h
+++ b/libs/ardour/ardour/lv2_plugin.h
@@ -125,6 +125,7 @@ class LV2Plugin : public ARDOUR::Plugin
uint32_t format,
const void* buffer);
+ void enable_ui_emmission();
void emit_to_ui(void* controller, UIMessageSink sink);
static URIMap _uri_map;
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index d74d23acc2..4a21e84628 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -820,11 +820,15 @@ LV2Plugin::write_to_ui(uint32_t index,
uint32_t size,
uint8_t* body)
{
+ write_to(_to_ui, index, protocol, size, body);
+}
+
+void
+LV2Plugin::enable_ui_emmission()
+{
if (!_to_ui) {
_to_ui = new RingBuffer<uint8_t>(4096);
}
-
- write_to(_to_ui, index, protocol, size, body);
}
void
@@ -1156,7 +1160,7 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
}
// Write messages to UI
- if ((flags & PORT_OUTPUT) && (flags & PORT_MESSAGE)) {
+ if (_to_ui && (flags & PORT_OUTPUT) && (flags & PORT_MESSAGE)) {
LV2_Evbuf* buf = _ev_buffers[port_index];
for (LV2_Evbuf_Iterator i = lv2_evbuf_begin(buf);
lv2_evbuf_is_valid(i);