00001 /* 00002 * This file contains class that represents thread with camera input. 00003 * 00004 * Author: 00005 * Tomas Mrkvicka 00006 * xmrkvi03@stud.fit.vutbr.cz 00007 * 00008 */ 00009 00010 #include <windows.h> 00011 00012 //FORWARD DECLARATIONS 00013 namespace NSPipeline 00014 { 00015 class TCameraThread; 00016 }; 00017 00018 #ifndef _PIPELINE_CAMERATHREAD_HH_ 00019 #define _PIPELINE_CAMERATHREAD_HH_ 00020 00021 #include "pipeline/Thread.h" 00022 #include "pipeline/CriticalSection.h" 00023 #include "pipeline/Dispatcher.h" 00024 #include "pipeline/Image.h" 00025 #include "pipeline/CameraAbstract.h" 00026 00027 namespace NSPipeline 00028 { 00029 00030 //////////////////////////////////////////////////////////////////////////////// 00031 //////////////////////////////////////////////////////////////////////////////// 00032 //////////////////////////////////////////////////////////////////////////////// 00033 // TCameraThread 00034 00035 /** Tato trida reprezentuje vlakno s bezici kamerou. 00036 * 00037 * Kamera a dispatcher musi byt predany do objektu. Oba objekty musi byt pozdeji zniceny 00038 * po zniceni tohoto objektu (tedy tento objekt neprebira referenci a zodpovednost za tyto objekty). 00039 * 00040 * Pri vytvareni je pro objekt zadan interval v milisekundach, ktery uplyne mezi ziskanim dvou snimku. 00041 * 00042 * Trida vytvori pro kameru alokator snimku, jehoz velikost lze ovlivnit. Jakmile nejsou k dispozici 00043 * zadne dalsi snimky pak kamera negeneruje zadna dalsi snimky. 00044 * 00045 * \warning Tento objekt udrzuje manager snimku a proto muze byt odstranen pouze tehdy, kdyz v aplikaci 00046 * neexistuji reference na snimky. 00047 */ 00048 class TCameraThread 00049 { 00050 //PUBLIC METHODS 00051 public: 00052 TCameraThread( TDispatcher * dispatcher, TCameraAbstract * camera, DWORD sleepTime, DWORD reservedFrames = 100 ); 00053 ~TCameraThread(void); 00054 00055 BOOL Start(void); 00056 BOOL Stop(void); 00057 00058 DWORD GetSleepTime(void) const; 00059 00060 //STATIC PRIVATE METHODS 00061 private: 00062 static DWORD WINAPI TCameraDLLRun(void* ptr); 00063 00064 //PRIVATE FAKE METHODS 00065 private: 00066 TCameraThread( const TCameraThread & orig );///< falesny kopirovaci konstruktor 00067 void operator=( const TCameraThread & orig ); ///< falesny operator prirazeni 00068 00069 00070 //PRIVATE COMPONENTS 00071 private: 00072 TThread* m_thread; ///< vlakno pro beh teto kamery 00073 bool m_isRunning; ///< urcuje zda kamera (vlakno) bezi 00074 00075 TCameraAbstract* m_camera; ///< objekt pro ziskavani obrazovych dat (exteni objekt) 00076 DWORD m_sleepTime; ///< pocet milisekund mezi ziskanim dvou snimku 00077 00078 TDispatcher* m_dispatcher; ///< dispatcher do ktereho se predavaji vytvorene snimky 00079 ///< (externi objekt) 00080 00081 TImageSetManager* m_manager; ///< manazer snimku 00082 }; 00083 //OK 2007-08-25 15:21:35 B04-315B\Tom 00084 00085 /** Vrati cas, ktery uplyne mezi ziskanim dvou snimku z kamery. 00086 * 00087 * Cas je uveden v milisekundach. 00088 */ 00089 inline DWORD TCameraThread::GetSleepTime(void) const 00090 { 00091 return m_sleepTime; 00092 } 00093 //OK 2007-08-25 15:21:51 B04-315B\Tom 00094 00095 // TCameraThread 00096 //////////////////////////////////////////////////////////////////////////////// 00097 //////////////////////////////////////////////////////////////////////////////// 00098 //////////////////////////////////////////////////////////////////////////////// 00099 00100 }; //END of NSPipeline 00101 using namespace NSPipeline; 00102 00103 #endif