www.pudn.com > 摄像头捕获C++类.rar > MyCapVideo.h
//MyCapVideo.h
#pragma once
#include "Dshow.h"
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
class MyCapVideo
{
public:
enum EnumType
{
EnumAudioCapFilter,
EnumAudioCompressFilter,
EnumVideoCapFilter,
EnumVideoCompressFilter
} ;
public:
char szCaptureFile[MAX_PATH];
WORD wCapFileSize; // size in Meg
ICaptureGraphBuilder2 *pBuilder;
IGraphBuilder *pFg;
IBaseFilter *pVCap, *pACap;
IBaseFilter *pVCP,*pACP; //压缩
IBaseFilter *pAM; //Avi Muxer
IBaseFilter *pFW; //File Writter
IFileSinkFilter *pSink;
IBaseFilter *pRender;
IConfigAviMux *pConfigAviMux;
IVideoWindow *pVW;
IMediaControl *pMC;
IMediaEventEx *pME;
IAMDroppedFrames *pDF;
IAMVideoCompression *pVC;
IAMVfwCaptureDialogs *pDlg;
IAMStreamConfig *pASC; // for audio cap
IAMStreamConfig *pVSC; // for video cap
int iMasterStream;
BOOL fCaptureGraphBuilt;
BOOL fPreviewGraphBuilt;
BOOL fCapturing;
BOOL fPreviewing;
BOOL fCapAudio;
int iVideoDevice;
int iAudioDevice;
double FrameRate;
BOOL fWantPreview;
long lCapStartTime;
long lCapStopTime;
char achFriendlyName[120];
BOOL fUseTimeLimit;
DWORD dwTimeLimit;
// debug
DWORD g_dwGraphRegister;
BOOL bGraphBuilt; //是否创建过
public:
MyCapVideo();
~MyCapVideo();
HRESULT GetInterfaces(void);
void CloseInterfaces(void);
void SetCapDevice();
int EnumFilters(EnumType enum_type, bool Visit(MyCapVideo *m_cap,IBaseFilter *pFilter,CString Name));
/*
int EnumVideoCapFilters(IBaseFilter **pVCap,CString &Name);
int EnumVideoCompressFilters(IBaseFilter **pCCap,CString &Name);
int EnumAudioCapFilters(IBaseFilter **pVCap,CString &Name);
int EnumAudioCompressFilters(IBaseFilter **pACP,CString &Name);
*/
HRESULT ConnectFilters(IBaseFilter* pUpFilter, IBaseFilter* pDownFilter);
HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister) ;
void RemoveGraphFromRot(DWORD pdwRegister);
bool MyCapVideo::CaptureToFile(LPTSTR AviFileName);
bool MyCapVideo::StopCapture();
};
bool SetAudioDevice(MyCapVideo *m_cap,IBaseFilter *pFilter,CString Name);
bool SetAudioCompress(MyCapVideo *m_cap,IBaseFilter *pFilter,CString Name);
bool SetVideoDevice(MyCapVideo *m_cap,IBaseFilter *pFilter,CString Name);
bool SetVideoCompress(MyCapVideo *m_cap,IBaseFilter *pFilter,CString Name);