00001 /* 00002 * This file contains abstract class which represents working units. 00003 * 00004 * Author: 00005 * Tomas Mrkvicka 00006 * xmrkvi03@stud.fit.vutbr.cz 00007 * 00008 */ 00009 00010 // FORWARD DECLARATIONS 00011 namespace NSPipeline 00012 { 00013 class TUnit; 00014 }; 00015 00016 #ifndef _PIPELINE_UNIT_HH_ 00017 #define _PIPELINE_UNIT_HH_ 00018 00019 #include "pipeline/UnitTypes.h" 00020 #include "pipeline/ImageAbstract.h" 00021 00022 namespace NSPipeline 00023 { 00024 00025 //////////////////////////////////////////////////////////////////////////////// 00026 //////////////////////////////////////////////////////////////////////////////// 00027 //////////////////////////////////////////////////////////////////////////////// 00028 // TUnitInterface 00029 00030 /** Tato trida reprezentuje rozhrani pracovni jednotky. 00031 * 00032 * Toto rozhrani (nebo trida z nej odvozena) je dostupne aplikaci. 00033 * 00034 * U metod Start(), Stop() a Release() se predpoklada, ze budou volany pouze 00035 * z jednoho vlakna a tedy neni vyzadovana synchronizace pro vicevlaknovy pristup. 00036 * 00037 * Metoda GetType() typicky vraci konstantu a v takovem pripade soubezny pristup 00038 * nemusi byt synchronizovan. 00039 * 00040 * Metoda GetResult() vraci vysledky pro zadane snimky (podle ID snimku) - je volana pouze 00041 * jednim vlaknem, ale je nutne zajistit, ze vnitrni vlakno jednotky ukladajici vysledky 00042 * bude synchronizovano s vlaknem, ktere pristupuje k temto vysledkum. 00043 */ 00044 class TUnitInterface 00045 { 00046 //PUBLIC METHODS 00047 public: 00048 /** Vrati typ navratove hodnoty teto jednotky. 00049 */ 00050 virtual EnumUnitType GetType(void) = 0; 00051 00052 /** Vysledek pro snimek s pozadovanym identifikatorem. 00053 * 00054 * Muze vracet NULL pokud vysledek neni k dispozici. 00055 * 00056 * \param id [in] identifikator vysledku (z casove znacky) 00057 */ 00058 virtual TUnitRetTypeInterface* GetResult(DWORD id) = 0; 00059 00060 /** Vraci hodnotu udavajici pocet snimku, ktere jednotce 00061 * "utecou" behem zpracovani dvou snimkou. 00062 * 00063 * Tato hodnota se meni behem zpracovani a jednotka ji pocita jako 00064 * rozdil mezi ID poslednich dvou snimku. 00065 */ 00066 virtual DWORD GetFrameInterval() = 0; 00067 00068 /** Spusteni vypoctu jednotky. 00069 * 00070 * Vraci TRUE pokud jednotka jiz bezi nebo byla uspesne spustena. 00071 */ 00072 virtual BOOL Start(void) = 0; 00073 00074 /** Ukonceni vypoctu jednotky. 00075 * 00076 * \warning Musi uvolnit vsechny vysledky ktere jsou ulozene v jednotce! 00077 * 00078 * Vraci TRUE v pripade zastaveni jednotky, FALSE pri kriticke chybe. 00079 */ 00080 virtual BOOL Stop(void) = 0; 00081 00082 /** Odstrani jednotku. 00083 * 00084 * Pred odstranenim jednotky by mela byt jednotka zastavena volanim metody Stop. 00085 */ 00086 virtual void Release(void) = 0; 00087 00088 //PROTECTED METHODS 00089 protected: 00090 TUnitInterface(void){}; 00091 virtual ~TUnitInterface(void){}; 00092 00093 //PROTECTED FAKE METHODS 00094 protected: 00095 TUnitInterface( const TUnitInterface & orig ); ///< falesny kopirovaci konstruktor 00096 void operator=( const TUnitInterface & orig ); ///< falesny prirazovaci operator 00097 00098 }; 00099 //OK 2007-08-25 18:19:20 B04-315B\Tom 00100 00101 // TUnitInterface 00102 //////////////////////////////////////////////////////////////////////////////// 00103 //////////////////////////////////////////////////////////////////////////////// 00104 //////////////////////////////////////////////////////////////////////////////// 00105 00106 /** Typ DLL knihovny. 00107 * 00108 * Typ urcuje parametry funkci CreateUnit v DLL pres kterou se vytvari vypocetni jednotka. 00109 */ 00110 enum EnumDLLType 00111 { 00112 /** 00113 * Zakladni typ DLL - funkce CreateUnit vyzaduje pouze 00114 * ukazatel na rozhrani dispatcheru. 00115 * 00116 * CreateUnit( TDispatcherInterface * dispatcher ) 00117 */ 00118 ENUM_DLLTYPE_BASIC = 0, 00119 00120 /** 00121 * Funkce CreateUnit vyzaduje rozhrani dispatcheru 00122 * a jako druhy parametr retezec zakonceny nulou. 00123 * 00124 * CreateUnit( TDispatcherInterface * dispatcher, const char * string ) 00125 */ 00126 ENUM_DLLTYPE_STRING = 1, 00127 00128 ENUM_DLLTYPE_FORCED32 = 0x7fffffff ///< zarovnani na 32-bitu 00129 }; 00130 //OK 2007-08-25 18:19:18 B04-315B\Tom 00131 00132 //////////////////////////////////////////////////////////////////////////////// 00133 //////////////////////////////////////////////////////////////////////////////// 00134 //////////////////////////////////////////////////////////////////////////////// 00135 00136 /** Ukazatel na funkci pro ziskani informaci o typu navratove funkce CreateUnit. 00137 * 00138 * Funkce se jmenuje "GetType". 00139 */ 00140 typedef EnumDLLType (*PTR_DLLTYPE) (void); 00141 00142 /** Ukazatel na funkci z DLL knihovny, pres kterou lze ziskat vypocetni jednotku. 00143 * 00144 * Funkce se jmenuje "CreateUnit". 00145 */ 00146 typedef TUnitInterface* (*PTR_UNITGET_BASIC)( TDispatcherInterface * dispatcher ); 00147 00148 /** Ukazatel na funkce z DLL knihovny, pres kterou lze ziskat vypocetni jednotku. 00149 * 00150 * Funkce se jmenuje "CreateUnit". 00151 */ 00152 typedef TUnitInterface* (*PTR_UNITGET_STRING)( TDispatcherInterface * dispatcher, const char * str ); 00153 00154 }; //end of NSPipeline 00155 using namespace NSPipeline; 00156 00157 #endif