From 6cc2812f2e86a8250ca29dd42846cb3f241cd2d3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 11 Apr 2014 10:48:12 -0500 Subject: [PATCH] interim vst fixes --- gtk2_ardour/ardour_ui.cc | 8 +++ gtk2_ardour/main.cc | 5 +- libs/ardour/MSVClibardour/ardour.vcproj | 24 +++++++++ libs/ardour/plugin_manager.cc | 7 ++- libs/fst/fst.h | 49 +++++++++++++++---- libs/fst/vstwin.c | 18 +++---- libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj | 4 ++ 7 files changed, 91 insertions(+), 24 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index eebe272c15..8ea786b268 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1013,7 +1013,9 @@ If you still wish to quit, please use the\n\n\ halt_connection.disconnect (); AudioEngine::instance()->stop (); #ifdef WINDOWS_VST_SUPPORT +#ifndef PLATFORM_WINDOWS fst_stop_threading(); +#endif #endif quit (); } @@ -2924,11 +2926,17 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name, } #ifdef WINDOWS_VST_SUPPORT +#ifndef PLATFORM_WINDOWS fst_stop_threading(); #endif +#endif + flush_pending (); + #ifdef WINDOWS_VST_SUPPORT +#ifndef PLATFORM_WINDOWS fst_start_threading(); +#endif #endif retval = 0; diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index bb9fabb6bb..4b9136626a 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -139,8 +139,9 @@ sigpipe_handler (int /*signal*/) } #ifdef WINDOWS_VST_SUPPORT - +#ifndef PLATFORM_WINDOWS extern int windows_vst_gui_init (int* argc, char** argv[]); +#endif /* this is called from the entry point of a wine-compiled executable that is linked against gtk2_ardour built @@ -165,11 +166,13 @@ int main (int argc, char *argv[]) #endif #ifdef WINDOWS_VST_SUPPORT +#ifndef PLATFORM_WINDOWS /* this does some magic that is needed to make GTK and Wine's own X11 client interact properly. */ windows_vst_gui_init (&argc, &argv); #endif +#endif #ifdef ENABLE_NLS cerr << "bnd txt domain [" << PACKAGE << "] to " << localedir << endl; diff --git a/libs/ardour/MSVClibardour/ardour.vcproj b/libs/ardour/MSVClibardour/ardour.vcproj index fde10c443c..ccf5ac8639 100644 --- a/libs/ardour/MSVClibardour/ardour.vcproj +++ b/libs/ardour/MSVClibardour/ardour.vcproj @@ -551,6 +551,10 @@ RelativePath="..\find_session.cc" > + + @@ -1127,6 +1131,10 @@ /> + + @@ -1227,10 +1235,26 @@ RelativePath="..\version.cc" > + + + + + + + + diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 2db24ed269..7c3eae538f 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -116,10 +116,9 @@ PluginManager::PluginManager () char* s; string lrdf_path; - if (!PBD::find_file_in_search_path ( - PBD::Searchpath(Glib::build_filename(ARDOUR::ardour_dll_directory(), "fst")), - "ardour-vst-scanner", scanner_bin_path)) { - PBD::warning << "VST scanner app not found.'" << endmsg; + string scan_p = Glib::build_filename(ARDOUR::ardour_dll_directory(), "fst"); + if (!PBD::find_file_in_search_path ( PBD::Searchpath(scan_p), "ardour-vst-scanner", scanner_bin_path)) { + PBD::warning << "VST scanner app (ardour-vst-scanner) not found in path " << scan_p << endmsg; } load_statuses (); diff --git a/libs/fst/fst.h b/libs/fst/fst.h index 7b9a67125e..d2b777f77a 100644 --- a/libs/fst/fst.h +++ b/libs/fst/fst.h @@ -9,27 +9,56 @@ #include "ardour/vst_types.h" #include "ardour/vestige/aeffectx.h" +#include "pbd/libpbd_visibility.h" + + +/** + * Display FST error message. + * + * Set via fst_set_error_function(), otherwise a FST-provided + * default will print @a msg (plus a newline) to stderr. + * + * @param msg error message text (no newline at end). + */ +LIBARDOUR_API void (*fst_error_callback)(const char *msg); + +/** + * Set the @ref fst_error_callback for error message display. + * + * The FST library provides two built-in callbacks for this purpose: + * default_fst_error_callback() and silent_fst_error_callback(). + */ +void fst_set_error_function (void (*func)(const char *)); + +void fst_error (const char *fmt, ...); + #ifdef __cplusplus extern "C" { #endif -LIBARDOUR_API int fst_init (void* possible_hmodule); -LIBARDOUR_API void fst_exit (void); +extern int fst_init (void* possible_hmodule); +extern void fst_exit (void); -LIBARDOUR_API VSTHandle* fst_load (const char*); -LIBARDOUR_API int fst_unload (VSTHandle**); +extern VSTHandle* fst_load (const char*); +extern int fst_unload (VSTHandle**); -LIBARDOUR_API VSTState * fst_instantiate (VSTHandle *, audioMasterCallback amc, void* userptr); -LIBARDOUR_API void fst_close (VSTState *); +extern VSTState * fst_instantiate (VSTHandle *, audioMasterCallback amc, void* userptr); +extern void fst_close (VSTState *); +//these funcs get called from gtk2_ardour, so need to be visible LIBARDOUR_API int fst_run_editor (VSTState *, void* window_parent); LIBARDOUR_API void fst_destroy_editor (VSTState *); LIBARDOUR_API void fst_move_window_into_view (VSTState *); +//---- + +extern void fst_event_loop_remove_plugin (VSTState* fst); + +#ifndef PLATFORM_WINDOWS /* linux + wine */ +extern void fst_start_threading(void); +extern void fst_stop_threading(void); +#endif -LIBARDOUR_API void fst_event_loop_remove_plugin (VSTState* fst); -LIBARDOUR_API void fst_start_threading(void); -LIBARDOUR_API void fst_stop_threading(void); -LIBARDOUR_API void fst_audio_master_idle(void); +extern void fst_audio_master_idle(void); #ifdef __cplusplus } diff --git a/libs/fst/vstwin.c b/libs/fst/vstwin.c index c07aaa09dc..37b6acd5e1 100644 --- a/libs/fst/vstwin.c +++ b/libs/fst/vstwin.c @@ -8,12 +8,11 @@ #include static UINT_PTR idle_timer_id = 0; -extern char *basename(char *path); +//extern char* basename(char *path); // #else /* linux + wine */ #include // PATH_MAX -#include // basename #include #include #include @@ -24,6 +23,7 @@ static unsigned int idle_id = 0; extern char * strdup (const char *); #include +#include //basename #include "fst.h" struct ERect { @@ -321,20 +321,20 @@ fst_init (void* possible_hmodule) return 0; } +#ifndef PLATFORM_WINDOWS /* linux + wine */ void fst_start_threading(void) { -#ifndef PLATFORM_WINDOWS /* linux + wine */ if (idle_id == 0) { gui_quit = 0; idle_id = g_idle_add (g_idle_call, NULL); } -#endif } +#endif +#ifndef PLATFORM_WINDOWS /* linux + wine */ void fst_stop_threading(void) { -#ifndef PLATFORM_WINDOWS /* linux + wine */ if (idle_id != 0) { gui_quit = 1; PostQuitMessage (0); @@ -342,8 +342,8 @@ fst_stop_threading(void) { //g_source_remove(idle_id); idle_id = 0; } -#endif } +#endif void fst_exit (void) @@ -493,7 +493,7 @@ fst_load (const char *path) char* period; fhandle->nameptr = strdup (path); fhandle->path = strdup (path); - fhandle->name = basename(fhandle->nameptr); + fhandle->name = strdup (Glib::path_get_basename(fhandle->nameptr).c_str()); if ((period = strrchr (fhandle->name, '.'))) { *period = '\0'; } @@ -504,10 +504,10 @@ fst_load (const char *path) return NULL; } - fhandle->main_entry = (main_entry_t) GetProcAddress (fhandle->dll, "main"); + fhandle->main_entry = (main_entry_t) GetProcAddress ((HMODULE)fhandle->dll, "main"); if (fhandle->main_entry == 0) { - if ((fhandle->main_entry = (main_entry_t) GetProcAddress (fhandle->dll, "VSTPluginMain"))) { + if ((fhandle->main_entry = (main_entry_t) GetProcAddress ((HMODULE)fhandle->dll, "VSTPluginMain"))) { fprintf(stderr, "VST >= 2.4 plugin '%s'\n", path); //PBD::warning << path << _(": is a VST >= 2.4 - this plugin may or may not function correctly with this version of Ardour.") << endmsg; } diff --git a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj index 51f7885ff4..2061b0f2b3 100644 --- a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj +++ b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj @@ -365,6 +365,10 @@ RelativePath="..\motionfeedback.cc" > + + -- 2.30.2