00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <windows.h>
00012 #include <dshow.h>
00013 #include <streams.h>
00014
00015 namespace NSCameras
00016 {
00017 class TDSSampler;
00018 class TVideoDSFile;
00019 };
00020
00021 #ifndef _CAMERAS_VIDEODS_HH_
00022 #define _CAMERAS_VIDEODS_HH_
00023
00024 namespace NSCameras
00025 {
00026
00027
00028
00029
00030
00031
00032
00033 struct __declspec( uuid("{0F53C699-B463-4c12-AAD1-FEB0A3EA1E40}") ) CLSID_Sampler;
00034
00035
00036
00037
00038 // TDSSampler
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class TDSSampler : public CBaseVideoRenderer
00052 {
00053 //PUBLIC OVERRIDEN METHODS
00054 public:
00055 TDSSampler( IUnknown* unk, HRESULT *hr );
00056 ~TDSSampler();
00057
00058 HRESULT CheckMediaType( const CMediaType* media );
00059 HRESULT DoRenderSample( IMediaSample* sample);
00060 HRESULT ShouldDrawSampleNow( IMediaSample* sample, REFERENCE_TIME* start, REFERENCE_TIME* stop );
00061
00062 //PUBLIC METHODS
00063 public:
00064 BITMAPINFOHEADER GetFrameInfo(void) const;
00065 void GetData( void * data );
00066
00067 int GetWidth(void) const;
00068 int GetHeight(void) const;
00069
00070 //PRIVATE COMPONENTS
00071 private:
00072 BITMAPINFOHEADER m_info; ///< informace o vstupnim datovem toku
00073
00074 bool m_rowsFliped; ///< urcuje zda jsou radky ukladany odspodu
00075 int m_rgb_width; ///< sirka snimku v pixelech
00076 int m_rgb_height; ///< vyska snimku v pixelech
00077 int m_rgb_size; ///< velikost snimku v bajtech ( W * H * 3 )
00078
00079 int m_img_stride; ///< pocet bajtu v jednom radku zdrojovych snimku
00080 int m_img_align; ///< pocet zarovnavacich bajtu v jednom radku
00081
00082 BYTE* m_data1; ///< snimek ve formatu RGB
00083 BYTE* m_data2; ///< snimek ve formatu RGB - do nej se zapisuje a nasledne
00084
00085
00086 CCritSec m_cs; ///< kriticka sekce pro pristup k M_READ1
00087 };
00088
00089
00090
00091 inline int TDSSampler::GetWidth(void) const
00092 {
00093 return m_rgb_width;
00094 }
00095
00096
00097
00098 inline int TDSSampler::GetHeight(void) const
00099 {
00100 return m_rgb_height;
00101 }
00102
00103 // TDSSampler
00104
00105
00106
00107 // TVideoDSFile
00108
00109
00110
00111
00112
00113 class TVideoDSFile
00114 {
00115 //PUBLIC METHODS
00116 public:
00117 TVideoDSFile(void);
00118 ~TVideoDSFile(void);
00119
00120 bool Initialize( const char * filename );
00121 bool Destroy(void);
00122
00123 int GetWidth(void) const;
00124 int GetHeight(void) const;
00125
00126 void GetDataRGB( void * data );
00127
00128 //PRIVATE COMPONENTS
00129 private:
00130 IGraphBuilder* m_graph; ///< graf sestaveny pro prehravani videa
00131 IMediaControl* m_ctrl; ///< rozhrani pro rizeni prehravani
00132 TDSSampler* m_sampler; ///< vlastni sampler pro ziskavani obrazku
00133 IMediaSeeking* m_seek; ///< rozhrani pro moznost navratu na zacatek
00134
00135 LONGLONG m_length; ///< delka videa zjistena pri nacteni
00136
00137 int m_width; ///< sirka snimku v pixelech
00138 int m_height; ///< vyska snimku v pixelech
00139 };
00140
00141
00142
00143 inline int TVideoDSFile::GetWidth(void) const
00144 {
00145 return m_width;
00146 }
00147
00148
00149
00150 inline int TVideoDSFile::GetHeight(void) const
00151 {
00152 return m_height;
00153 }
00154
00155 // TVideoDSFile
00156
00157
00158
00159
00160 }; //END of namespace NSCameras
00161 using namespace NSCameras;
00162
00163 #endif