00001 /* 00002 * This file contains class that represents dispatcher between input (camera), frame queue 00003 * and working units. 00004 * 00005 * Author: 00006 * Tomas Mrkvicka 00007 * xmrkvi03@stud.fit.vutbr.cz 00008 * 00009 */ 00010 00011 namespace NSPipeline 00012 { 00013 class TDispatcher; 00014 }; 00015 00016 #ifndef _PIPELINE_DISPATCHER_HH_ 00017 #define _PIPELINE_DISPATCHER_HH_ 00018 00019 #include "pipeline/Image.h" 00020 #include "pipeline/FrameQueue.h" 00021 00022 namespace NSPipeline 00023 { 00024 00025 //////////////////////////////////////////////////////////////////////////////// 00026 //////////////////////////////////////////////////////////////////////////////// 00027 //////////////////////////////////////////////////////////////////////////////// 00028 // TDispatcher 00029 00030 /** Tato trida obsahuje naposledy ziskany snimek z kamery. 00031 * 00032 * Tento snimek musi byt zarazen do fronty snimku (TFrameQueue) a musi byt v TDispatcher k dispozici 00033 * az do prichodu do noveho snimku. Vypocetni jednotky si mohou tento snimek z TDispatcher vyzadat. 00034 * 00035 * Snimek ulozeny v TDispatcher ma minimalne jeden zamek!!! a tedy NESMI opustit frontu TFrameQueue!!! 00036 * Teprve po prichodu noveho snimku je ze stareho snimku uvolnen zamek. 00037 * 00038 * Dispatcher zaroven obsahuje informace o velikosti poskytovanych snimku. 00039 * Tato informace je uzitecna pri inicializaci vypocetnich jednotek, ktere takovou 00040 * informaci mohou vyuzit, protoze se predpoklada, ze za behu aplikace se tato velikost nebude menit. 00041 * Rozmery snimku musi byt do dispatcheru ulozeny pred vytvorenim prvni vypocetni jednotky, nejlepe 00042 * ihned jak je to mozne (po vytvoreni kamery). 00043 * 00044 * \note Pomoci parametru konstruktoru lze nastavit chovani dispatcheru tak, aby 00045 * nepreposilal snimky dale do aplikace. Tim je mozne pouzit cely vypocetni retezec 00046 * bez nutnosti zobrazovani snimku. 00047 */ 00048 class TDispatcher : public TDispatcherInterface 00049 { 00050 //PUBLIC OVERRIDEN METHODS 00051 public: 00052 virtual DWORD GetWidth(void); 00053 virtual DWORD GetHeight(void); 00054 00055 virtual TFrame * GetFrame(void); 00056 virtual TFrame * GetLockedFrame(void); 00057 00058 virtual ~TDispatcher(void); 00059 //PUBLIC METHODS 00060 public: 00061 TDispatcher( TFrameQueue * queue ); 00062 00063 void SetFramesInfo( DWORD width, DWORD height ); 00064 00065 void SetFrame( TFrameReal * frame ); 00066 00067 void Free(void); 00068 00069 //PRIVATE FAKE METHODS 00070 private: 00071 TDispatcher( const TDispatcher & orig ); ///< falesny kopirovaci konstruktor 00072 void operator=( const TDispatcher & orig ); ///< falesny operator prirazeni 00073 00074 //PRIVATE COMPONENTS 00075 private: 00076 DWORD m_width; ///< sirka poskytovanych snimku 00077 DWORD m_height; ///< vyska poskytovanych snimku 00078 00079 TCriticalSection m_critical; ///< kriticka sekce pro synchronizaci pristupu ke snimku 00080 ///< ulozenem v dispatcheru 00081 00082 TFrameReal* m_frame; ///< posledni snimek ulozeny v TDispatcher 00083 00084 TFrameQueue* m_queue; ///< ukazatel na frontu celeho retezce - je predana v konstruktoru 00085 ///< pokud je misto fronty predan NULL pak dispatcher nikam snimky neposila 00086 00087 }; 00088 //OK 2007-08-25 14:20:30 B04-315B\Tom 00089 00090 // TDispatcher 00091 //////////////////////////////////////////////////////////////////////////////// 00092 //////////////////////////////////////////////////////////////////////////////// 00093 //////////////////////////////////////////////////////////////////////////////// 00094 00095 }; //end of NSPipeline 00096 using namespace NSPipeline; 00097 00098 #endif