From 66f9f3061f35e48b6c1b371e93c2a4effee7ae28 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 25 Feb 2012 20:54:38 +0000 Subject: [PATCH] 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 --- gtk2_ardour/lv2_plugin_ui.cc | 1 + libs/ardour/ardour/lv2_plugin.h | 1 + libs/ardour/lv2_plugin.cc | 10 +++++++--- 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 @@ -819,12 +819,16 @@ LV2Plugin::write_to_ui(uint32_t index, uint32_t protocol, 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(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); -- 2.30.2