本样例是在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);//使用接口函数



怎样给filter加入自己定义接口及调用的更多相关文章

  1. 怎样给filter加入自己定义接口

    .在Cfilter类的定义中实现Interface接口的函数的定义: //-----------------------Interface methods----------------------- ...

  2. java 类中定义接口的调用方法

    public class Human { public interface MyAction { public void getPower(); } } public class Test{ publ ...

  3. JAVA定义接口格式:

    [public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...

  4. Android中定义接口的方法

    1.接口方法用于回调(这里定义接口是为了使用其接口方法): public interface ICallback { public void func(); } public class Caller ...

  5. VC++ 使用attributes定义接口

      1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid = "{3845951F-15B ...

  6. interface关键字定义接口

    package interface0; public interface InterfaceTest { /* * 接口的定义,使用interface关键字定义接口 */ public interfa ...

  7. “全栈2019”Java第六十章:如何定义接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. struts2 在拦截器进行注入(依据Action是否实现自己定义接口)

    比如:经常在Action中都须要获取当前登录的User,就须要获取Session.然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现.能够自己定义一个接 ...

  9. 用关键字interface定义接口,通过关键字implements来实现接口

    [定义]Java中,能够完成特定功能的,由若干属性和方法组织成的,相对独立的属性和方法的集合. [用途]实现类的多继承,以解决Java只能单继承,不支持多继承的问题. [特点] 用关键字interfa ...

随机推荐

  1. 如何禁用easyui-linkbutton 中的Click事件

    eg: <a id="btn" href="#" class="easyui-linkbutton" data-options=&qu ...

  2. CSS一级导航-天蓝色(带阴影)

    一款亮丽的导航,能给网站一个画龙点睛的作用.导航在指引用户搜寻内容时,还能改变用户浏览网站的心情,浏览网站也像一场旅行,有创意的导航栏让用户欣赏起来也会更加愉悦,增加对网站的兴趣. 本人不擅长美工制作 ...

  3. 使用 fn 标签 解决字数过多时用省略号代替 .............................

    list列表单条记录某字段大于10就后面添加省略号(如:内容只是显示开始的10个字,后面的用省略号代替) 在list列表中单条记录某字段大于10就后面添加省略号, 首先引入 jstl标签: <% ...

  4. js学习--浏览器对象计时器setInterval()与setTimeout()的使用与区别

    一.setInterval()与setTimeout()的定义: 二.setInterval()与setTimeout()的使用:    1.setInterval()与clearInterval() ...

  5. Start of Something New

    Hi Guys This will be the blog of SCaffrey for some time before he creates his own site:) Have a nice ...

  6. hbase 架构

    由图可以client并不直接和master交互,而是与zookeeper交互,所以master挂掉,依然会对外提供读写服务, 但master挂掉后无法提供数据迁移服务. 所以说 hbase无单点故障, ...

  7. E: Write error - write (28 No space left on device)

    1:在终端中运行cd命令,提示: e: Write error - write (28 No space left on device) E: Cant mmap an empty file 2:使用 ...

  8. document.body.clientWidth vs document.documentElement.clientWidth

    http://blog.csdn.net/zb0567/article/details/7182391 mobile web javascript library http://www.gbin1.c ...

  9. 【HDU4552】 怪盗基德的挑战书(后缀数组)

    怪盗基德的挑战书 Problem Description “在树最美丽的那天,当时间老人再次把大钟平均分开时,我会降临在灯火之城的金字塔前,带走那最珍贵的笑容.”这是怪盗基德盗取巴黎卢浮宫的<蒙 ...

  10. 重载VerifyRenderingInServerForm

    重载VerifyRenderingInServerForm 今天在做一个AjaxPro的应用时,VerifyRenderingInServerForm给我带来了麻烦,在网上找了找,发现大多数人的解决方 ...