谢谢罗曼。
我现在可以通过接口将数据从应用程序传递到源驱动程序。
我从 directshow 示例中提取了 pushsource 过滤器,并使用下面的示例为其添加了一个附加接口
将其包含在一个通用头文件中
DECLARE_INTERFACE_(IMySettingsInterface, IUnknown)
{
STDMETHOD(GetParamInt)(char* szName, int *pParam) = 0;
STDMETHOD(SetParamInt)(char* szName, int nParam) = 0;
};
// {F350FE9E-65BA-4AC1-A6C0-FD9F2979D342}
DEFINE_GUID(IID_IMySettings,
0xf350fe9e, 0x65ba, 0x4ac1, 0xa6, 0xc0, 0xfd, 0x9f, 0x29, 0x79, 0xd3, 0x42);
对 CPushSourceDesktop 类所做的更改
class CPushSourceDesktop : public CSource, public IMySettingsInterface
{
private:
// Constructor is private because you have to use CreateInstance
CPushSourceDesktop(IUnknown *pUnk, HRESULT *phr);
~CPushSourceDesktop();
CPushPinDesktop *m_pPin;
public:
DECLARE_IUNKNOWN;
static CUnknown * WINAPI CreateInstance(IUnknown *pUnk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
//Methods the interface supports
STDMETHODIMP GetParamInt(char* szName, int *pParam);
STDMETHODIMP SetParamInt(char* szName, int nParam);
};
我使用VS的创建GUID工具生成了UUID。
在我的过滤器中定义了这些接口方法
STDMETHODIMP CPushSourceDesktop::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
if (riid == (IID_IMySettings))
{
return GetInterface((IMySettingsInterface*) this, ppv);
}
else
{
return CSource::NonDelegatingQueryInterface(riid, ppv);
}
}
STDMETHODIMP CPushSourceDesktop::GetParamInt(char* szName, int *pParam)
{
// Example
*pParam = 10;
return 0;
}
STDMETHODIMP CPushSourceDesktop::SetParamInt(char* szName, int pParam)
{
//Example
return 0;
}
我将使用另一种方法将应用程序缓冲区传递给源过滤器队列。
再次感谢。