仿照Bouncing Ball写了个推模式的Source Filter,却找不到输出Pin,急啊,陆老师和各位帮忙啊,多谢了!

gaofg 2005-08-23 02:57:50
我按照DirectShow中的例子Bouncing Ball,自己实现了一个推模式的Source Filter,接收来自网络的数据并一帧一帧传给下级解码器。在Graph Edit中试验正常,可以成功的建立链路并显示出图像来。但实用程序实现时,遇到下面的问题。
创建Filter:
hr = CoCreateInstance(CLSID_MPEG4Receiver, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (void **)&m_pRecvFilter);

再执行:
m_pRecvFilter->FindPin(L"Out", &pPinDout);

结果pPinDout总为空。取不到输出Pin,后续的工作就不能进行了。
我开始以为是Debug版本的原因,但编译成Release版也是一样。而且那个例子Bouncing Ball也是一样。我采用同样的方式创建一个Bouncing Ball的Filter再通过FindPin获取输出Pin,结果也为空。
采用陆老师书上的根据友好名枚举绑定的方法创建这两个Filter也是找不到输出Pin。但是采用后面这种方法创建一个ffdshow的Filter,就可以找到。
是不是Filter写的有问题啊?
项目紧,急啊。请各位赐教。多谢了!


...全文
206 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofg 2005-08-31
  • 打赏
  • 举报
回复
谢谢大家。问题早解决了。未及时结贴,请原谅。
vencent 2005-08-25
  • 打赏
  • 举报
回复
yyhzpk 2005-08-24
  • 打赏
  • 举报
回复
对于source filter,可用下面的方法,一定可以实现的:
HRESULT CAV::GetUnconnectedPin(IBaseFilter *pFilter,PIN_DIRECTION PinDir,IPin **ppin)
{
IEnumPins *pEnum = 0;
IPin *pPinl;

HRESULT hr = pFilter->EnumPins(&pEnum);
if(FAILED(hr))
{
return hr;
}
while (pEnum->Next(1,&pPinl,NULL)==S_OK)
{
PIN_DIRECTION ThisPinDir;
pPinl->QueryDirection(&ThisPinDir);
if(ThisPinDir == PinDir)
{
IPin *pTmp = 0;
hr = pPinl->ConnectedTo(&pTmp);
if(SUCCEEDED(hr))
{
pTmp->Release();
}
else
{
pEnum->Release();
*ppin = pPinl;
return S_OK;
}
}
pPinl->Release();
}
pEnum->Release();
return E_FAIL;
}
GetUnconnectedPin(m_pSouce,PINDIR_OUTPUT,&m_pSout);
ablewindy 2005-08-24
  • 打赏
  • 举报
回复
插一个你的下级Filter,然后直接连接两个Filter试试!是不是可以避开这个问题?
happydeer 2005-08-24
  • 打赏
  • 举报
回复
你可以通过IBaseFilter::EnumPins来枚举filter的所有Pin;得到Pin之后还可以调用IPin::QueryPinInfo查看Pin的方向、名字等信息。
javabean 2005-08-23
  • 打赏
  • 举报
回复
关注。FindPin方法一定需要重载吗?
日总是我哥 2005-08-23
  • 打赏
  • 举报
回复
是不是那个Filter没有重写FindPin方法?

也可以通过EnumPins来获取。

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧