CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

在程序中更改Filter

楼主sanjiang()2001-07-08 20:15:10 在 专题开发/技术/项目 / 游戏开发 提问

我改了memfile这个例子,想用它来播放文件,但我怎样才能将它缺省调用的  
  MPEG   Video   Decoder这个Filter换成我自己的Filter呢?  
  如何编程实现?  
  问题点数:100、回复次数:7Top

1 楼cofei()回复于 2001-07-09 16:40:01 得分 0

gzTop

2 楼sanjiang()回复于 2001-07-09 21:25:10 得分 0

如何?  
  Top

3 楼sky_horse()回复于 2001-07-11 09:03:12 得分 20

用手工的方式,先用createinstance创建出你要用的filter,有的clsid可能要去查,然后用graphbuilder的方法addfilter加入到graph,再找到前一个filter的output   pin,与下一个filter的input   pin相连,大致步骤就是这样Top

4 楼sanjiang()回复于 2001-07-11 11:39:58 得分 0

是不是还要枚举各个pin?  
  有没有例子可以给我参考?Top

5 楼capboy(帽子)回复于 2001-07-11 11:54:54 得分 0

步骤和sky_horse()说的差不多,我也想知道怎么得到具体   的filter呢。我又怎么知道是个什么filter  
  是使用IEnumPins么?Top

6 楼roger_zhao(roger)回复于 2001-07-12 00:39:08 得分 80

先应该枚举设备,然后绑定在IBaseFilter对象上。具体的代码如下(只有枚举设备部分):  
  ICreateDevEnum   *pCreateDevEnum;  
  HRESULT   hr   =   CoCreateInstance(CLSID_SystemDeviceEnum,   NULL,CLSCTX_INPROC_SERVER,  
        IID_ICreateDevEnum,   (void**)&pCreateDevEnum);  
  if   (hr   !=   NOERROR)  
  {  
        TRACE("Error   Creating   Device   Enumerator\n");  
  }  
   
  IEnumMoniker   *pEm;  
  hr   =   pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,  
        &pEm,   0);  
  if   (hr   !=   NOERROR)  
  {  
        TRACE("Sorry,   you   have   no   video   capture   hardware\n");  
  }  
  pEm->Reset();  
  ULONG   cFetched;  
  IMoniker   *pM;  
  UINT         uIndex   =   0;  
  while(hr   =   pEm->Next(1,   &pM,   &cFetched),   hr==S_OK)  
  {  
        IPropertyBag   *pBag;  
        hr   =   pM->BindToStorage(0,   0,   IID_IPropertyBag,   (void   **)&pBag);  
        if(SUCCEEDED(hr))    
        {  
              VARIANT   var;  
              var.vt   =   VT_BSTR;  
              hr   =   pBag->Read(L"FriendlyName",   &var,   NULL);  
              char   szName[256];  
              WideCharToMultiByte(   CP_ACP,   0,   var.bstrVal,   -1,   szName,   256,   0,   0   );  
  DevMonikers.Add(   szName   );  
              SysFreeString(var.bstrVal);  
              pM->AddRef();  
              pBag->Release();  
  }  
  pM->Release();  
  uIndex++;  
  }  
  pEm->Release();Top

7 楼kissfire(kissfire)回复于 2002-03-18 18:21:37 得分 0

OKTop

相关问题

  • 程序中更改窗口的menus怎么写!?
  • 关于程序运行中更改公式问题
  • 要在程序中更改SQL的表名,请高手指点!
  • 如何在程序中动态的更改对话框的CAPTION?
  • 怎样手动和在程序中更改SEQUENCE的当前值?
  • 如何在程序中更改bitbtn,Form的图标?
  • 请问在SDI程序中如何更改标题栏
  • 在程序运行过程中更改Static控件的文本
  • 如何用程序更改IIS中虚拟目录的名称
  • 如何在程序中切换网关,更改IP,DNS

关键词

  • hr
  • pm
  • pbag
  • pcreatedevenum
  • filter
  • pem
  • szname
  • pin
  • clsid
  • var

得分解答快速导航

  • 帖主:sanjiang
  • sky_horse
  • roger_zhao

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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