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
This commit is contained in:
David Robillard 2012-02-25 20:54:38 +00:00
parent 1e6694f41a
commit 66f9f3061f
3 changed files with 9 additions and 3 deletions

View file

@ -267,6 +267,7 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
} }
if (_lv2->has_message_output()) { if (_lv2->has_message_output()) {
_lv2->enable_ui_emmission();
ARDOUR_UI::instance()->RapidScreenUpdate.connect( ARDOUR_UI::instance()->RapidScreenUpdate.connect(
sigc::mem_fun(*this, &LV2PluginUI::update_timeout)); sigc::mem_fun(*this, &LV2PluginUI::update_timeout));
} }

View file

@ -125,6 +125,7 @@ class LV2Plugin : public ARDOUR::Plugin
uint32_t format, uint32_t format,
const void* buffer); const void* buffer);
void enable_ui_emmission();
void emit_to_ui(void* controller, UIMessageSink sink); void emit_to_ui(void* controller, UIMessageSink sink);
static URIMap _uri_map; static URIMap _uri_map;

View file

@ -819,12 +819,16 @@ LV2Plugin::write_to_ui(uint32_t index,
uint32_t protocol, uint32_t protocol,
uint32_t size, uint32_t size,
uint8_t* body) uint8_t* body)
{
write_to(_to_ui, index, protocol, size, body);
}
void
LV2Plugin::enable_ui_emmission()
{ {
if (!_to_ui) { if (!_to_ui) {
_to_ui = new RingBuffer<uint8_t>(4096); _to_ui = new RingBuffer<uint8_t>(4096);
} }
write_to(_to_ui, index, protocol, size, body);
} }
void void
@ -1156,7 +1160,7 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
} }
// Write messages to UI // 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]; LV2_Evbuf* buf = _ev_buffers[port_index];
for (LV2_Evbuf_Iterator i = lv2_evbuf_begin(buf); for (LV2_Evbuf_Iterator i = lv2_evbuf_begin(buf);
lv2_evbuf_is_valid(i); lv2_evbuf_is_valid(i);