66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
#ifndef WinMfImageGrabber_h__
|
|
#define WinMfImageGrabber_h__
|
|
|
|
#include <mfidl.h>
|
|
#include "../RawBuffer.h"
|
|
#include "../Types.h"
|
|
|
|
namespace LifeCore {
|
|
|
|
class WebCamera;
|
|
class WinMfImageGrabber : IMFSampleGrabberSinkCallback {
|
|
public:
|
|
WinMfImageGrabber(WebCamera* cam);
|
|
~WinMfImageGrabber();
|
|
HRESULT initImageGrabber(IMFMediaSource *pSource, GUID VideoFormat);
|
|
HRESULT startGrabbing(void);
|
|
void stopGrabbing();
|
|
|
|
// IUnknown methods
|
|
STDMETHODIMP QueryInterface(REFIID iid, void** ppv);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
// IMFClockStateSink methods
|
|
STDMETHODIMP OnClockStart(MFTIME hnsSystemTime, LONGLONG llClockStartOffset);
|
|
STDMETHODIMP OnClockStop(MFTIME hnsSystemTime);
|
|
STDMETHODIMP OnClockPause(MFTIME hnsSystemTime);
|
|
STDMETHODIMP OnClockRestart(MFTIME hnsSystemTime);
|
|
STDMETHODIMP OnClockSetRate(MFTIME hnsSystemTime, float flRate);
|
|
|
|
// IMFSampleGrabberSinkCallback methods
|
|
STDMETHODIMP OnSetPresentationClock(IMFPresentationClock* pClock);
|
|
STDMETHODIMP OnProcessSample(REFGUID guidMajorMediaType, DWORD dwSampleFlags,
|
|
LONGLONG llSampleTime, LONGLONG llSampleDuration, const BYTE * pSampleBuffer,
|
|
DWORD dwSampleSize);
|
|
STDMETHODIMP OnShutdown();
|
|
bool processGrabbing();
|
|
RawBuffer<uint8>* GetImage();
|
|
private:
|
|
WebCamera* camera;
|
|
long m_cRef;
|
|
//IMFMediaSource *ig_pSource;
|
|
IMFMediaSession *ig_pSession;
|
|
IMFTopology *ig_pTopology;
|
|
RawBuffer<uint8>* buffer_first;
|
|
RawBuffer<uint8>* buffer_second;
|
|
RawBuffer<uint8>* buffer_active;
|
|
|
|
HRESULT CreateTopology(IMFMediaSource *pSource, IMFActivate *pSinkActivate, IMFTopology **ppTopo);
|
|
HRESULT AddSourceNode(
|
|
IMFTopology *pTopology,
|
|
IMFMediaSource *pSource,
|
|
IMFPresentationDescriptor *pPD,
|
|
IMFStreamDescriptor *pSD,
|
|
IMFTopologyNode **ppNode);
|
|
|
|
HRESULT AddOutputNode(
|
|
IMFTopology *pTopology,
|
|
IMFActivate *pActivate,
|
|
DWORD dwId,
|
|
IMFTopologyNode **ppNode);
|
|
};
|
|
|
|
}
|
|
#endif // WinMfImageGrabber_h__
|