请问directshow一条链路怎么添加多个filter(至少三个)?

yinfuyong 2009-12-02 03:32:23

我自己写了一个Transformer filter,加入链路已经没有问题,

source filter ---> Transformer filter ---> RenderStream已经成功预览

现在想在中间再加一个Filter在中间,怎么做呢?试了几次不行

CComPtr<ICaptureGraphBuilder2>m_pCapture;
CComPtr<IGraphBuilder> m_pGraph;
CComPtr< IBaseFilter > pCap;
。。。。。。。
m_pGraph->AddFilter(pCap,L"pcap");//获取视频输入filter
m_pGraph->AddFilter(pMyfilter,L"grab");//我自己写的Transformer filter
m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pCap,pMyfilter,NULL);
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
koople 2009-12-11
  • 打赏
  • 举报
回复
用一个分流filter
yinfuyong 2009-12-11
  • 打赏
  • 举报
回复
谢谢 楼上二位的回复
mjh1021 2009-12-09
  • 打赏
  • 举报
回复
把pTransform插入到pFilter前面,你把下面的成员变量改成你自己的就好了。
HRESULT CDXGraph::ConnectUpstreamOf(IBaseFilter* pFilter, IBaseFilter* pTransform)
{
IPin* pPinIn = InputPinOf(pFilter);
if (!pPinIn)
{
return E_FAIL;
}

// Get the peer output pin
IPin* pPinOut = NULL;
HRESULT hr = pPinIn->ConnectedTo(&pPinOut);
if (FAILED(hr))
{
pPinIn->Release();
return hr;
}

// Disconnect the current connection
hr = mGraph->Disconnect(pPinOut);
if (SUCCEEDED(hr))
{
hr = mGraph->Disconnect(pPinIn);
}

// Insert pTransform filter by connecting its input pin and output pin
if (SUCCEEDED(hr))
{
IPin* pPinInXfm = InputPinOf(pTransform);
hr = mGraph->Connect(pPinOut, pPinInXfm);
pPinInXfm->Release();
}
if (SUCCEEDED(hr))
{
IPin* pPinOutXfm = OutputPinOf(pTransform);
hr = mGraph->Connect(pPinOutXfm, pPinIn);
pPinOutXfm->Release();
}

pPinIn->Release();
pPinOut->Release();
return hr;
}
yinfuyong 2009-12-08
  • 打赏
  • 举报
回复
顶!
yinfuyong 2009-12-04
  • 打赏
  • 举报
回复
请大家提示下阿
jtujtujtu 2009-12-02
  • 打赏
  • 举报
回复
可以手动添加、连接
具体的可以参考 帮助或者陆其明的 directshow 书

2,543

社区成员

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

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