Files
LifeProject/LifeCore/media/WinMfImageGrabber.h
T

66 lines
1.9 KiB
C++
Raw Normal View History

2025-05-13 02:46:21 +03:00
#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__