菜鸟问题,在DirectShow中如何获得CLSID_AviSplitter的两个Output pin?

sevecol 2002-12-18 07:23:28
谢谢
...全文
43 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevecol 2002-12-20
  • 打赏
  • 举报
回复
to tony_1029(tian):
谢谢了。
tony_1029 2002-12-20
  • 打赏
  • 举报
回复
你没有连接Spliter的Input Pin,他的Output Pin就是没有的。先把Input Pin和Source Filter连接了以后你就可以看到了。
matrass_zhao 2002-12-19
  • 打赏
  • 举报
回复
IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir)
{
BOOL bFound = FALSE;
IEnumPins *pEnum;
IPin *pPin;

pFilter->EnumPins(&pEnum);
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
pPin->QueryDirection(&PinDirThis);
if (bFound = (PinDir == PinDirThis))
break;
pPin->Release();
}
pEnum->Release();
return (bFound ? pPin : 0);
}

这段代码可以参考。
另外,你需要得到sourcefilter的IBaseFilter指针
醉马不肖 2002-12-19
  • 打赏
  • 举报
回复
IBaseFilter->FindPin
sevecol 2002-12-19
  • 打赏
  • 举报
回复
谢谢上面三位
我就是按照DX SDK里面的那段GetPin来做的,可是总是只能获取到INPUT的pin,不能得到OUTPUT的pin.

我用MPEG splitter就能获取三个pin

to zfive5(最码):
用这个函数的话,那么获取OUTPUT的两个Pin的第一个参数是?
DivXExtend 2002-12-18
  • 打赏
  • 举报
回复
我没有实验过,不过以我自己写mpeg1的分流过滤器的经验来看, 分流过滤器的输出管脚,都是动态创建(根据实际,流中包含的数据决定有几个分流过滤器).一般而言
一个视频,一个音频. 通过
m_pSF the pointer to the AVI splitter

CBasePin *pBaseVideoPin = m_pSF->GetPin(1); //得到视频管脚
CBasePin *pBaseAudioPin = m_pSF->GetPin(2); //得到音频管脚

IPin *pVideoPin = (IPin *) pBaseVideoPin; //视频管脚
IPin *pAudioPin = (IPin *) pBaseAudioPin ; //音频管脚

2,543

社区成员

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

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