From 1b38fdcc778ca6b82efc549243d4312645441c50 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 8 Jun 2013 21:41:07 +0000 Subject: Specify rsz:minimumSize for main control ports. Fix running as an LV2 plugin at very low block sizes. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5128 a436a847-0d15-0410-975c-d299462d15a1 --- src/server/ingen_lv2.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/server/ingen_lv2.cpp') diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp index 0f3c2092..6f50847b 100644 --- a/src/server/ingen_lv2.cpp +++ b/src/server/ingen_lv2.cpp @@ -87,6 +87,12 @@ class LV2Driver; void signal_main(ProcessContext& context, LV2Driver* driver); +inline size_t +ui_ring_size(SampleCount block_length) +{ + return std::max((size_t)8192, (size_t)block_length * 16); +} + class LV2Driver : public Ingen::Server::Driver , public Ingen::AtomSink { @@ -102,8 +108,8 @@ public: , _writer(engine.world()->uri_map(), engine.world()->uris(), *this) - , _from_ui(block_length * sizeof(float)) // FIXME: size - , _to_ui(block_length * sizeof(float)) // FIXME: size + , _from_ui(ui_ring_size(block_length)) + , _to_ui(ui_ring_size(block_length)) , _root_graph(NULL) , _notify_capacity(0) , _block_length(block_length) @@ -337,7 +343,9 @@ public: break; } - if (seq->atom.size + sizeof(LV2_Atom) + atom.size > _notify_capacity) { + if (seq->atom.size + lv2_atom_pad_size( + sizeof(LV2_Atom_Event) + atom.size) + > _notify_capacity) { break; // Output port buffer full, resume next time } @@ -354,7 +362,8 @@ public: } read += lv2_atom_total_size(&ev->body); - seq->atom.size += sizeof(LV2_Atom_Event) + ev->body.size; + seq->atom.size += lv2_atom_pad_size( + sizeof(LV2_Atom_Event) + ev->body.size); } if (_to_ui_overflow) { -- cgit v1.2.1