Add examples dir and create function to dynamically load new modules

This commit is contained in:
2015-07-29 18:09:12 +01:00
parent 193c41fddd
commit ae0f861988
12 changed files with 336 additions and 12 deletions
+11 -7
View File
@@ -31,14 +31,18 @@ namespace plaYUVer
AbsoluteFrameDifference::AbsoluteFrameDifference()
{
/* Module Definition */
m_iModuleAPI = MODULE_API_2;
m_iModuleType = FRAME_PROCESSING_MODULE;
m_pchModuleCategory = "Measurements";
m_pchModuleName = "AbsoluteFrameDifference";
m_pchModuleTooltip = "Measure the absolute difference between two images (Y plane), e. g., abs( Y1 - Y2 )";
m_uiModuleRequirements = MODULE_REQUIRES_NEW_WINDOW;
m_uiNumberOfFrames = MODULE_REQUIRES_TWO_FRAMES;
m_iModuleAPI = MODULE_API_2; // Use API version 2 (recommended).
// See this example for details on the functions prototype
m_iModuleType = FRAME_PROCESSING_MODULE; // Apply module to the frames or to the whole sequence.
m_pchModuleCategory = "Measurements"; // Category (sub-menu)
m_pchModuleName = "AbsoluteFrameDifference"; // Name
m_pchModuleTooltip = "Measure the absolute difference " // Description
"between two images (Y plane), e. g., abs( Y1 - Y2 )";
m_uiNumberOfFrames = MODULE_REQUIRES_TWO_FRAMES; // Number of Frames required (ONE_FRAME, TWO_FRAMES, THREE_FRAMES)
m_uiModuleRequirements = MODULE_REQUIRES_NEW_WINDOW; // Module requirements (check PlaYUVerModulesIf.h).
// Several requirements should be "or" between each others.
m_pcFrameDifference = NULL;
}
Bool AbsoluteFrameDifference::create( std::vector<PlaYUVerFrame*> apcFrameList )
+15 -2
View File
@@ -25,6 +25,7 @@
#include "config.h"
#include <functional>
#include <cstring>
#include <dlfcn.h>
#include "PlaYUVerModuleFactory.h"
#include "ModulesListHeader.h"
@@ -36,8 +37,8 @@ PlaYUVerModuleFactory::PlaYUVerModuleFactory()
Register( "FilterComponentLuma", &FilterComponentLuma::Create );
Register( "FilterComponentChromaU", &FilterComponentChromaU::Create );
Register( "FilterComponentChromaV", &FilterComponentChromaV::Create );
//Register( "AbsoluteFrameDifference", &AbsoluteFrameDifference::Create );
Register( "FrameDifference", &FrameDifference::Create );
Register( "AbsoluteFrameDifference", &AbsoluteFrameDifference::Create );
Register( "SetChromaHalfScale", &SetChromaHalfScale::Create );
Register( "FrameCrop", &FrameCrop::Create );
Register( "FrameBinarization", &FrameBinarization::Create );
@@ -48,7 +49,6 @@ PlaYUVerModuleFactory::PlaYUVerModuleFactory()
Register( "DisparityStereoBM", &DisparityStereoBM::Create );
Register( "DisparityStereoSGBM", &DisparityStereoSGBM::Create );
#endif
}
PlaYUVerModuleFactory::~PlaYUVerModuleFactory()
@@ -61,6 +61,19 @@ Void PlaYUVerModuleFactory::Register( const char* moduleName, CreateModuleFn pfn
m_FactoryMap[moduleName] = pfnCreate;
}
Void PlaYUVerModuleFactory::RegisterDl( const char* dlName )
{
void *pHndl = dlopen( dlName, RTLD_NOW );
if( pHndl == NULL )
{
std::cerr << dlerror()
<< std::endl;
exit( -1 );
}
CreateModuleFn pfnCreate = (CreateModuleFn) dlsym( pHndl, "CreateModule" );
Register( dlName, pfnCreate );
}
PlaYUVerModuleIf *PlaYUVerModuleFactory::CreateModule( const char* moduleName )
{
PlaYUVerModuleFactoryMap& PlaYUVerModuleFactoryMap = PlaYUVerModuleFactory::Get()->getMap();
+10 -2
View File
@@ -42,7 +42,10 @@ class PlaYUVerModuleFactory
{
private:
PlaYUVerModuleFactory();
PlaYUVerModuleFactory &operator=( const PlaYUVerModuleFactory & ) { return *this; }
PlaYUVerModuleFactory &operator=( const PlaYUVerModuleFactory & )
{
return *this;
}
PlaYUVerModuleFactoryMap m_FactoryMap;
public:
@@ -55,8 +58,13 @@ public:
}
Void Register( const char* moduleName, CreateModuleFn pfnCreate );
Void RegisterDl( const char* dlName );
PlaYUVerModuleIf *CreateModule( const char *moduleName );
PlaYUVerModuleFactoryMap& getMap(){ return m_FactoryMap; }
PlaYUVerModuleFactoryMap& getMap()
{
return m_FactoryMap;
}
};
//// typedef to make it easier to set up our factory