Fix real-time violation, only send UI updates if explicitly requested by UI.
authorDavid Robillard <d@drobilla.net>
Sat, 25 Feb 2012 20:54:38 +0000 (20:54 +0000)
committerDavid Robillard <d@drobilla.net>
Sat, 25 Feb 2012 20:54:38 +0000 (20:54 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11522 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/lv2_plugin_ui.cc
libs/ardour/ardour/lv2_plugin.h
libs/ardour/lv2_plugin.cc

index 7524b6b5dea4e892ba8e0dc0a9325fdacf70f700..f72e7916c033ed0fcdd7359517e7f188e3767b99 100644 (file)
@@ -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));
        }
index cf764b34d28e48116adef09141378d7f51b3e8d8..8ae9016bb23c0a7044025ba2f7c727cd9eaeddd7 100644 (file)
@@ -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;
index d74d23acc22abdee4bb6857542eca61e68844148..4a21e84628f1cee4e70a5fde28dc0760a5340e9c 100644 (file)
@@ -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<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);