00001 /* 00002 * This file contains class that load images from specified video sequence. 00003 * 00004 * Author: 00005 * Tomas Mrkvicka 00006 * xmrkvi03@stud.fit.vutbr.cz 00007 * 00008 */ 00009 00010 00011 #include "StdAfx.h" 00012 #include <tchar.h> 00013 #include <strsafe.h> 00014 #include "Camera.h" 00015 00016 //////////////////////////////////////////////////////////////////////////////// 00017 //////////////////////////////////////////////////////////////////////////////// 00018 //////////////////////////////////////////////////////////////////////////////// 00019 // TCameraDshow 00020 00021 /** Funkce pro vytvoreni tridy a preneseni ven z DLL. 00022 * 00023 * \warning Muze vratit NULL pri chybe. 00024 */ 00025 extern "C" TCameraAbstract* CreateCamera( void ) 00026 { 00027 return TCameraDshow::CreateCamera(); 00028 } 00029 00030 /** Tato staticka metoda vytvori kameru. 00031 * 00032 * \warning Vraci NULL pri chybe. 00033 */ 00034 TCameraDshow* TCameraDshow::CreateCamera( void ) 00035 { 00036 //vytvorime objekt 00037 TCameraDshow * cam = new TCameraDshow; 00038 00039 //inicializujeme 00040 if ( cam->Initialize() ) 00041 { 00042 //ok - kamera inicializovana v poradku 00043 return cam; 00044 } 00045 else 00046 { 00047 //nejaka chyba 00048 delete cam; 00049 return NULL; 00050 } 00051 } 00052 00053 /** Soukromy konstruktor. 00054 * 00055 * \warning Pouze vytvori objekt. Inicializace musi probehnout metodou Initialize() !!! 00056 */ 00057 TCameraDshow::TCameraDshow(void) 00058 { 00059 m_source = NULL; 00060 } 00061 00062 /** Soukromy destruktor. 00063 */ 00064 TCameraDshow::~TCameraDshow(void) 00065 { 00066 //odstranime pokud je potreba 00067 if ( m_source ) 00068 { 00069 m_source->Destroy(); 00070 delete m_source; 00071 m_source = NULL; 00072 } 00073 } 00074 00075 /** Tato metoda inicializuje tridu po vytvoreni. 00076 * 00077 * Vraci TRUE v pripade uspesne inicializace, jinak FALSE. 00078 */ 00079 bool TCameraDshow::Initialize( void ) 00080 { 00081 m_source = new TVideoDSFile; 00082 if ( m_source->Initialize() ) 00083 { 00084 return true; 00085 } 00086 else 00087 { 00088 delete m_source; 00089 m_source = NULL; 00090 00091 return false; 00092 } 00093 } 00094 00095 /** Velikost obrazku v bajtech. 00096 * 00097 * \warning Objekt musi byt radne inicializovan!!! 00098 */ 00099 DWORD TCameraDshow::GetDataSize(void) 00100 { 00101 return this->GetWidth() * this->GetHeight() * 3; 00102 } 00103 00104 /** Ulozi data do pripraveneho bufferu. 00105 * 00106 * \warning Objekt musi byt radne inicializovan!!! 00107 * 00108 * \param dest [in out] buffer pro data obrazku s minimalni velikosti TCameraDshow::GetDataSize 00109 */ 00110 void TCameraDshow::GetData(void * dest) 00111 { 00112 m_source->GetDataRGB( dest ); 00113 } 00114 00115 /** Vrati sirku obrazku v pixelech. 00116 * 00117 * \warning Objekt musi byt radne inicializovan!!! 00118 */ 00119 int TCameraDshow::GetWidth(void) 00120 { 00121 return m_source->GetWidth(); 00122 } 00123 00124 /** Vrati vysku obrazku v pixelech. 00125 * 00126 * \warning Objekt musi byt radne inicializovan!!! 00127 */ 00128 int TCameraDshow::GetHeight(void) 00129 { 00130 return m_source->GetHeight(); 00131 } 00132 00133 /** Zrusi tento objekt. 00134 */ 00135 void TCameraDshow::Destroy(void) 00136 { 00137 delete this; 00138 } 00139 00140 // TCameraDshow 00141 //////////////////////////////////////////////////////////////////////////////// 00142 //////////////////////////////////////////////////////////////////////////////// 00143 ////////////////////////////////////////////////////////////////////////////////