当前位置: 代码迷 >> 多媒体/流媒体开发 >> 同一个IGraphBuilder 里加两个一样的filter吗?该如何解决
  详细解决方案

同一个IGraphBuilder 里加两个一样的filter吗?该如何解决

热度:2687   发布时间:2013-02-26 00:00:00.0
同一个IGraphBuilder 里加两个一样的filter吗?
我 往 同一个 IGraphBuilder 里 加了 两次 ffdshow_video_decoder,第二次 就会 失败,不知道为什么

hr = AddFilterByCLSID(ffdshow_video_decoder1, L"decoder1", &m_pDecoder1);

hr = AddFilterByCLSID(ffdshow_video_decoder2, L"decoder2", &m_pDecoder2);
函数实现:

HRESULT CFilterGraph::AddFilterByCLSID(const GUID& clsid, LPCWSTR wszName, IBaseFilter** ppF)
{
if(!m_pGraphBuider || !ppF)
  {
  return E_POINTER;
  }  
*ppF = 0;
IBaseFilter * pF = 0;
HRESULT hr = CoCreateInstance(clsid,0,CLSCTX_INPROC_SERVER,
IID_IBaseFilter,reinterpret_cast<void**>(&pF));
if(SUCCEEDED(hr))
{
hr=m_pGraphBuider->AddFilter(pF,wszName); // -----------------------都是 这里 失败
if(SUCCEEDED(hr))
*ppF = pF;
else
pF->Release();
}
return hr;
}

知道 的请赐教啊

------解决方案--------------------------------------------------------
估计是filter做了处理吧,返回错误是什么
------解决方案--------------------------------------------------------
应该是filter的原因,在graphedit中也要出错,楼主只有换一种实现方法了
------解决方案--------------------------------------------------------
如果三个画面都是相同的,则可以解码后再分流。
如果是不同的,就只有分别建三个graph来处理了
------解决方案--------------------------------------------------------
不明白三个不同画面的数据怎样用一个sourcefilter?
如果是不同的源还是建三个graph比较好吧


------解决方案--------------------------------------------------------
这个sourcefilter是不是你们自己写的?怨不得他之后你直接接三个解码器而没有在之前分流,是你的sourcefilter自己把不同的源分开了?
看看用其他的解码器没有这个限制的??而且如果你们是大公司小心这个ffdshow是GPL下的,你这样静态链接肯定要公布源代码

------解决方案--------------------------------------------------------
GNU问题不大,现在基本音视频相关的都是用开源代码,只要你们公司还不够有影响力没有问题。

ffdshow decoder等代码用了很多静态变量,所以同一进程内似乎都会有问题。

楼主的源是什么编码方式? 可能要用到多进程实现。
------解决方案--------------------------------------------------------
解码后再接Infinite Pin Tee Filter分流,应该能实现。
  相关解决方案