如何给filter添加自定义接口及调用
2014-10-24 14:47
453 查看
本例子是在VirtualCamera的基础上添加的自定义接口用来实现exe控制osd的显示。
1. 接口部分
#include "myfilter.h"
class CVCam : public CSource ,public IMyFilter
{
public:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN lpunk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);//????
DECLARE_IUNKNOWN;
STDMETHODIMP setOSD(int osd_en);
IFilterGraph *GetGraph() {return m_pGraph;}
int osd_enable;
private:
CVCam(LPUNKNOWN lpunk, HRESULT *phr);
CVCamPin *m_pPin;
public:
};
/////////////////////////////////////
STDMETHODIMP CVCam::setOSD(int osd_en)
{
osd_enable = osd_en;
return S_OK;
}
STDMETHODIMP CVCam::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
if(riid == _uuidof(IAMStreamConfig) || riid == _uuidof(IKsPropertySet))
{
// m_paStreams[0]->QueryInterface(riid, ppv);
return m_paStreams[0]->QueryInterface(riid, ppv);
}
else if (riid == IID_IMyFilter)
{
return GetInterface((IMyFilter *) this, ppv);
}
else
return CBaseFilter::NonDelegatingQueryInterface(riid, ppv);//修改
}
3.应用程序调用
//根据guid 查找filter
hr = CoCreateInstance(CLSID_myFilter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pSrcFilter));
IMyFilter *pInterface = NULL;
hr = pSrcFilter->QueryInterface(IID_IMyFilter, (void **)&pInterface);//从filter上查询接口
pInterface->setOSD(0);//使用接口函数
1. 接口部分
#ifndef __H_MyFilter__
#define __H_MyFilter__
#ifdef __cplusplus
extern "C" {
#endif
//#include <initguid.h>
//EXTERN_GUID
EXTERN_GUID(IID_IMyFilter,
0xef31f705, 0x32a7, 0x477a, 0x90, 0xc9, 0x2c, 0x7e, 0x81, 0xeb, 0x2, 0x5d);
DECLARE_INTERFACE_(IMyFilter,IUnknown)
{
STDMETHOD(setOSD) (THIS_ int osd_en) PURE;
};
#ifdef __cplusplus
}
#endif
#endif
2.filter继承接口#define __H_MyFilter__
#ifdef __cplusplus
extern "C" {
#endif
//#include <initguid.h>
//EXTERN_GUID
EXTERN_GUID(IID_IMyFilter,
0xef31f705, 0x32a7, 0x477a, 0x90, 0xc9, 0x2c, 0x7e, 0x81, 0xeb, 0x2, 0x5d);
DECLARE_INTERFACE_(IMyFilter,IUnknown)
{
STDMETHOD(setOSD) (THIS_ int osd_en) PURE;
};
#ifdef __cplusplus
}
#endif
#endif
#include "myfilter.h"
class CVCam : public CSource ,public IMyFilter
{
public:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN lpunk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);//????
DECLARE_IUNKNOWN;
STDMETHODIMP setOSD(int osd_en);
IFilterGraph *GetGraph() {return m_pGraph;}
int osd_enable;
private:
CVCam(LPUNKNOWN lpunk, HRESULT *phr);
CVCamPin *m_pPin;
public:
};
/////////////////////////////////////
STDMETHODIMP CVCam::setOSD(int osd_en)
{
osd_enable = osd_en;
return S_OK;
}
STDMETHODIMP CVCam::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
if(riid == _uuidof(IAMStreamConfig) || riid == _uuidof(IKsPropertySet))
{
// m_paStreams[0]->QueryInterface(riid, ppv);
return m_paStreams[0]->QueryInterface(riid, ppv);
}
else if (riid == IID_IMyFilter)
{
return GetInterface((IMyFilter *) this, ppv);
}
else
return CBaseFilter::NonDelegatingQueryInterface(riid, ppv);//修改
}
3.应用程序调用
//根据guid 查找filter
hr = CoCreateInstance(CLSID_myFilter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pSrcFilter));
IMyFilter *pInterface = NULL;
hr = pSrcFilter->QueryInterface(IID_IMyFilter, (void **)&pInterface);//从filter上查询接口
pInterface->setOSD(0);//使用接口函数
相关文章推荐
- 如何给filter添加自定义接口及调用 分类: DirectX 2014-10-24 14:47 455人阅读 评论(0) 收藏
- 如何给filter添加自定义接口及调用
- 如何给filter添加自定义接口及调用
- 如何给filter添加自定义接口 分类: DirectX 2014-10-24 08:59 499人阅读 评论(0) 收藏
- 如何给filter添加自定义接口
- 如何给filter添加自定义接口
- 如何给filter添加自定义接口
- dedecms自定义字段的添加及如何实现在栏目页首页的调用
- 如何在xen blktap中添加自定义虚拟磁盘接口
- 如何给filter添加接口
- thinkphp调用微信接口完成自定义菜单的添加和删除
- 如何给filter添加接口
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 如何在内存中自定义表用于添加和删除数据
- 如何给Excel添加用户自定义的公式
- 如何添加自定义系统菜单 - C++ & MFC
- 如何:向 Outlook 添加自定义菜单和菜单项
- 如何在WebPart的菜单中添加自定义的Verbs.
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 网页中如何添加调用qq或者msn聊天窗口与客服进行互动