summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-08-14 17:49:47 +0200
committerRobin Gareus <robin@gareus.org>2015-08-14 17:51:26 +0200
commitac1065b43b8bbd2485d8c40b7c4e0408267d06ba (patch)
tree4328522b3bc8d60540b0d51fa4bcefa3f1017019 /libs
parentdace872af874356db60e01eb4a351368f1760495 (diff)
refuse to load LV2 plugins if buffersize requirements cannot be satisfied.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/lv2_plugin.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index e5b8ffd91e..b533120ec2 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -155,6 +155,8 @@ public:
LilvNode* units_midiNote;
LilvNode* patch_writable;
LilvNode* patch_Message;
+ LilvNode* bufz_powerOf2BlockLength;
+ LilvNode* bufz_fixedBlockLength;
private:
bool _bundle_checked;
@@ -428,6 +430,16 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
lilv_node_free(_impl->author);
throw failed_constructor();
}
+ if (lilv_plugin_has_feature(plugin, _world.bufz_powerOf2BlockLength) ||
+ lilv_plugin_has_feature(plugin, _world.bufz_fixedBlockLength)
+ ) {
+ error << string_compose(
+ _("LV2: \"%1\" buffer-size requirements cannot be satisfied."),
+ lilv_node_as_string(_impl->name)) << endmsg;
+ lilv_node_free(_impl->name);
+ lilv_node_free(_impl->author);
+ throw failed_constructor();
+ }
#ifdef HAVE_LILV_0_16_0
// Load default state
@@ -2369,10 +2381,16 @@ LV2World::LV2World()
units_db = lilv_new_uri(world, LV2_UNITS__db);
patch_writable = lilv_new_uri(world, LV2_PATCH__writable);
patch_Message = lilv_new_uri(world, LV2_PATCH__Message);
+
+ bufz_powerOf2BlockLength = lilv_new_uri(world, LV2_BUF_SIZE__powerOf2BlockLength);
+ bufz_fixedBlockLength = lilv_new_uri(world, LV2_BUF_SIZE__fixedBlockLength);
+
}
LV2World::~LV2World()
{
+ lilv_node_free(bufz_fixedBlockLength);
+ lilv_node_free(bufz_powerOf2BlockLength);
lilv_node_free(patch_Message);
lilv_node_free(patch_writable);
lilv_node_free(units_hz);