refuse to load LV2 plugins if buffersize requirements cannot be satisfied.
authorRobin Gareus <robin@gareus.org>
Fri, 14 Aug 2015 15:49:47 +0000 (17:49 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 14 Aug 2015 15:51:26 +0000 (17:51 +0200)
libs/ardour/lv2_plugin.cc

index e5b8ffd91e457b8e50ed14b1825477479f4f8742..b533120ec25c569ff22c66191dff5a88b117b0de 100644 (file)
@@ -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);