DirectShow视频摄像

来源:互联网 发布:codeblocks运行c语言 编辑:程序博客网 时间:2024/05/16 14:52

以下为视频采集的主要代码(不全),不可直接编译。

完整代码见http://download.csdn.net/detail/u011073510/8319753



1:枚举设备(有些电脑连接了多个摄像头)

<pre name="code" class="cpp">//创建COM对象实例 ICreateDevEnum *pCreateDevEnum; HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void**)&pCreateDevEnum); //枚举每一个设备IMoniker *pM; //用这来表示一个设备while(hr = pEm->Next(1, &pM, &cFetched), hr == S_OK){}//枚举设备 


2:选择一设备(从中选择一个摄像头)

//连接到指定序号的设备pM->BindToObject(0, 0, IID_IBaseFilter, (void**)pFilter); //pFilter , IBaseFilter**类型 , pM(指定的IMoniker) //添加IBaseFilter 到 IGraphBuilderhr = m_pGB->AddFilter(m_pBF, L"Capture Filter");



3:采集视频设置

//创建m_pGrabBase ,由ISampleGrabebr 类型的m_pGrabber 作为参数初始化  CComQIPtr<IBaseFilter, &IID_IBaseFilter> pGrabBase(m_pGrabber); //添加pGrabBase到IGraphBuilderhr = m_pGB->AddFilter(pGrabBase, L"Grabber"); //预览或采集视频 开始获取摄像头拍摄的信息hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,m_pBF,pGrabBase,NULL); //设置回调对象,每次获取完摄像头像素信息后系统自动调用m_cb(CSampleCB类型)的成员函数  BufferCB(double , BYTE *pBuffer, long lBufferSize)hr = m_pGrabber->SetCallback(&m_cb, 1); 



0 0
原创粉丝点击