问题是这样的,我要创建一个输入端和两个输出端的Filter,我根据DirectShow中的CTransformFilter类似的方法来改写,先做了一个输入和输出端的Filter,视频都播放成功。做一个输入和两个输出端的时候,我的第二个输出端的代码是直接拷贝第一个输出端代码来完成的,只是改了类名.这时两个输出端都连接上,但运行的时候,遇到在Receive(IMediaSample *pSample)函数中的hr = m_pOutput->m_pInputPin->Receive(pOutSample)这段代码中就卡在哪里了,不能继续运行下去.最后在网上请教别人,得到下面的答案,故记录下来。
嗯,这样是会有问题的,解决方法有两种。
一种是用COutputQueue来传递数据,具体操作可以参考inftee的例子。
还有一种方法就是重载filter的GetState.
STDMETHODIMP CVideo::GetState(DWORD dwMSecs, __out FILTER_STATE *State)
{
CheckPointer(State, E_POINTER);
*State=m_State;
if(m_State==State_Paused){
return VFW_S_CANT_CUE;
}else{
return S_OK;
}
}
我采取的第二种方法。