Don't load program 0 on initialising a VST; I don't
authorCarl Hetherington <carl@carlh.net>
Wed, 23 Nov 2011 19:29:55 +0000 (19:29 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 23 Nov 2011 19:29:55 +0000 (19:29 +0000)
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

gtk2_ardour/vstfxwin.cc
libs/ardour/vst_plugin.cc

index eecfb0dc821babff08cf2a6b5329f8585c84a8df..1831237db5772114557aa5b1c452538c3ac51850 100755 (executable)
@@ -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*/
                                
index 130c43ede656e51935ee640eca773ff3100975bc..2d1a24ae93d420bb050b2d91cd3ed2d329b48964 100644 (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);