Don't load program 0 on initialising a VST; I don't

think we do that for any other plugins.  Restore
chunk-based preset loading for Linux VSTs.


git-svn-id: svn://localhost/ardour2/branches/3.0@10805 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-11-23 19:29:55 +00:00
parent e8ee8593c7
commit 9040712ab9
2 changed files with 29 additions and 26 deletions

View File

@ -287,6 +287,29 @@ dispatch_x_events (XEvent* event, VSTState* vstfx)
vstfx->eventProc((void*)event);
}
static void
maybe_set_program (VSTState* vstfx)
{
if (vstfx->want_program != -1) {
if (vstfx->vst_version >= 2) {
vstfx->plugin->dispatcher (vstfx->plugin, 67 /* effBeginSetProgram */, 0, 0, NULL, 0);
}
vstfx->plugin->dispatcher (vstfx->plugin, effSetProgram, 0, vstfx->want_program, NULL, 0);
if (vstfx->vst_version >= 2) {
vstfx->plugin->dispatcher (vstfx->plugin, 68 /* effEndSetProgram */, 0, 0, NULL, 0);
}
vstfx->want_program = -1;
}
if (vstfx->want_chunk == 1) {
vstfx->plugin->dispatcher (vstfx->plugin, 24 /* effSetChunk */, 1, vstfx->wanted_chunk_size, vstfx->wanted_chunk, 0);
vstfx->want_chunk = 0;
}
}
/** This is the main gui event loop for the plugin, we also need to pass
any Xevents to all the UI callbacks plugins 'may' have registered on their
windows, that is if they don't manage their own UIs **/
@ -391,24 +414,9 @@ again:
}
}
/*Scheduled for setting a new program*/
if (vstfx->want_program != -1 )
{
if (vstfx->vst_version >= 2)
{
vstfx->plugin->dispatcher (vstfx->plugin, 67 /* effBeginSetProgram */, 0, 0, NULL, 0);
}
vstfx->plugin->dispatcher (vstfx->plugin, effSetProgram, 0, vstfx->want_program, NULL, 0);
if (vstfx->vst_version >= 2)
{
vstfx->plugin->dispatcher (vstfx->plugin, 68 /* effEndSetProgram */, 0, 0, NULL, 0);
}
vstfx->want_program = -1;
}
maybe_set_program (vstfx);
vstfx->want_program = -1;
vstfx->want_chunk = 0;
/*scheduled call to dispatcher*/

View File

@ -56,10 +56,6 @@ VSTPlugin::set_plugin (AEffect* e)
_plugin->dispatcher (_plugin, effSetSampleRate, 0, 0, NULL, (float) _session.frame_rate());
_plugin->dispatcher (_plugin, effSetBlockSize, 0, _session.get_block_size(), NULL, 0.0f);
/* set program to zero */
_plugin->dispatcher (_plugin, effSetProgram, 0, 0, NULL, 0.0f);
}
void
@ -385,8 +381,8 @@ VSTPlugin::load_user_preset (PresetRecord r)
return false;
}
else {
} else {
for (XMLNodeList::const_iterator j = (*i)->children().begin(); j != (*i)->children().end(); ++j) {
if ((*j)->name() == X_("Parameter")) {
XMLProperty* index = (*j)->property (X_("index"));
@ -425,8 +421,7 @@ VSTPlugin::do_save_preset (string name)
p->add_content (string (data));
g_free (data);
}
else {
} else {
p = new XMLNode (X_("Preset"));
p->add_property (X_("uri"), uri);