如何给filter添加自定义接口及调用

本例子是在VirtualCamera的基础上添加的自定义接口用来实现exe控制osd的显示。

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继承接口

#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);//使用接口函数



时间: 2024-08-05 07:48:28

如何给filter添加自定义接口及调用的相关文章

如何给filter添加自定义接口

给一个filter添加接口,步骤如下:1.建立一个声明接口的头文件"Interface.h" ,内容包括指定接口的GUID(使用GuidGen.exe)以及接口函数的声明.     记得加 initguid.h 的include,不然使用时会出现"无法解析的外部符号_IID_"错误 2.在Cfilter类的头文件filter.h开头添加  #include "Interface.h" . 3.在Cfilter类的声明中继承这个接口  CFilte

方法-cxf客户端调用 不注册接口 怎么调用服务器端?

问题描述 cxf客户端调用 不注册接口 怎么调用服务器端? 请问一下 用cxf客户端只用url和输入参数即简单传一个String类型的参数,不用服务器端的接口和实现类 怎么调用服务器端的方法? 解决方案 http://blog.csdn.net/zy609398738/article/details/7484331 解决方案二: http://zhengjj-2009.iteye.com/blog/625675

link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

问题描述 link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事? link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

crossapp有没有现成接口可调用手机通讯录啊

问题描述 大家好,我是crossapp初学者,现在公司在做一款社交类的**应用app,我想请教一下crossapp有没有现成的接口可以调用手机通讯录的办法啊,还是得安卓和Ios分情况自己写? 解决方案 现在有获取通讯录的方法.CADevice::getAddressBook()

java-基于JAVA,身份证阅读器二次开发接口如何调用?

问题描述 基于JAVA,身份证阅读器二次开发接口如何调用? 身份证阅读器已经有了,我现在做了一个网站(JAVA语言开发的),网站后台需要调用身份证信息,录入身份证信息,如何调用这个身份证阅读器的二次开发接口?是身份证阅读器厂商提供二次开发接口吗?还是如何做?没有做过,不知如何下手...求大神帮忙!感激不尽!!!

cxf-CXF 短信接口 客户端调用

问题描述 CXF 短信接口 客户端调用 就给了一个链接,需要用户密码验证: 参考网络写的客户端调用 通过添加拦截器进行用户密码验证 错误信息: 2015-11-11 13:05:35 org.apache.cxf.common.jaxb.JAXBUtils logGeneratedClassNames 信息: Created classes: declare.message.chinatax.DeleteMessagesRequest, declare.message.chinatax.GetF

rest接口如果调用次数过大会报什么错么?

问题描述 rest接口如果调用次数过大会报什么错么?是被封号吗? 解决方案 会报503错误,会被限流,环信限制同一个IP地址每秒钟最多可以调用30次

阿里大鱼短信接口怎么调用 基于 springmvc mybatis框架,求大神解决?

问题描述 阿里大鱼短信接口怎么调用 基于 springmvc mybatis框架,求大神解决? 给安卓手机端提供 获取短信验证码的功能和手机注册修改密码的功能: 开发工具:eclipse; 框架 spring springmvc mybatis; 数据库 mysql; 如果有 demo可以下载最好 解决方案 手机的话是不是要先和手机运行商联系好,才能实现

我是新手第一次请教大家这个网站免费api数据接口怎么调用

问题描述 我是新手第一次请教大家这个网站免费api接口怎么调用由于公司需要快递物流数据接口.气象数据接口.公交查询怎么调用请教各位大神 解决方案 解决方案二:直接GET一个URL过去比如说<formaction="http://api.36wu.com/Weather/GetWeather?district=%E5%8C%97%E4%BA%AC"method="get"><inputtype="submit"value=&quo