Finish the dynamic loading of modules

This commit is contained in:
2015-07-29 18:58:37 +01:00
parent 04300cc655
commit f9ab02629a
4 changed files with 17 additions and 9 deletions
+6 -5
View File
@@ -239,21 +239,22 @@ Void ModulesHandle::processOpt( Int index )
Void ModulesHandle::loadExternalModule()
{
Bool bUpdate = false;
QString supported = tr( "Supported Files (*.so)" );
QStringList formatsList;
formatsList << "Shared Libraries (*.so)";
QStringList filter;
filter << supported
<< formatsList
<< tr( "All Files (*)" );
QStringList fileNames = QFileDialog::getOpenFileNames( m_pcParent, tr( "Open File" ), QString(), filter.join( ";;" ) );
QString fileName = QFileDialog::getSaveFileName( m_pcParent, tr( "Open File" ), QString(), filter.join( ";;" ) );
if( !fileName.isEmpty() )
for( Int i = 0; i < fileNames.size(); i++ )
{
PlaYUVerModuleFactory::Get()->RegisterDl( fileName.toStdString().data() );
buildMenu();
bUpdate |= PlaYUVerModuleFactory::Get()->RegisterDl( fileNames.at( i ).toStdString().data() );
}
if( bUpdate )
buildMenu();
}
Void ModulesHandle::activateModule()
@@ -27,6 +27,8 @@
namespace plaYUVer
{
REGISTER_CLASS_MAKER( FrameBinarization )
FrameBinarization::FrameBinarization()
{
/* Module Definition */
+8 -3
View File
@@ -61,17 +61,22 @@ Void PlaYUVerModuleFactory::Register( const char* moduleName, CreateModuleFn pfn
m_FactoryMap[moduleName] = pfnCreate;
}
Void PlaYUVerModuleFactory::RegisterDl( const char* dlName )
Bool PlaYUVerModuleFactory::RegisterDl( const char* dlName )
{
void *pHndl = dlopen( dlName, RTLD_NOW );
if( pHndl == NULL )
{
std::cerr << dlerror()
<< std::endl;
exit( -1 );
return false;
}
CreateModuleFn pfnCreate = ( CreateModuleFn )dlsym( pHndl, "Maker" );
if( pfnCreate == NULL )
{
return false;
}
CreateModuleFn pfnCreate = (CreateModuleFn) dlsym( pHndl, "CreateModule" );
Register( dlName, pfnCreate );
return true;
}
PlaYUVerModuleIf *PlaYUVerModuleFactory::CreateModule( const char* moduleName )
+1 -1
View File
@@ -58,7 +58,7 @@ public:
}
Void Register( const char* moduleName, CreateModuleFn pfnCreate );
Void RegisterDl( const char* dlName );
Bool RegisterDl( const char* dlName );
PlaYUVerModuleIf *CreateModule( const char *moduleName );
PlaYUVerModuleFactoryMap& getMap()