CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

DirectShow视频捕捉奇怪的一个问题

楼主fzfzfz()2006-03-12 00:04:51 在 VC/MFC / 图形处理/算法 提问

我用ICaptureGraphBuilder2来编写视频捕捉的程序,我用的是一个数码摄像头,就是视频聊天用的那种,代码如下,程序运行几次能正常显示摄像画面,但在不确定的次数后视频图像却不能在窗口上显示了,我是在一个对话框上面Render的,而这个时候我去打开“我的电脑->Dual-Mode   DSC(2770)   #2”时候,白色的客户区中间是一个灰色320x240的实矩形,而正常情况下它应该是动态的实时视频图像。重启机器后有时能恢复正常,有时不能,这是怎么回事呢?  
  ICaptureGraphBuilder2   *   pCGB2   =   NULL;  
  IGraphBuilder   *   pGB   =   NULL;  
  HRESULT   hr   =   CoCreateInstance(CLSID_CaptureGraphBuilder2,   NULL,    
  CLSCTX_INPROC_SERVER,   IID_ICaptureGraphBuilder2,   (void**)&pCGB2);  
  if   (SUCCEEDED(hr))  
  {  
  hr   =   CoCreateInstance(CLSID_FilterGraph,   NULL,  
  CLSCTX_INPROC_SERVER,   IID_IGraphBuilder,   (void**)&pGB);  
  if   (SUCCEEDED(hr))  
  {  
  pCGB2->SetFiltergraph(pGB);  
  }  
  else  
  {  
  pCGB2->Release();  
  return   E_FAIL;  
  }  
  }  
   
  ICreateDevEnum   *   pCreateEnum   =   NULL;  
  IEnumMoniker   *   pEnum   =   NULL;  
  hr   =   CoCreateInstance(CLSID_SystemDeviceEnum,   NULL,   CLSCTX_INPROC_SERVER,  
  IID_ICreateDevEnum,   (void**)(&pCreateEnum));  
  if   (SUCCEEDED(hr))  
  {  
  hr   =   pCreateEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,  
  &pEnum,   0);  
  }  
   
  IMoniker   *   pMoniker   =   NULL;  
  if   (pEnum->Next(1,   &pMoniker,   NULL)   !=   S_OK)  
  {  
  pEnum->Release();  
  pCreateEnum->Release();  
  pGB->Release();  
  pCGB2->Release();  
  return   hr;  
  }  
  IBaseFilter   *   pCap;  
  pMoniker->BindToObject(0,   0,   IID_IBaseFilter,   (void**)(&pCap));  
  pMoniker->Release();  
  pEnum->Release();  
  pCreateEnum->Release();  
   
  pGB->AddFilter(pCap,   L"Capture   Filter");  
  pCGB2->RenderStream(&PIN_CATEGORY_PREVIEW,   &MEDIATYPE_Video,  
  pCap,   NULL,   NULL);  
  pCGB2->Release();  
  pCap->Release();  
   
  IVideoWindow   *   pVidWnd   =   NULL;  
  pGB->QueryInterface(IID_IVideoWindow,   (void   **)&pVidWnd);  
  pVidWnd->put_Owner((OAHWND)m_hWnd);  
  pVidWnd->put_WindowStyle(WS_CHILD   |   WS_CLIPCHILDREN);  
  pVidWnd->put_Left(0);  
  pVidWnd->put_Top(0);  
  pVidWnd->put_Width(320);  
  pVidWnd->put_Height(240);  
  pVidWnd->put_Visible(OATRUE);  
  pVidWnd->Release();  
   
  IMediaControl   *   pMediaCtrl   =   NULL;  
                    pGB->QueryInterface(IID_IMediaControl,   (void   **)&pMediaCtrl);  
  pMediaCtrl->Run();  
  pMediaCtrl->Release();  
   
  pGB->Release();  
   
  return   hr; 问题点数:100、回复次数:4Top

1 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-12 17:55:39 得分 60

是不是刷新的问题?这个可能性应该不大!http://blog.csdn.net/rageliu/archive/2006/03/09/619991.aspx  
   
  确定接口都正确释放??采集filter等都是临界filter,不释放就不能再使用了.  
   
  还是要跟中调试  
   
  Top

2 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-12 17:58:47 得分 5

关注  
  Top

3 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-13 09:27:21 得分 35

IVideoWindow   *   pVidWnd   =   NULL;  
  pGB->QueryInterface(IID_IVideoWindow,   (void   **)&pVidWnd);  
  pVidWnd->put_Owner((OAHWND)m_hWnd);  
  pVidWnd->put_WindowStyle(WS_CHILD   |   WS_CLIPCHILDREN);  
  pVidWnd->put_Left(0);  
  pVidWnd->put_Top(0);  
  pVidWnd->put_Width(320);  
  pVidWnd->put_Height(240);  
  pVidWnd->put_Visible(OATRUE);  
  pVidWnd->Release();  
   
  上面的操作会影响刷新的,我在1楼给了个Blog,你看看,建议调试的时候去掉上面那段对视频窗口的操作看看是否还有那个问题Top

4 楼fzfzfz()回复于 2006-03-13 13:13:10 得分 0

pGB->Release()应该没有的,Release()了就没有Graph了Top

相关问题

  • DirectShow视频捕捉如何存为jpg
  • 视频捕捉卡
  • 如何使用DirectShow进行视频捕捉?
  • 一个用directshow实现的视频捕捉类
  • 高分求如何在directshow视频捕捉预览中叠加图形
  • 在视频捕捉和视频处理方面,用DirectShow,direcX,VFW,MCI等哪个较好?
  • 视频捕捉问题
  • 摄像头--视频捕捉
  • help 关于视频捕捉
  • 视频捕捉问题:

关键词

  • release
  • hr
  • ws
  • null
  • server
  • pvidwnd
  • pgb
  • pcgb
  • pcreateenum
  • pmediactrl

得分解答快速导航

  • 帖主:fzfzfz
  • rageliu
  • cyblueboy83
  • rageliu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo