CameraLoader.cpp

Go to the documentation of this file.
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 ////////////////////////////////////////////////////////////////////////////////

Generated on Sat Nov 17 16:23:26 2007 for Image Processing Pipeline by  doxygen 1.4.6-NO