Mentioned below is an example of a DirectShow source filter that reads data from application
For reference I have taken CPushSource filter from DirectShow samples
Include the code mentioned below in a common header file
Change made to CPushSourceDesktop class:
Defined these interface methods in my filter
For reference I have taken CPushSource filter from DirectShow samples
Include the code mentioned below in a common header file
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);
Change made to CPushSourceDesktop class:
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);
};
Defined these interface methods in my filter
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;
}
Comments
Post a Comment