Filter Graph和Filter的问题

大道如海 2003-04-04 02:07:31
如何手工在Filter Graph中添加特定的Filter(如Avi Splitter Filter),并且如何进行连接。
希望有部分源码!
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuchangquan_0 2003-04-07
  • 打赏
  • 举报
回复
我现在也在写这东东密切关注!
wkpeng 2003-04-07
  • 打赏
  • 举报
回复
study
大道如海 2003-04-07
  • 打赏
  • 举报
回复
^
大道如海 2003-04-06
  • 打赏
  • 举报
回复
千斤顶!
大道如海 2003-04-05
  • 打赏
  • 举报
回复
望再赐教!
大道如海 2003-04-05
  • 打赏
  • 举报
回复
...................
hr = CoCreateInstance(CLSID_AviSplitter,
NULL,
CLSCTX_INPROC,
IID_IBaseFilter,
(void**)&m_pAviFilter);

// construct source filter
// Media type
if (m_bInit)
{
CMediaType mt;
mt.majortype = MEDIATYPE_Stream;
mt.subtype = MEDIASUBTYPE_Avi;
m_pSourceStream = new CMemStream(m_pDataList);
m_pSourceReader = new CMemReader(m_pSourceStream, &mt, &hr);
m_pSourceReader->AddRef();
// Add our filter
hr = m_pGB->AddFilter(m_pSourceReader, NULL);
if (FAILED(hr))
{
m_bInit = false;
}
hr = m_pGB->AddFilter(m_pAviFilter, NULL);
if (FAILED(hr))
{
m_bInit = false;
}

IPin *pOut = GetPin(m_pSourceReader, PINDIR_OUTPUT);
IPin *pIn = GetPin(m_pAviFilter, PINDIR_INPUT);
HRESULT hr = m_pGB->ConnectDirect(pOut, pIn, NULL);
//执行到上一句就不执行下去了,似乎进入了死循环
pOut->Release();
pIn->Release();
if (FAILED(hr))
{
m_bInit = false;
AfxMessageBox("Connect Error!");
}
}
gxqcdit 2003-04-04
  • 打赏
  • 举报
回复
step 1:
通过EnumFilter and enum pin找到在filter graph中需要添加filter的位置,然后断开连接的pin

ster 2:
pGraph->AddFilter(pYourFilter, L"Your Filter's Name", NULL);

step 3:
EnumPin找到YourFilter的输入输出pin

step 4:
连接相关pin

OK!
Fnoopy 2003-04-04
  • 打赏
  • 举报
回复
函数ConnectFilters中调用pGraph->Connect会进入一种死循环状态,连应有的界面都无法显示!
为何?

估计是你的两个pin类型不匹配
NoneSoVile 2003-04-04
  • 打赏
  • 举报
回复
用connect可以把
RenderStream(..)也能充当connect的作用,看看它的参数和用法
大道如海 2003-04-04
  • 打赏
  • 举报
回复
又能运行通过的实例吗?
howepear@citiz.net
万分感谢!
大道如海 2003-04-04
  • 打赏
  • 举报
回复
函数ConnectFilters中调用pGraph->Connect会进入一种死循环状态,连应有的界面都无法显示!
为何?
jian 2003-04-04
  • 打赏
  • 举报
回复
line2 :改为ConnectFilters
jian 2003-04-04
  • 打赏
  • 举报
回复
1、添加最简单的是用AddFilterByCLSID,只要一句代码
2、连接使用ConnectFilter

下面是一个类似的例子:
IBaseFilter *pMux, *pWrite;
hr = AddFilterByCLSID(pGraph, CLSID_AviDest, L"AVI Mux", &pMux);
if (SUCCEEDED(hr))
{
hr = AddFilterByCLSID(pGraph, CLSID_FileWriter, L"File Writer", &pWrite);
if (SUCCEEDED(hr))
{
hr = ConnectFilters(pGraph, pMux, pWrite);
/* Use IFileSinkFilter to set the file name (not shown). */
pWrite->Release();
}
pMux->Release();
}

2,543

社区成员

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

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