FrameQueue.h

Go to the documentation of this file.
00001 /*
00002 *       This file contains class that represents queue of frames that comes from
00003 *       dispatcher and wait for displaying in renderer.
00004 *
00005 *       Author:
00006 *                       Tomas Mrkvicka
00007 *                       xmrkvi03@stud.fit.vutbr.cz
00008 *
00009 */
00010 
00011 #include <queue>
00012 using namespace std;
00013 
00014 // FORWARD DECLARATIONS
00015 namespace NSPipeline
00016 {
00017         class TFrameQueue;
00018 };
00019 
00020 #ifndef _PIPELINE_FRAMEQUEUE_HH_
00021 #define _PIPELINE_FRAMEQUEUE_HH_
00022 
00023 #include "pipeline/Image.h"
00024 #include "pipeline/CriticalSection.h"
00025 
00026 namespace NSPipeline
00027 {
00028 
00029 ////////////////////////////////////////////////////////////////////////////////
00030 ////////////////////////////////////////////////////////////////////////////////
00031 ////////////////////////////////////////////////////////////////////////////////
00032 // TFrameQueue
00033 
00034 /** Fronta snimku (FIFO).
00035 *
00036 *       Obsahuje dve vnitrni fronty - vyrovnavaci buffer a vystupni frontu.
00037 *
00038 *       Vnitrni buffer obsahuje snimky, ktere nelze zobrazit a zajistuje tedy plynulost zobrazovani.
00039 *       Vystupni fronta pak obsahuje snimky, ktere vystoupily z vnitrniho bufferu a mohou byt
00040 *       ziskany pro zobrazenu.
00041 *
00042 *       Velikost vnitrniho bufferu lze menit za behu aplikace a tim urcovat zpozdeni.
00043 *
00044 *       Pokud je snimek jeste zpracovavan nejakou jednotkou pak by vystupni fronta nemela pustit snimek
00045 *       ven z fronty - to je zajisteno zamkem na snimku od dane jednotky.
00046 *
00047 *       Fronta nema vlastni vlakno (neni to nutne), ale jeji metody jsou zabezpecene pro vicenasobny pristup.
00048 *
00049 *       Vstupem snimku do fronty je tomuto zvysen pocet referenci. Fronta nikdy nezvysuje pocet zamku na snimku.
00050 *
00051 *       Snimek je do fronty automaticky zaslan dispatcherem, kteremu je fronta predana jako parameter.
00052 *
00053 *       Dulezita vlastnost je, ze jakmile je snimek ve fronte zarazen pak uz se nemuze zvysovat pocet zamku
00054 *       na nem. Zamek totiz lze na snimek pridat pouze v dispatcheru.
00055 */
00056 class TFrameQueue
00057 {
00058 //PUBLIC METHODS
00059 public:
00060                                                 TFrameQueue(void);
00061                                                 ~TFrameQueue(void);
00062 
00063         void                            AddFrame( TFrameReal * frame);
00064         TFrameReal*                     GetRenderableFrame(void);
00065 
00066         DWORD                           GetInputBufferLength(void) const;
00067         void                            SetInputBufferLength( DWORD length );
00068 
00069         void                            Free(void);
00070 
00071 //PRIVATE FAKE METHODS
00072 private:
00073                                                 TFrameQueue( const TFrameQueue & orig );        ///< falesny kopirovaci konstruktor
00074         void                            operator=( const TFrameQueue & orig );          ///< falesny operator prirazeni
00075 
00076 //PRIVATE COMPONENTS
00077 private:
00078         DWORD                                           m_length;               ///< delka vnitrniho buffer
00079 
00080         queue<TFrameReal*>                      m_buffer;               ///< vnitrni buffer
00081         queue<TFrameReal*>                      m_frames;               ///< vystupni fronta snimku
00082 
00083         TCriticalSection                        m_critical;             ///< kriticka sekce pro pristup ke snimkum z fronty
00084 
00085 };
00086 //OK 2007-08-25 12:07:09 B04-315B\Tom
00087 
00088 // TFrameQueue
00089 ////////////////////////////////////////////////////////////////////////////////
00090 ////////////////////////////////////////////////////////////////////////////////
00091 ////////////////////////////////////////////////////////////////////////////////
00092 
00093 }; //end of NSPipeline
00094 using namespace NSPipeline;
00095 
00096 #endif

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