X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Flinux_vst_gui_support.cc;h=e438ed6f926f98c83a28d6c96b199b3aa7b38e64;hb=8ada45344e949f3d36a96094ed443cac82ffd3c7;hp=4d90bdd4aa98e1388fababee0ba0be087e7d8671;hpb=2ba2a50decb4b2f8b6b688dea495a2898124cc4f;p=ardour.git diff --git a/gtk2_ardour/linux_vst_gui_support.cc b/gtk2_ardour/linux_vst_gui_support.cc index 4d90bdd4aa..e438ed6f92 100644 --- a/gtk2_ardour/linux_vst_gui_support.cc +++ b/gtk2_ardour/linux_vst_gui_support.cc @@ -22,13 +22,10 @@ /** VSTFX - An engine based on FST for handling linuxVST plugins **/ /******************************************************************/ -/** EDITOR tab stops at 4 **/ - #include #include -#include -#include #include +#include #include #include @@ -44,6 +41,7 @@ #include #include #include +#include struct ERect{ short top; @@ -335,10 +333,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 +379,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 +461,8 @@ again: pthread_mutex_unlock (&vstfx->lock); } pthread_mutex_unlock (&plugin_mutex); + + clock1 = g_get_monotonic_time(); } } @@ -770,6 +771,10 @@ vstfx_event_loop_remove_plugin (VSTState* vstfx) } } + // if this function is called, there must be + // at least one plugin in the linked list + assert(vstfx_first); + if (vstfx_first == vstfx) { vstfx_first = vstfx_first->next; }