From ac1065b43b8bbd2485d8c40b7c4e0408267d06ba Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 14 Aug 2015 17:49:47 +0200 Subject: [PATCH] refuse to load LV2 plugins if buffersize requirements cannot be satisfied. --- libs/ardour/lv2_plugin.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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);