persistent waveform shape setting.
[ardour.git] / gtk2_ardour / linux_vst_gui_support.cc
index 4d90bdd4aa98e1388fababee0ba0be087e7d8671..5eaf485c7569587ff45bce90c1d9d70828e33282 100644 (file)
@@ -26,8 +26,6 @@
 
 #include <stdlib.h>
 #include <stdio.h>
-#include <jack/jack.h>
-#include <jack/thread.h>
 #include <libgen.h>
 
 #include <pthread.h>
@@ -44,6 +42,7 @@
 #include <time.h>
 #include <unistd.h>
 #include <pthread.h>
+#include <sys/time.h>
 
 struct ERect{
     short top;
@@ -335,10 +334,11 @@ windows, that is if they don't manage their own UIs **/
 void* gui_event_loop (void* ptr)
 {
        VSTState* vstfx;
-       int LXVST_sched_event_timer = 0;
-       int LXVST_sched_timer_interval = 50; //ms
+       int LXVST_sched_timer_interval = 40; //ms, 25fps
        XEvent event;
+       uint64_t clock1, clock2;
        
+       clock1 = g_get_monotonic_time();
        /*The 'Forever' loop - runs the plugin UIs etc - based on the FST gui event loop*/
        
        while (!gui_quit)
@@ -380,14 +380,14 @@ void* gui_event_loop (void* ptr)
 
                Glib::usleep(1000);
                
-               LXVST_sched_event_timer++;
-               
-               LXVST_sched_event_timer = LXVST_sched_event_timer & 0x00FFFFFF;
-
                /*See if its time for us to do a scheduled event pass on all the plugins*/
 
-               if((LXVST_sched_timer_interval!=0) && (!(LXVST_sched_event_timer% LXVST_sched_timer_interval)))
+               clock2 = g_get_monotonic_time();
+               const int64_t elapsed_time_ms = (clock2 - clock1) / 1000;
+
+               if((LXVST_sched_timer_interval != 0) && elapsed_time_ms >= LXVST_sched_timer_interval)
                {
+                       //printf("elapsed %d ms ^= %.2f Hz\n", elapsed_time_ms, 1000.0/(double)elapsed_time_ms); // DEBUG
                        pthread_mutex_lock (&plugin_mutex);
                    
 again:
@@ -462,6 +462,8 @@ again:
                                pthread_mutex_unlock (&vstfx->lock);
                        }
                        pthread_mutex_unlock (&plugin_mutex);
+
+                       clock1 = g_get_monotonic_time();
                }
        }