00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef DSVIDCAPMANAGER_H_
00026 #define DSVIDCAPMANAGER_H_
00027
00028 #include <list>
00029
00030 #include "CaptureManager.h"
00031 #include "SampleGrabberCallback.h"
00032 #include "avcap-export.h"
00033
00034 namespace avcap
00035 {
00036 class DS_DeviceDescriptor;
00037 class DS_FormatManager;
00038 class IOBuffer;
00039 class CaptureHandler;
00040 class SampleGrabberCallback;
00041
00043
00044 class AVCAP_Export DS_VidCapManager : public CaptureManager
00045 {
00046 private:
00047 typedef std::list<IOBuffer*> IOBufList;
00048
00049 DS_DeviceDescriptor* mDSDeviceDescriptor;
00050 SampleGrabberCallback* mGrabberCallback;
00051 HANDLE mLock;
00052 int mSequence;
00053 int mNumBuffers;
00054
00055 public:
00056 DS_VidCapManager(DS_DeviceDescriptor* dd, DS_FormatManager* fmt_mgr,
00057 int nbufs = DEFAULT_BUFFERS);
00058
00059 virtual ~DS_VidCapManager();
00060
00061 int init();
00062
00063 int destroy();
00064
00065 int startCapture();
00066
00067 int stopCapture();
00068
00069 int getNumIOBuffers();
00070
00071 private:
00072 IOBuffer* dequeue();
00073
00074 int enqueue(IOBuffer* buf);
00075
00076 friend class IOBuffer;
00077 friend class SampleGrabberCallback;
00078 };
00079
00080 class MutexGuard
00081 {
00082 private:
00083 HANDLE mLock;
00084
00085 public:
00086 inline MutexGuard(HANDLE lock) :
00087 mLock(lock)
00088 { WaitForSingleObject(mLock, INFINITE); }
00089
00090 inline virtual ~MutexGuard()
00091 { ReleaseMutex(mLock); }
00092 private:
00093 inline MutexGuard()
00094 {}
00095 };
00096 }
00097
00098 #endif // DSVIDCAPMANAGER_H_