00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <streams.h>
00011 #include "atlbase.h"
00012
00013 #include "IGetFrame.h"
00014
00016 class VideoReader : public IGetFrameController
00017 {
00018 public:
00019 VideoReader(const char *name, int cacheSize = 20);
00020 virtual ~VideoReader();
00021 int isNull();
00022
00023 int getLength();
00024 BYTE* getFrame(int n);
00025 int getFrameWidth();
00026 int getFrameHeight();
00027
00028
00029 STDMETHODIMP NextData(BYTE *data);
00030 STDMETHODIMP SetDataSizes(int width, int height,
00031 REFERENCE_TIME timePerFrame);
00032
00033
00034 STDMETHODIMP QueryInterface(const IID & riid, void **ppv);
00035 STDMETHODIMP_(ULONG) AddRef();
00036 STDMETHODIMP_(ULONG) Release();
00037
00038
00039 private:
00040
00041 HRESULT buildGraph(const char* filename);
00042 HRESULT showError(const char* msg, HRESULT hr);
00043 HRESULT init(const char *filename, int cacheSize);
00044
00046 void readFrames(int first);
00047
00048 CComPtr<IGraphBuilder> _iBuilder;
00049 CComPtr<IMediaControl> _imCtrl;
00050 CComPtr<IMediaSeeking> _imSeek;
00051 CComPtr<IMediaEvent> _imEvent;
00052
00053 BYTE** _data;
00054 int _dataSize;
00055 int _dataOffset;
00056 int _dataFree;
00057 int _usingMediaTime;
00058
00059 int _width;
00060 int _height;
00061 REFERENCE_TIME _timePerFrame;
00062 int _length;
00063 int _empty;
00064
00065 int _testingEnd;
00066 };
00067
00068