#include "stdafx.h"
#include "CameraDS.h"
#pragma comment(lib,"Strmiids.lib")
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
class CSampleGrabberCB : public ISampleGrabberCB
{
public:
long lWidth;
long lHeight;
BOOL bGrabVideo;
public:
CSampleGrabberCB() {
lWidth = 0;
lHeight = 0;
bGrabVideo = FALSE;
}
STDMETHODIMP_(ULONG) AddRef() { return 2; }
STDMETHODIMP_(ULONG) Release() { return 1; }
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv) {
if (riid == IID_ISampleGrabberCB || riid == IID_IUnknown) {
*ppv = (void *) static_cast<ISampleGrabberCB*>(this);
return NOERROR;
}
return E_NOINTERFACE;
}
STDMETHODIMP SampleCB(double SampleTime, IMediaSample * pSample) {
return 0;
}
STDMETHODIMP BufferCB(double dblSampleTime, BYTE * pBuffer, long lBufferSize) {
if (!pBuffer) return E_POINTER;
return 0;
}
};
CSampleGrabberCB mCB;
CCameraDS::CCameraDS()
{
m_bConnected = false;
m_nWidth = 0;
m_nHeight = 0;
m_bLock = false;
m_bChanged = false;
// m_pFrame = NULL;
m_nBufferSize = 0;
m_pNullFilter = NULL;
m_pMediaEvent = NULL;
m_pSampleGrabberFilter = NULL;
m_pGraph = NULL;
CoInitialize(NULL);
}
CCameraDS::~CCameraDS()
{
CloseCamera();
CoUninitialize();
}
void CCameraDS::CloseCamera()
{
if(m_bConnected)
m_pMediaControl->Stop();
m_pGraph = NULL;
m_pDeviceFilter = NULL;
m_pMediaControl = NULL;
m_pSampleGrabberFilter = NULL;
m_pSampleGrabber = NULL;
m_pGrabberInput = NULL;
m_pGrabberOutput = NULL;
m_pCameraOutput = NULL;
m_pMediaEvent = NULL;
m_pNullFilter = NULL;
m_pNullInputPin = NULL;
//if (m_pFrame)
// cvReleaseImage(&m_pFrame);
if(!this->m_image.IsNull())
{
this->m_image.Destroy();
}
m_bConnected = false;
m_nWidth = 0;
m_nHeight = 0;
m_bLock = false;
m_bChanged = false;
m_nBufferSize = 0;
}
bool CCameraDS::OpenCamera(int nCamID, bool bDisplayProperties, int nWidth, int nHeight)
{
HRESULT hr = S_OK;
CoInitialize(NULL);
// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **)&m_pGraph);
hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (LPVOID *)&m_pSampleGrabberFilter);
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **) &m_pMediaControl);
hr = m_pGraph->QueryInterface(IID_IMediaEvent, (void **) &m_pMediaEvent);
hr = CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (LPVOID*) &m_pNullFilter);
hr = m_pGraph->AddFilter(m_pNullFilter, L"NullRenderer");
hr = m_pSampleGrabberFilter->QueryInterface(IID_ISampleGrabber, (void**)&m_pSampleGrabber);
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = MEDIATYPE_Video;
mt.subtype = MEDIASUBTYPE_RGB24;
mt.formattype = FORMAT_VideoInfo;
hr = m_pSampleGrabber->SetMediaType(&mt);
没有合适的资源?快使用搜索试试~ 我知道了~
VirtualCamera虚拟摄像头相关学习资源

共760个文件
h:631个
cpp:28个
bat:14个


温馨提示
VirtualCamera虚拟摄像头相关学习资源. 注意:因DirectShow的BaseClasses中wxdebug.cpp的DbgRegisterObjectDestruction存在问题,故在QQ中debug版本会崩溃,只能使用release版本测试。
资源推荐
资源详情
资源评论













收起资源包目录





































































































共 760 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论

- 香烟2019-10-15亲测有用,已经跑起来了
- 王小贝爱吃肉2019-06-21感谢感谢!
- halley21342018-08-02最近需要用到虚拟摄像头,学习下怎么开发的
- xiaoyaofriend2018-03-20谢谢 fenxiang 正在尝试编译中
- mouzhu90322017-09-27没下载说我下载了评论下

无稽长叹
- 粉丝: 22
- 资源: 20
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
