VMR_Capture.h
上传用户:czshopping
上传日期:2022-05-22
资源大小:5430k
文件大小:3k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. //////////////////////////////////////////////////////////////////////
  2. //
  3. //  This class is designed to provide simple interface for 
  4. //  simultaneous Video Capture & Preview using DirectShow
  5. //
  6. //////////////////////////////////////////////////////////////////////
  7. //
  8. // References: MS DirectShow Samples
  9. //
  10. //
  11. //////////////////////////////////////////////////////////////////////
  12. //
  13. // This class was written by Sagar K.R . 
  14. //  Use of this class is not restricted in any
  15. // way whatsoever.Please report the bugs to krssagar@firsteccom.co.kr
  16. //
  17. // Special thanks to all the members at The Code Project! 
  18. // (www.codeproject.com)
  19. //
  20. //////////////////////////////////////////////////////////////////////
  21. // VMR_Capture.h: interface for the CVMR_Capture class.
  22. //
  23. //////////////////////////////////////////////////////////////////////
  24. #if !defined(AFX_VMR_CAPTURE_H__186091F3_30FA_4FAA_AC8B_EF25E8463B9A__INCLUDED_)
  25. #define AFX_VMR_CAPTURE_H__186091F3_30FA_4FAA_AC8B_EF25E8463B9A__INCLUDED_
  26. #if _MSC_VER > 1000
  27. #pragma once
  28. #endif // _MSC_VER > 1000
  29. //#include <streams.h>             //要访问DirectShow的接口必须包含该头文件
  30. //#pragma comment(lib,"StrmBase.lib")
  31. #include <dshow.h>
  32. #include <d3d9.h>
  33. #include <vmr9.h>
  34. #include <atlbase.h>
  35. //#pragma comment(lib, "Quartz.lib")
  36. //#pragma comment(lib,"Strmiids.lib")
  37. #define WM_GRAPHNOTIFY  WM_USER+13
  38. enum PLAYSTATE {Stopped, Paused, Running, Init};
  39. #include "MoveTrace.h"
  40. class CVMR_Capture  
  41. {
  42. public:
  43. CVMR_Capture();
  44. int EnumDevices(HWND hList);
  45. HRESULT Init(int iDeviceID,HWND hWnd,int iWidth,int iHeight);
  46. DWORD GetFrame(BYTE ** pFrame);
  47. BOOL Pause();
  48. DWORD ImageCapture(LPCTSTR szFile);
  49. DWORD GrabFrame();
  50. BOOL Trace(BYTE *pImageByte);
  51. BOOL m_bStorageData;
  52. virtual ~CVMR_Capture();
  53. CMoveTrace m_MoveTrace;
  54.    void MoveWindow(int x,int y,int nWidth,int nHeight);
  55.    BOOL CVMR_Capture::WriteAsBMP(char* szFileName,unsigned char* pImgData,int nWidth,int nHeight);
  56. protected:
  57. IGraphBuilder *m_pGB ;
  58. IMediaControl *m_pMC;
  59. IMediaEventEx *m_pME ;
  60. //IMediaEvent *pME ;
  61. IVMRWindowlessControl9 *m_pWC;
  62. IPin * m_pCamOutPin;
  63. IBaseFilter *m_pDF;
  64. PLAYSTATE m_psCurrent;
  65. int m_nWidth;
  66. int m_nHeight;
  67. BYTE *m_pFrame;
  68. long m_nFramelen;
  69. bool BindFilter(int deviceId, IBaseFilter **pFilter);
  70. HRESULT InitializeWindowlessVMR(HWND hWnd);
  71. HRESULT InitVideoWindow(HWND hWnd,int width, int height);
  72. void StopCapture();
  73. void CloseInterfaces(void);
  74. void DeleteMediaType(AM_MEDIA_TYPE *pmt);
  75. bool Convert24Image(BYTE *p32Img,BYTE *p24Img,DWORD dwSize32);
  76. CBitmap m_Bitmap;
  77. int m_iHeight;
  78. int m_iWidth;  //视频的宽高
  79. private:
  80. HWND m_hCapWnd;  //产生的扑捉的窗口句柄
  81. HWND m_hParentWnd;//用于扑捉的窗口句柄
  82. CDC *m_pDC;
  83. CDC m_MemDC;
  84. };
  85. static CVMR_Capture* lpVideo = NULL;
  86. #endif // !defined(AFX_VMR_CAPTURE_H__186091F3_30FA_4FAA_AC8B_EF25E8463B9A__INCLUDED_)