summaryrefslogtreecommitdiff
path: root/libs/ardour/linux_vst_support.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-01-18 20:25:13 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2013-01-18 20:25:13 +0000
commit49a722d3d233fe2759d2ca5fbd7b80477c99767a (patch)
treeebe11441b7c9f9777fa385db15f4ff850111a4e6 /libs/ardour/linux_vst_support.cc
parent347c4f97798c4f12d6b0a6a6fc3c5c362e3d8252 (diff)
more debugging output for failed LXVST opens, and drop use of NULL
git-svn-id: svn://localhost/ardour2/branches/3.0@13880 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/linux_vst_support.cc')
-rw-r--r--libs/ardour/linux_vst_support.cc77
1 files changed, 44 insertions, 33 deletions
diff --git a/libs/ardour/linux_vst_support.cc b/libs/ardour/linux_vst_support.cc
index b40dfc6997..b134c69680 100644
--- a/libs/ardour/linux_vst_support.cc
+++ b/libs/ardour/linux_vst_support.cc
@@ -28,12 +28,17 @@
#include <time.h>
#include <unistd.h>
#include <pthread.h>
+
#include <glib.h>
#include <glib/gstdio.h>
+#include <glibmm/miscutils.h>
+#include <glibmm/fileutils.h>
#include "ardour/linux_vst_support.h"
#include "pbd/error.h"
+#include "i18n.h"
+
/***********************************************************/
/* VSTFX - A set of modules for managing linux VST plugins */
/* vstfx.cc, vstfxwin.cc and vstfxinfofile.cc */
@@ -81,10 +86,10 @@ vstfx_new ()
/*Mutexes*/
- pthread_mutex_init (&vstfx->lock, NULL);
- pthread_cond_init (&vstfx->window_status_change, NULL);
- pthread_cond_init (&vstfx->plugin_dispatcher_called, NULL);
- pthread_cond_init (&vstfx->window_created, NULL);
+ pthread_mutex_init (&vstfx->lock, 0);
+ pthread_cond_init (&vstfx->window_status_change, 0);
+ pthread_cond_init (&vstfx->plugin_dispatcher_called, 0);
+ pthread_cond_init (&vstfx->window_created, 0);
/*Safe values*/
@@ -95,8 +100,8 @@ vstfx_new ()
vstfx->program_set_without_editor = 0;
vstfx->linux_window = 0;
vstfx->linux_plugin_ui_window = 0;
- vstfx->eventProc = NULL;
- vstfx->extra_data = NULL;
+ vstfx->eventProc = 0;
+ vstfx->extra_data = 0;
vstfx->want_resize = 0;
return vstfx;
@@ -118,8 +123,14 @@ void* vstfx_load_vst_library(const char* path)
you get some occasional failures to load - dlerror reports
invalid arguments*/
- if ((dll = dlopen (path, RTLD_LOCAL | RTLD_LAZY)) != NULL)
+ if ((dll = dlopen (path, RTLD_LOCAL | RTLD_LAZY)) != 0) {
return dll;
+ }
+
+ if (Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
+ PBD::error << string_compose (_("Could not open existing LXVST plugin: %1"), dlerror()) << endmsg;
+ return 0;
+ }
/*We didn't find the library so try and get the path specified in the
env variable LXVST_PATH*/
@@ -128,15 +139,15 @@ void* vstfx_load_vst_library(const char* path)
/*Path not specified - not much more we can do*/
- if (envdup == NULL)
- return NULL;
+ if (envdup == 0)
+ return 0;
/*Copy the path into envdup*/
envdup = strdup (envdup);
- if (envdup == NULL)
- return NULL;
+ if (envdup == 0)
+ return 0;
len2 = strlen(path);
@@ -144,7 +155,7 @@ void* vstfx_load_vst_library(const char* path)
lxvst_path = strtok (envdup, ":");
- while (lxvst_path != NULL)
+ while (lxvst_path != 0)
{
vstfx_error ("\"%s\"", lxvst_path);
len1 = strlen(lxvst_path);
@@ -157,7 +168,7 @@ void* vstfx_load_vst_library(const char* path)
/*Try and load the library*/
- if ((dll = dlopen(full_path, RTLD_LOCAL | RTLD_LAZY)) != NULL)
+ if ((dll = dlopen(full_path, RTLD_LOCAL | RTLD_LAZY)) != 0)
{
/*Succeeded */
break;
@@ -165,7 +176,7 @@ void* vstfx_load_vst_library(const char* path)
/*Try again*/
- lxvst_path = strtok (NULL, ":");
+ lxvst_path = strtok (0, ":");
}
/*Free the path*/
@@ -181,7 +192,7 @@ void* vstfx_load_vst_library(const char* path)
VSTHandle *
vstfx_load (const char *path)
{
- char* buf = NULL;
+ char* buf = 0;
VSTHandle* fhandle;
int i;
@@ -191,7 +202,7 @@ vstfx_load (const char *path)
/*See if we have .so appended to the path - if not we need to make sure it is added*/
- if (strstr (path, ".so") == NULL)
+ if (strstr (path, ".so") == 0)
{
/*Append the .so to the path - Make sure the path has enough space*/
@@ -227,26 +238,26 @@ vstfx_load (const char *path)
/*call load_vstfx_library to actually load the .so into memory*/
- if ((fhandle->dll = vstfx_load_vst_library (buf)) == NULL)
+ if ((fhandle->dll = vstfx_load_vst_library (buf)) == 0)
{
vstfx_unload (fhandle);
free(buf);
- return NULL;
+ return 0;
}
/*Find the main entry point into the plugin*/
- if ((fhandle->main_entry = (main_entry_t) dlsym(fhandle->dll, "main")) == NULL)
+ if ((fhandle->main_entry = (main_entry_t) dlsym(fhandle->dll, "main")) == 0)
{
- /*If it can't be found, unload the plugin and return a NULL handle*/
+ /*If it can't be found, unload the plugin and return a 0 handle*/
vstfx_unload (fhandle);
free(buf);
- return NULL;
+ return 0;
}
free(buf);
@@ -274,13 +285,13 @@ vstfx_unload (VSTHandle* fhandle)
if (fhandle->dll)
{
dlclose(fhandle->dll);
- fhandle->dll = NULL;
+ fhandle->dll = 0;
}
if (fhandle->nameptr)
{
free (fhandle->nameptr);
- fhandle->name = NULL;
+ fhandle->name = 0;
}
/*Don't need the plugin handle any more*/
@@ -296,17 +307,17 @@ vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
{
VSTState* vstfx = vstfx_new ();
- if(fhandle == NULL)
+ if(fhandle == 0)
{
- vstfx_error( "** ERROR ** VSTFX : The handle was NULL\n" );
- return NULL;
+ vstfx_error( "** ERROR ** VSTFX : The handle was 0\n" );
+ return 0;
}
- if ((vstfx->plugin = fhandle->main_entry (amc)) == NULL)
+ if ((vstfx->plugin = fhandle->main_entry (amc)) == 0)
{
vstfx_error ("** ERROR ** VSTFX : %s could not be instantiated :(\n", fhandle->name);
free (vstfx);
- return NULL;
+ return 0;
}
vstfx->handle = fhandle;
@@ -316,7 +327,7 @@ vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
{
vstfx_error ("** ERROR ** VSTFX : %s is not a VST plugin\n", fhandle->name);
free (vstfx);
- return NULL;
+ return 0;
}
vstfx->plugin->dispatcher (vstfx->plugin, effOpen, 0, 0, 0, 0);
@@ -324,7 +335,7 @@ vstfx_instantiate (VSTHandle* fhandle, audioMasterCallback amc, void* userptr)
/*May or May not need to 'switch the plugin on' here - unlikely
since FST doesn't and most plugins start up 'On' by default - I think this is the least of our worries*/
- //vstfx->plugin->dispatcher (vstfx->plugin, effMainsChanged, 0, 1, NULL, 0);
+ //vstfx->plugin->dispatcher (vstfx->plugin, effMainsChanged, 0, 1, 0, 0);
vstfx->vst_version = vstfx->plugin->dispatcher (vstfx->plugin, effGetVstVersion, 0, 0, 0, 0);
@@ -342,7 +353,7 @@ void vstfx_close (VSTState* vstfx)
if(vstfx->plugin)
{
- vstfx->plugin->dispatcher (vstfx->plugin, effMainsChanged, 0, 0, NULL, 0);
+ vstfx->plugin->dispatcher (vstfx->plugin, effMainsChanged, 0, 0, 0, 0);
/*Calling dispatcher with effClose will cause the plugin's destructor to
be called, which will also remove the editor if it exists*/
@@ -366,14 +377,14 @@ void vstfx_close (VSTState* vstfx)
return;
}
- /*Valid plugin loaded - so we can unload it and NULL the pointer
+ /*Valid plugin loaded - so we can unload it and 0 the pointer
to it. We can't free the handle here because we don't know what else
might need it. It should be / is freed when the plugin is deleted*/
if (vstfx->handle->dll)
{
dlclose(vstfx->handle->dll); //dlclose keeps its own reference count
- vstfx->handle->dll = NULL;
+ vstfx->handle->dll = 0;
}
}