在程序中更改Filter

sanjiang 2001-07-08 08:15:10
我改了memfile这个例子,想用它来播放文件,但我怎样才能将它缺省调用的
MPEG Video Decoder这个Filter换成我自己的Filter呢?
如何编程实现?
...全文
82 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kissfire 2002-03-18
OK
  • 打赏
  • 举报
回复
roger_zhao 2001-07-12
先应该枚举设备,然后绑定在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();
  • 打赏
  • 举报
回复
capboy 2001-07-11
步骤和sky_horse()说的差不多,我也想知道怎么得到具体 的filter呢。我又怎么知道是个什么filter
是使用IEnumPins么?
  • 打赏
  • 举报
回复
sanjiang 2001-07-11
是不是还要枚举各个pin?
有没有例子可以给我参考?
  • 打赏
  • 举报
回复
sky_horse 2001-07-11
用手工的方式,先用createinstance创建出你要用的filter,有的clsid可能要去查,然后用graphbuilder的方法addfilter加入到graph,再找到前一个filter的output pin,与下一个filter的input pin相连,大致步骤就是这样
  • 打赏
  • 举报
回复
sanjiang 2001-07-09
如何?
  • 打赏
  • 举报
回复
cofei 2001-07-09
gz
  • 打赏
  • 举报
回复
相关推荐
发帖
游戏开发
加入

8138

社区成员

游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
申请成为版主
帖子事件
创建了帖子
2001-07-08 08:15
社区公告
暂无公告