00001 /* 00002 * This file contains class that helps you load camera from DLL. 00003 * 00004 * Author: 00005 * Tomas Mrkvicka 00006 * xmrkvi03@stud.fit.vutbr.cz 00007 * 00008 */ 00009 00010 #include "pipeline/CameraLoader.h" 00011 00012 //////////////////////////////////////////////////////////////////////////////// 00013 //////////////////////////////////////////////////////////////////////////////// 00014 //////////////////////////////////////////////////////////////////////////////// 00015 // TCameraLoader 00016 00017 /** Konstruktor. 00018 */ 00019 TCameraLoader::TCameraLoader(void) 00020 { 00021 m_camera = NULL; 00022 m_library = NULL; 00023 } 00024 //OK 2007-08-25 15:27:39 B04-315B\Tom 00025 00026 /** Destruktor. 00027 * 00028 * Zavre otevrenou knihovnu (pokud existuje). 00029 * 00030 * \warning Pred volanim destruktoru musi byt kamera z dane DLL knihovny znicena. 00031 */ 00032 TCameraLoader::~TCameraLoader(void) 00033 { 00034 if ( m_library ) 00035 { 00036 //zavreme knihovnu 00037 FreeLibrary( m_library ); 00038 m_library = NULL; 00039 } 00040 } 00041 //OK 2007-08-25 15:27:48 B04-315B\Tom 00042 00043 /** Ziska prvni DirectShow kameru pomoci zadane knihovny. 00044 * 00045 * Metoda muze vratit ukazatel na drive vracenou kameru, pokud uz byla nekdy 00046 * nejaka kamera uvnitr objektu vytvorena. 00047 * 00048 * Pri chybe vraci metoda NULL. 00049 * 00050 * \param dllName [in] jmeno souboru s knihovnou pro kameru typu DirectShow 00051 */ 00052 TCameraAbstract* TCameraLoader::GetCamera_DirectShow(const char * dllName) 00053 { 00054 // pokud jiz existuje nejaka kamera pak ji vratime 00055 if ( m_camera ) 00056 { 00057 return m_camera; 00058 } 00059 else 00060 { 00061 //musime kameru nacist 00062 m_library = LoadLibrary( dllName ); 00063 if ( ! m_library ) 00064 { 00065 return NULL; 00066 } 00067 00068 //ziskame objekt z knihovny 00069 PTR_CAMERAGET fce_ptr = (PTR_CAMERAGET)GetProcAddress( m_library, "CreateCamera" ); 00070 if ( ! fce_ptr ) 00071 { 00072 FreeLibrary( m_library ); 00073 m_library = NULL; 00074 00075 return NULL; 00076 } 00077 00078 //vytvorime objekt 00079 m_camera = (*fce_ptr)(); 00080 00081 if ( ! m_camera ) 00082 { 00083 FreeLibrary( m_library ); 00084 m_library = NULL; 00085 } 00086 00087 return m_camera; 00088 } 00089 } 00090 //OK 2007-08-25 15:27:57 B04-315B\Tom 00091 00092 /** Ziska kameru reprezentovanou souborem s obrazkem jehoz typ se urci podle zadane knihovny. 00093 * 00094 * Metoda muze vratit ukazatel na drive vracenou kameru, pokud uz byla nekdy 00095 * nejaka kamera uvnitr objektu vytvorena. 00096 * 00097 * Pri chybe vraci metoda NULL. 00098 * 00099 * \param dllName [in] jmeno souboru s knihovnou 00100 * \param filename [in] cesta k souboru s obrazkem ktery ma byt nacten 00101 */ 00102 TCameraAbstract* TCameraLoader::GetCamera_Image( const char * dllName, const char * filename ) 00103 { 00104 // pokud jiz existuje nejaka kamera pak ji vratime 00105 if ( m_camera ) 00106 { 00107 return m_camera; 00108 } 00109 else 00110 { 00111 //musime kameru nacist 00112 m_library = LoadLibrary( dllName ); 00113 if ( ! m_library ) 00114 { 00115 return NULL; 00116 } 00117 00118 //ziskame objekt z knihovny 00119 PTR_CAMERAGETIMAGE fce_ptr = (PTR_CAMERAGETIMAGE)GetProcAddress( m_library, "CreateCamera" ); 00120 if ( ! fce_ptr ) 00121 { 00122 FreeLibrary( m_library ); 00123 m_library = NULL; 00124 00125 return NULL; 00126 } 00127 00128 //vytvorime objekt 00129 m_camera = (*fce_ptr)( filename ); 00130 00131 if ( ! m_camera ) 00132 { 00133 FreeLibrary( m_library ); 00134 m_library = NULL; 00135 } 00136 00137 return m_camera; 00138 } 00139 } 00140 //OK 2007-08-25 15:28:00 B04-315B\Tom 00141 00142 /** Ziska kameru reprezentovanou souborem s videem jehoz typ se urci podle zadane knihovny. 00143 * 00144 * Metoda muze vratit ukazatel na drive vracenou kameru, pokud uz byla nekdy 00145 * nejaka kamera uvnitr objektu vytvorena. 00146 * 00147 * Pri chybe vraci metoda NULL. 00148 * 00149 * \param dllName [in] jmeno souboru s knihovnou pro tento typ kamery 00150 * \param filename [in] cesta k souboru s videem ktery ma byt nacten 00151 */ 00152 TCameraAbstract* TCameraLoader::GetCamera_Video( const char * dllName, const char * filename ) 00153 { 00154 return this->GetCamera_Image( dllName, filename ); 00155 } 00156 //OK 2007-11-16 22:01:48 B04-315A\Tom 00157 00158 /** Ziska null kameru. 00159 * 00160 * Metoda muze vratit ukazatel na drive vracenou kameru, pokud uz byla nekdy 00161 * nejaka kamera uvnitr objektu vytvorena. 00162 * 00163 * Pri chybe vraci metoda NULL. 00164 * 00165 * \param dllName [in] jmeno souboru s knihovnou pro tento typ kamery 00166 */ 00167 TCameraAbstract* TCameraLoader::GetCamera_Null( const char * dllName) 00168 { 00169 return this->GetCamera_DirectShow( dllName ); 00170 } 00171 //OK 2007-11-16 22:01:46 B04-315A\Tom 00172 00173 // TCameraLoader 00174 //////////////////////////////////////////////////////////////////////////////// 00175 //////////////////////////////////////////////////////////////////////////////// 00176 ////////////////////////////////////////////////////////////////////////////////