00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <streams.h>
00011 #include "atlbase.h"
00012
00013 #include "IGetFrame.h"
00014 #include "DeviceEnumerator.h"
00015
00016 class TVReader : public IGetFrameController
00017 {
00018 public:
00019 static char** listDevices();
00020
00021 TVReader(int nDevice);
00022 virtual ~TVReader();
00023
00024 int isNull();
00025
00026 BYTE* getFrame();
00027 int getFrameWidth();
00028 int getFrameHeight();
00029
00030
00031 STDMETHODIMP NextData(BYTE *data);
00032 STDMETHODIMP SetDataSizes(int width, int height,
00033 REFERENCE_TIME timePerFrame);
00034
00035
00036 STDMETHODIMP QueryInterface(const IID & riid, void **ppv);
00037 STDMETHODIMP_(ULONG) AddRef();
00038 STDMETHODIMP_(ULONG) Release();
00039
00040 private:
00041
00042 HRESULT buildGraph(int nDevice);
00043 HRESULT showError(const char* msg, HRESULT hr);
00044 HRESULT init(int nDevice);
00045
00046 static DeviceEnumerator _enum;
00047
00048 CCritSec _critSec;
00049
00050 BYTE* _currentData;
00051 BYTE* _newData;
00052 int _newAvailable;
00053
00054 int _width;
00055 int _height;
00056
00057 CComPtr<IGraphBuilder> _iBuilder;
00058 CComPtr<IMediaControl> _imCtrl;
00059
00060 };
00061
00062