00001 #include <visionModule.H> 00002 #include <vector> 00003 #include <set> 00004 #include <Logger.H> 00005 00006 using namespace std; 00007 using namespace WURDEVision; 00008 using namespace WURDE; 00009 00010 extern "C" { 00011 std::map<std::string, voperatorloader_ptr *, less<string> > operatorFactory; 00012 } 00013 00014 namespace WURDEVision{ 00015 00016 void loadOperatorMap(vector<string> operatorLibs){ 00017 void *handle; 00018 00019 for(vector<string>::iterator iter=operatorLibs.begin(); 00020 iter!=operatorLibs.end(); iter++){ 00021 handle=dlopen(iter->c_str(),RTLD_NOW); 00022 if(!handle){ 00023 g_error(dlerror()); 00024 continue; 00025 } 00026 } 00027 00028 cout << operatorFactory.size() << " objects loaded.\n"; 00029 } 00030 00031 void loadOperators(VisionModuleConfig &theConfig, std::list<VisionOperator *> & theOperators, bool fakeit){ 00032 VisionOperator *curr=NULL; 00033 char logbuf[1024]; 00034 g_debug("IN load operators"); 00035 00036 if(fakeit){ 00037 g_logdebug << "In loadOperators, we're faking it." << endl; 00038 } 00039 00040 for(std::vector<OperatorConfig>::iterator iter=theConfig.operators.begin(); 00041 iter!=theConfig.operators.end(); iter++){ 00042 g_debug("Loading first operator"); 00043 curr=NULL; 00044 bool okay=false; 00045 00046 if(operatorFactory.find((*iter).type)!=operatorFactory.end()){ 00047 curr=operatorFactory[(*iter).type]((*iter).name); 00048 sprintf(logbuf,"Created an operator type %s",(*iter).type.c_str()); 00049 g_debug(logbuf); 00050 }else{ 00051 sprintf(logbuf,"Couldn't find operator plugin %s",(*iter).type.c_str()); 00052 g_warn(logbuf); 00053 continue; 00054 } 00055 00056 if(curr){ 00057 if(!fakeit){ 00058 std::vector<CameraConfig>::iterator camiter; 00059 std::vector<CameraConfig>::iterator camiter2; 00060 g_logdebug << "Looking for cameras..." <<endl; 00061 for(camiter=iter->cameras.begin();camiter!=iter->cameras.end(); 00062 camiter++){ 00063 g_logdebug << "Looking for a camera. " <<endl; 00064 bool found=false; 00065 g_debug("Looking for a camera"); 00066 for(camiter2=theConfig.cameras.begin();camiter2!=theConfig.cameras.end(); 00067 camiter2++){ 00068 if((*camiter).name==(*camiter2).name){ 00069 found=true; 00070 g_debug("Got the camera"); 00071 break; 00072 } 00073 } 00074 00075 if(!found){ 00076 okay=false; 00077 g_error("Couldn't find a requested camera for one of the operators."); 00078 break; 00079 }else{ 00080 curr->setCameras(iter->cameras); 00081 g_debug("Operator is okay."); 00082 okay=true; 00083 00084 } 00085 } 00086 00087 if(!okay){ 00088 g_debug("Operator not okay."); 00089 delete curr; 00090 continue; 00091 } 00092 00093 curr->initOperator(); 00094 curr->setName((*iter).name); 00095 } 00096 theOperators.push_back(curr); 00097 }else{ 00098 g_debug("No operator object."); 00099 } 00100 } 00101 } 00102 } 00103