2012-06-02 65 views
0

我想实现IPinFlowControl接口,它有一个Block方法。如何在Directshow中实现IPinFlowControl接口

i相下面的代码曾试图,

Mux::NonDelegatingQueryInterface(REFIID iid, void** ppv) 
{ 
    if(iid==IID_IPinFlowControl) 
    { 
    return GetInterface((IPinFlowControl*) this, ppv); 
    } 

    return CBaseFilter::NonDelegatingQueryInterface(iid, ppv); 
} 


STDMETHODIMP Mux::Block(DWORD dwBlockFlags,HANDLE hEvent) 
{ 
    return S_OK; 
} 

和登记上述过滤器。

现在

在代码中,我创建上述过滤器的情况下,连接它的输出引脚,然后尝试

IPin *pMuxOut2 = NULL; 
hr = FindUnconnectedPin(mux,PINDIR_OUTPUT,&pMuxOut2); 

IPinFlowControl *pinFlowControl=NULL; 

hr=pMuxOut2->QueryInterface(IID_IPinFlowControl,(void**)&pinFlowControl); 

但我pinFlowControl得到E_NonInterface,

还请大家帮我正确地实现块的方法来阻止和Unblock输出。

回答

0

看起来像您在过滤器上实现了接口,但是在引脚上查询该接口。

如果您想在引脚上创建该接口,则需要创建该接口,并且必须创建一个使用该引脚实现的滤波器。

+0

谢谢@Wimmel,我会看出来,并会回你:) – meghana

1

如果你打算在你的过滤器上实现IPinFlowControl,你应该看看基类中提供的CDynamicOutputPin类。

Synth Filter Sample在Windows SDK中为您提供了一个从此类派生的示例。

+0

谢谢@罗曼河,我会看看它很快:) – meghana