escapi 4.0.0

Extremely Simple Capture API (ESCAPI) - simple webcam API for windows
#pragma once


class CaptureClass : public IMFSourceReaderCallback
{
public:

	CaptureClass();
	~CaptureClass();
	STDMETHODIMP QueryInterface(REFIID aRiid, void** aPpv);
	STDMETHODIMP_(ULONG) AddRef();
	STDMETHODIMP_(ULONG) Release();
	STDMETHODIMP OnReadSample(
		HRESULT aStatus,
		DWORD aStreamIndex,
		DWORD aStreamFlags,
		LONGLONG aTimestamp,
		IMFSample *aSample
		);
	STDMETHODIMP OnEvent(DWORD, IMFMediaEvent *);
	STDMETHODIMP OnFlush(DWORD);
	int escapiPropToMFProp(int aProperty);
	int setProperty(int aProperty, float aValue, int aAuto);
	int getProperty(int aProperty, float &aValue, int &aAuto);
	BOOL isFormatSupported(REFGUID aSubtype) const;
	HRESULT getFormat(DWORD aIndex, GUID *aSubtype) const;
	HRESULT setConversionFunction(REFGUID aSubtype);
	HRESULT setVideoType(IMFMediaType *aType);
	int isMediaOk(IMFMediaType *aType, int aIndex);
	int scanMediaTypes(unsigned int aWidth, unsigned int aHeight);
	HRESULT initCapture(int aDevice);
	void deinitCapture();

	long                    mRefCount;        // Reference count.
	CRITICAL_SECTION        mCritsec;

	IMFSourceReader         *mReader;
	IMFMediaSource			*mSource;

	LONG                    mDefaultStride;
	IMAGE_TRANSFORM_FN      mConvertFn;    // Function to convert the video to RGB32

	unsigned int			*mCaptureBuffer;
	unsigned int			mCaptureBufferWidth, mCaptureBufferHeight;
	int						mErrorLine;
	int						mErrorCode;
	int						mWhoAmI;
	unsigned int			*mBadIndex;
	unsigned int			mBadIndices;
	unsigned int			mMaxBadIndices;
	unsigned int			mUsedIndex;
	int						mRedoFromStart;
};