#include "plugin_mgr.h"
#include "plugin_desc.h"
-
+#include "framework/mlt_log.h"
+#include "framework/mlt_factory.h"
static gboolean
plugin_is_valid (const LADSPA_Descriptor * descriptor)
ocount++;
}
- if (icount == 0 || ocount == 0)
+ if (ocount == 0)
return FALSE;
return TRUE;
int err;
/* open the object file */
- dl_handle = dlopen (filename, RTLD_NOW|RTLD_GLOBAL);
+ dl_handle = dlopen (filename, RTLD_NOW);
if (!dl_handle)
{
-// fprintf (stderr, "%s: error opening shared object file '%s': %s\n",
-// __FUNCTION__, filename, dlerror());
+ mlt_log_info( NULL, "%s: error opening shared object file '%s': %s\n",
+ __FUNCTION__, filename, dlerror());
return;
}
dlerr = dlerror();
if (dlerr) {
- fprintf (stderr, "%s: error finding ladspa_descriptor symbol in object file '%s': %s\n",
+ mlt_log_info( NULL, "%s: error finding ladspa_descriptor symbol in object file '%s': %s\n",
__FUNCTION__, filename, dlerr);
dlclose (dl_handle);
return;
}
+#ifdef __DARWIN__
+ if (!get_descriptor (0)) {
+ void (*constructor)(void) = dlsym (dl_handle, "_init");
+ if (constructor) constructor();
+ }
+#endif
+
plugin_index = 0;
while ( (descriptor = get_descriptor (plugin_index)) )
{
if (exists)
{
- printf ("Plugin %ld exists in both '%s' and '%s'; using version in '%s'\n",
+ mlt_log_info( NULL, "Plugin %ld exists in both '%s' and '%s'; using version in '%s'\n",
descriptor->UniqueID, other_desc->object_file, filename, other_desc->object_file);
plugin_index++;
continue;
plugin_mgr->plugin_count++;
/* print in the splash screen */
- /* printf ("Loaded plugin '%s'\n", desc->name); */
+ /* mlt_log_verbose( NULL, "Loaded plugin '%s'\n", desc->name); */
}
err = dlclose (dl_handle);
if (err)
{
- fprintf (stderr, "%s: error closing object file '%s': %s\n",
+ mlt_log_warning( NULL, "%s: error closing object file '%s': %s\n",
__FUNCTION__, filename, dlerror ());
}
}
dir_stream = opendir (dir);
if (!dir_stream)
{
-/* fprintf (stderr, "%s: error opening directory '%s': %s\n",
+/* mlt_log_warning( NULL, "%s: error opening directory '%s': %s\n",
__FUNCTION__, dir, strerror (errno)); */
return;
}
struct stat info;
if (strcmp (dir_entry->d_name, ".") == 0 ||
+ mlt_properties_get (plugin_mgr->blacklist, dir_entry->d_name) ||
strcmp (dir_entry->d_name, "..") == 0)
continue;
err = closedir (dir_stream);
if (err)
- fprintf (stderr, "%s: error closing directory '%s': %s\n",
+ mlt_log_warning( NULL, "%s: error closing directory '%s': %s\n",
__FUNCTION__, dir, strerror (errno));
}
char * ladspa_path, * dir;
ladspa_path = g_strdup (getenv ("LADSPA_PATH"));
- if (!ladspa_path)
#ifdef WIN32
- ladspa_path = g_strdup ("lib\\ladspa");
+ if (!ladspa_path)
+ {
+ ladspa_path = malloc (strlen (mlt_environment("MLT_APPDIR")) + strlen ("\\lib\\ladspa") + 1);
+ strcpy (ladspa_path, mlt_environment("MLT_APPDIR"));
+ strcat (ladspa_path, "\\lib\\ladspa");
+ }
+#elif defined(__DARWIN__) && defined(RELOCATABLE)
+ {
+ ladspa_path = malloc( strlen (mlt_environment ("MLT_APPDIR")) + strlen ("/lib/ladspa") + 1 );
+ strcpy (ladspa_path, mlt_environment ("MLT_APPDIR"));
+ strcat (ladspa_path, "/lib/ladspa" );
+ }
#else
+ if (!ladspa_path)
ladspa_path = g_strdup ("/usr/local/lib/ladspa:/usr/lib/ladspa:/usr/lib64/ladspa");
#endif
- dir = strtok (ladspa_path, ":");
- do
+ for (dir = strtok (ladspa_path, ":"); dir; dir = strtok (NULL, ":"))
plugin_mgr_get_dir_plugins (plugin_mgr, dir);
- while ((dir = strtok (NULL, ":")));
g_free (ladspa_path);
}
plugin_mgr_new ()
{
plugin_mgr_t * pm;
-
+ char dirname[PATH_MAX];
+
pm = g_malloc (sizeof (plugin_mgr_t));
pm->all_plugins = NULL;
pm->plugins = NULL;
pm->plugin_count = 0;
-
+
+ snprintf (dirname, PATH_MAX, "%s/jackrack/blacklist.txt", mlt_environment ("MLT_DATA"));
+ pm->blacklist = mlt_properties_load (dirname);
plugin_mgr_get_path_plugins (pm);
if (!pm->all_plugins)
- {
- fprintf (stderr, "No LADSPA plugins were found!\n\nCheck your LADSPA_PATH environment variable.\n");
- abort ();
- }
-
- pm->all_plugins = g_slist_sort (pm->all_plugins, plugin_mgr_sort);
+ mlt_log_warning( NULL, "No LADSPA plugins were found!\n\nCheck your LADSPA_PATH environment variable.\n");
+ else
+ pm->all_plugins = g_slist_sort (pm->all_plugins, plugin_mgr_sort);
return pm;
}