summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-08-08 00:15:43 +0000
committerDavid Robillard <d@drobilla.net>2012-08-08 00:15:43 +0000
commite8e6c94ebe95d6d7fd48cea1c383d749272e7662 (patch)
tree9b796623e468078fcfe66a9d1006c36e3ae1587c
parentd51aa827c7411fdf88a7645d80c1fb0c447ab838 (diff)
downloadingen-e8e6c94ebe95d6d7fd48cea1c383d749272e7662.tar.gz
ingen-e8e6c94ebe95d6d7fd48cea1c383d749272e7662.tar.bz2
ingen-e8e6c94ebe95d6d7fd48cea1c383d749272e7662.zip
Support latest LV2 buf-size extension.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4623 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/server/BufferFactory.cpp10
-rw-r--r--src/server/BufferFactory.hpp2
-rw-r--r--src/server/ingen_lv2.cpp19
-rw-r--r--wscript2
4 files changed, 22 insertions, 11 deletions
diff --git a/src/server/BufferFactory.cpp b/src/server/BufferFactory.cpp
index 720a4639..ccb3170d 100644
--- a/src/server/BufferFactory.cpp
+++ b/src/server/BufferFactory.cpp
@@ -24,11 +24,10 @@
namespace Ingen {
namespace Server {
-static const size_t EVENT_BYTES_PER_FRAME = 4; // FIXME
-
BufferFactory::BufferFactory(Engine& engine, URIs& uris)
: _engine(engine)
, _uris(uris)
+ , _seq_size(0)
, _silent_buffer(NULL)
{
}
@@ -72,12 +71,17 @@ BufferFactory::audio_buffer_size(SampleCount nframes)
uint32_t
BufferFactory::default_size(LV2_URID type) const
{
+ static const uint32_t SEQ_BYTES_PER_FRAME = 4;
if (type == _uris.atom_Float) {
return sizeof(LV2_Atom_Float);
} else if (type == _uris.atom_Sound) {
return audio_buffer_size(_engine.driver()->block_length());
} else if (type == _uris.atom_Sequence) {
- return _engine.driver()->block_length() * EVENT_BYTES_PER_FRAME;
+ if (_seq_size == 0) {
+ return _engine.driver()->block_length() * SEQ_BYTES_PER_FRAME;
+ } else {
+ return _seq_size;
+ }
} else {
return 0;
}
diff --git a/src/server/BufferFactory.hpp b/src/server/BufferFactory.hpp
index 11d31b2d..643c5d97 100644
--- a/src/server/BufferFactory.hpp
+++ b/src/server/BufferFactory.hpp
@@ -59,6 +59,7 @@ public:
BufferRef silent_buffer();
void set_block_length(SampleCount block_length);
+ void set_seq_size(uint32_t seq_size);
Forge& forge();
URIs& uris() { return _uris; }
@@ -89,6 +90,7 @@ private:
Glib::Mutex _mutex;
Engine& _engine;
URIs& _uris;
+ uint32_t _seq_size;
BufferRef _silent_buffer;
};
diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp
index ccbeb7d4..7da7f476 100644
--- a/src/server/ingen_lv2.cpp
+++ b/src/server/ingen_lv2.cpp
@@ -494,23 +494,28 @@ ingen_instantiate(const LV2_Descriptor* descriptor,
}
}
+ plugin->world = new Ingen::World(
+ plugin->argc, plugin->argv, plugin->map, unmap);
+ if (!plugin->world->load_module("serialisation")) {
+ delete plugin->world;
+ return NULL;
+ }
+
uint32_t block_length = 4096;
+ uint32_t seq_size = 0;
if (access) {
uint32_t min, multiple_of, power_of;
access->get_sample_count(
access->handle, &min, &block_length, &multiple_of, &power_of);
+ access->get_buf_size(
+ access->handle, &seq_size,
+ plugin->world->uris().atom_Sequence, block_length);
Raul::info(Raul::fmt("Block length: %1% frames\n") % block_length);
+ Raul::info(Raul::fmt("Sequence size: %1% bytes\n") % seq_size);
} else {
Raul::warn("Warning: No buffer size access, guessing 4096 frames.\n");
}
- plugin->world = new Ingen::World(
- plugin->argc, plugin->argv, plugin->map, unmap);
- if (!plugin->world->load_module("serialisation")) {
- delete plugin->world;
- return NULL;
- }
-
SharedPtr<Server::Engine> engine(new Server::Engine(plugin->world));
plugin->world->set_engine(engine);
diff --git a/wscript b/wscript
index 357a4dd8..8618bd06 100644
--- a/wscript
+++ b/wscript
@@ -99,7 +99,7 @@ def configure(conf):
define_name='HAVE_POSIX_MEMALIGN',
mandatory=False)
- autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.5', uselib_store='LV2')
+ autowaf.check_pkg(conf, 'lv2', atleast_version='1.0.7', uselib_store='LV2')
autowaf.define(conf, 'INGEN_VERSION', INGEN_VERSION)