5 #include "cPluginManager.h"
7 #include "cAudioPlatform.h"
8 #include "cAudioDefines.h"
12 #ifdef CAUDIO_COMPILE_WITH_PLUGIN_SUPPORT
16 typedef IAudioPlugin* (*GetPluginModule)(
const char* version);
18 cPluginManager::cPluginManager()
23 cPluginManager::~cPluginManager()
25 DynamicallyLoadedPluginsIterator it;
26 for(it = DynamicallyLoadedPlugins.begin(); it != DynamicallyLoadedPlugins.end(); it++)
30 if(DYNLIB_UNLOAD(it->second))
37 bool cPluginManager::installPlugin(IAudioPlugin* plugin,
const char* name)
41 cAudioString theName = fromUTF8(name);
43 theName = plugin->getPluginName();
47 RegisteredPlugins[theName] = plugin;
54 bool cPluginManager::installPlugin(
const char* filename,
const char* name)
56 DYNLIB_HANDLE m_hInst = DYNLIB_LOAD(filename);
59 GetPluginModule moduleFunc = (GetPluginModule)DYNLIB_GETSYM(m_hInst,
"GetPluginModule");
63 IAudioPlugin* plugin = moduleFunc(CAUDIO_VERSION);
67 DynamicallyLoadedPlugins[plugin] = m_hInst;
69 return installPlugin(plugin, name);
73 getLogger()->
logError(
"cPluginManager",
"installPlugin Error: %s.", toUTF8(getError()));
78 bool cPluginManager::checkForPlugin(
const char* name)
80 return (RegisteredPlugins.find(name) != RegisteredPlugins.end());
83 IAudioPlugin* cPluginManager::getPlugin(
const char* name)
85 if(RegisteredPlugins.find(name) != RegisteredPlugins.end())
87 return RegisteredPlugins[name];
92 unsigned int cPluginManager::getPluginCount()
94 return RegisteredPlugins.size();
97 cAudioVector<IAudioPlugin*>::Type cPluginManager::getPluginList()
99 cAudioVector<IAudioPlugin*>::Type list;
100 RegisteredPluginsIterator it;
101 for(it = RegisteredPlugins.begin(); it != RegisteredPlugins.end(); it++)
103 list.push_back(it->second);
108 void cPluginManager::uninstallPlugin(IAudioPlugin* plugin)
112 RegisteredPluginsIterator it;
113 for(it = RegisteredPlugins.begin(); it != RegisteredPlugins.end(); it++)
115 if(it->second == plugin)
117 RegisteredPlugins.erase(it->first);
122 DynamicallyLoadedPluginsIterator it2 = DynamicallyLoadedPlugins.find(plugin);
123 if(it2 != DynamicallyLoadedPlugins.end())
127 if(DYNLIB_UNLOAD(it2->second))
129 getLogger()->
logError(
"cPluginManager",
"Plugin Error: %s.", toUTF8(getError()));
131 DynamicallyLoadedPlugins.erase(it2->first);
136 void cPluginManager::uninstallPlugin(
const char* name)
138 if(RegisteredPlugins.find(name) != RegisteredPlugins.end())
140 uninstallPlugin(RegisteredPlugins[name]);
144 void cPluginManager::autoLoadPlugins()
147 for(
size_t i=0; i<fileList.size(); ++i)
149 if(fileList[i].substr(0, 4) == _CTEXT(
"cAp_") ||fileList[i].substr(0, 7) == _CTEXT(
"libcAp_") )
151 #ifdef CAUDIO_PLATFORM_WIN
152 if(fileList[i].substr(fileList[i].length()-4, 4) == _CTEXT(
".dll"))
153 #elif defined(CAUDIO_PLATFORM_LINUX)
154 if(fileList[i].substr(fileList[i].length()-3, 3) ==
".so")
155 #elif defined(CAUDIO_PLATFORM_MAC)
156 if(fileList[i].substr(fileList[i].length()-6, 6) ==
".dylib")
160 installPlugin(toUTF8(cAudioString(_CTEXT(
"./") + fileList[i])), fileList[i].c_str());
166 cAudioString cPluginManager::getError()
168 #ifdef CAUDIO_PLATFORM_WIN
171 FORMAT_MESSAGE_ALLOCATE_BUFFER |
172 FORMAT_MESSAGE_FROM_SYSTEM |
173 FORMAT_MESSAGE_IGNORE_INSERTS,
176 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
182 cAudioString ret = fromUTF8((
char*)lpMsgBuf);
184 ret = ret.substr(0, ret.length()-2);
188 #elif defined(CAUDIO_PLATFORM_MAC) || defined(CAUDIO_PLATFORM_LINUX)
189 const char* error = dlerror();
191 return error != NULL ? cAudioString(error) : cAudioString(
"");
193 return cAudioString(
"");
199 return cPluginManager::Instance();
virtual void logError(const char *sender, const char *msg,...)=0
Used to log an error message to the logging system.
CAUDIO_API IPluginManager * getPluginManager()
Gets the interface to the plugin manager.
cAudioVector< cAudioString >::Type getFilesInDirectory(cAudioString path)
Returns a list of files/directories in the supplied directory. Used internally for auto-installation ...
CAUDIO_API ILogger * getLogger()
Gets the interface to the logger.