高手帮忙解决filter连接的问题,xvid MPEG-4 codec 和Avi Mux连接失败??

enoughtoo 2006-07-05 01:27:44
我重新编码一个avi文件,GraphEdit里filter连接顺序为source.avi--->Avi splitter--->Avi Decompressor--->Xvid MPEG-4 Codec--->Avi Mux--->new.avi,运行得到的new.avi确实是xvid编码(用Gspot检查过)。

程序里建立filter为CLSID_AsyncReader--->CLSID_AviSplitter--->CLSID_AVIDec--->CLSID_Xvid(通过枚举VideoCompressorCategory得到)--->CLSID_AviDest--->CLSID_FileWriter。
单步运行程序显示CLSID_Xvid--->CLSID_AviDest连接建立失败

是不是我的filter连接顺序有问题,还是需要什么其他的filter??
急问!盼答!thx~~
...全文
224 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bitgold 2006-07-06
"e:\1.avi"应该写成"e:\\1.avi"
回复
enoughtoo 2006-07-05
我改成CLSID_AsyncReader--->CLSID_AviSplitter--->CLSID_AVIDec--->CLSID_Xvid(通过枚举VideoCompressorCategory得到)--->CLSID_VideoRenderer就能够运行hr = pControl->Run();

难道说是写文件的filter出错?代码如下,达人帮忙看一下吧

hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_ALL,IID_IBaseFilter,(void**)&pFileDest);
if(hr!=S_OK)
{
TRACE("Create File Write => Failsed\n");
pFileDest->Release();
return;
}

IFileSinkFilter * pdes = NULL;

hr = pFileDest->QueryInterface(IID_IFileSinkFilter,(void**)&pdes);
if(hr!=S_OK)
{
TRACE("Create File Write Interface => Failsed\n");
pdes->Release();
return;
}

hr = pdes->SetFileName(L"e:\1.avi",NULL);
if(hr!=S_OK)
{
TRACE("Set File Write => Failsed\n");
pdes->Release();
return;
}
回复
enoughtoo 2006-07-05
运行hr = pControl->Run();出错,返回hr为-2147024864,换算到16进制FFFFFFFF80070020
回复
enoughtoo 2006-07-05
连接我检查好了,完成了建立,运行hr = pControl->Run();出错,返回hr为-值!这是什么问题啊?
回复
bitgold 2006-07-05
我觉得你这是个很常见的链接,从流程看没有问题,而且我也这么连过,运行过,没有问题。
问题可能出在你创建的Filter不正确,所以你创建Filter后,获取FilterInfo看一下,是不是你需要创建的Filter,有时可能因为GUID不一样,创建成功了,但不是你想要的Filter。
回复
相关推荐
发帖
多媒体/流媒体开发
创建于2007-08-27

2451

社区成员

专题开发/技术/项目 多媒体/流媒体开发
申请成为版主
帖子事件
创建了帖子
2006-07-05 01:27
社区公告
暂无公告