From 56bc98f78bd3b1e5ba5c6ce902b2805d40a6cc53 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 10 Apr 2013 08:32:39 -0400 Subject: fix LXVST support for plugins that make audioMaster callbacks from within effOpen (e.g. glitch) --- libs/ardour/linux_vst_support.cc | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'libs/ardour/linux_vst_support.cc') diff --git a/libs/ardour/linux_vst_support.cc b/libs/ardour/linux_vst_support.cc index 99251f08e4..9106d69009 100644 --- a/libs/ardour/linux_vst_support.cc +++ b/libs/ardour/linux_vst_support.cc @@ -34,6 +34,8 @@ #include #include "ardour/linux_vst_support.h" +#include "ardour/vst_plugin.h" + #include "pbd/basename.h" #include "pbd/error.h" @@ -293,36 +295,43 @@ vstfx_unload (VSTHandle* fhandle) return 0; } -/*This instantiates a plugin*/ +/** + Instantiates a VST plugin and also set _state of its plugin argument + */ -VSTState * -vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr) +VSTState* +vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void *ptr) { VSTState* vstfx = vstfx_new (); + ARDOUR::VSTPlugin* plugin = reinterpret_cast (ptr); - if(fhandle == 0) - { + if (fhandle == 0) { vstfx_error( "** ERROR ** VSTFX : The handle was 0\n" ); return 0; } - if ((vstfx->plugin = fhandle->main_entry (amc)) == 0) - { + if ((vstfx->plugin = fhandle->main_entry (amc)) == 0) { vstfx_error ("** ERROR ** VSTFX : %s could not be instantiated :(\n", fhandle->name); free (vstfx); return 0; } vstfx->handle = fhandle; - vstfx->plugin->user = userptr; + vstfx->plugin->user = plugin; - if (vstfx->plugin->magic != kEffectMagic) - { + if (vstfx->plugin->magic != kEffectMagic) { vstfx_error ("** ERROR ** VSTFX : %s is not a VST plugin\n", fhandle->name); free (vstfx); return 0; } + + /* need to set this here because some plugins make audioMaster + * callbacks from within effOpen, and _state must be set for + * that to work. + */ + plugin->set_state (vstfx); + vstfx->plugin->dispatcher (vstfx->plugin, effOpen, 0, 0, 0, 0); /*May or May not need to 'switch the plugin on' here - unlikely -- cgit v1.2.3