开发Filter的一般过程以及Filter Graph的构建
来源:百度文库 编辑:神马文学网 时间:2024/04/27 20:32:17
开发Filter的一般过程如下:
(一)首先选择一个正确的父类
对开发一个H.263编码器来说,主要的工作是设计一个Transform Filter,所以Filter类要继承自CSource类,输入Pin要继承自CBaseInputPin类,输出Pin要继承自CSourceStream类。
(二)具体的程序设计工作
1,注册Filter
首先,运行GuidGen.exe生成该Filter的GUID,定义二个导出函数DllRegisterServer和DllUnregisterServer,并注意将输出文件名改为.ax.
设置AMOVIESETUP_MEDIATYPE(媒体类型),AMOVIESETUP_PIN(输入输出Pin的数目), AMOVIESETUP_FILTER(Filter的注册信息)这些数据。实现CreateInstance函数以创建Filter对象(用CFactoryTemplate函数实现),实现NonDelegatingQueryInterface来暴露Filter支持的接口。
2, 类型检查
在输入,输出Pin上重写CheckMedia, GetMediaType函数。
输出Pin上调用IPin::Connect,然后输出Pin上调用IPin::ReceiveConnection函数。
3,内存分配
在输入Pin上重写Receive函数(推模式),并重写IPin接口上的EndOfStream,(表示没有数据到达)BeginFlush和EndFlush这些函数。在输出Pin上重写DecideBufferSize和FillBuffer函数。
4,根据特殊的要求,可以加进Notify函数进行质量控制,或是自定义接口等。
FilterGraph的创建过程:
1,先写一个控制类。在控制类中用CoCreateInstance创建一个Filter Graph Manager组件
2,创建一条完整的Filter链路。根据Filter的CLSID,使用AddFilter函数将该Filter加入到Filter Graph中;再通过枚举的方法取得Filter上未连接的Pin;利用ConnectDirect函数将上一级的Filter的输出Pin连接到下一级输入Pin上
3,利用Disconnect函数将连接的两个Pin断开;利用RemoveFilter将Filter从Filter Graph中除去
(一)首先选择一个正确的父类
对开发一个H.263编码器来说,主要的工作是设计一个Transform Filter,所以Filter类要继承自CSource类,输入Pin要继承自CBaseInputPin类,输出Pin要继承自CSourceStream类。
(二)具体的程序设计工作
1,注册Filter
首先,运行GuidGen.exe生成该Filter的GUID,定义二个导出函数DllRegisterServer和DllUnregisterServer,并注意将输出文件名改为.ax.
设置AMOVIESETUP_MEDIATYPE(媒体类型),AMOVIESETUP_PIN(输入输出Pin的数目), AMOVIESETUP_FILTER(Filter的注册信息)这些数据。实现CreateInstance函数以创建Filter对象(用CFactoryTemplate函数实现),实现NonDelegatingQueryInterface来暴露Filter支持的接口。
2, 类型检查
在输入,输出Pin上重写CheckMedia, GetMediaType函数。
输出Pin上调用IPin::Connect,然后输出Pin上调用IPin::ReceiveConnection函数。
3,内存分配
在输入Pin上重写Receive函数(推模式),并重写IPin接口上的EndOfStream,(表示没有数据到达)BeginFlush和EndFlush这些函数。在输出Pin上重写DecideBufferSize和FillBuffer函数。
4,根据特殊的要求,可以加进Notify函数进行质量控制,或是自定义接口等。
FilterGraph的创建过程:
1,先写一个控制类。在控制类中用CoCreateInstance创建一个Filter Graph Manager组件
2,创建一条完整的Filter链路。根据Filter的CLSID,使用AddFilter函数将该Filter加入到Filter Graph中;再通过枚举的方法取得Filter上未连接的Pin;利用ConnectDirect函数将上一级的Filter的输出Pin连接到下一级输入Pin上
3,利用Disconnect函数将连接的两个Pin断开;利用RemoveFilter将Filter从Filter Graph中除去
开发Filter的一般过程以及Filter Graph的构建
利用 DirectShow 开发自己的 Filter
Servlet,Filter的url-pattern详解
Servlet和Filter的url匹配
CSS滤镜 即FILTER的用法详解
开发source filter的source sourcestream两个基类介绍_混乱思...
如何开发传输过滤器(Transform filter)
web.xml的filter执行顺序导致的乱码,切记!
Servlet和Filter的url匹配url-pattern
Servlet,Filter的url-pattern详解 - LuckyFox - JavaEye技术网站
Struts2 Hibernate中关闭Session的filter问题
Bloom Filter概念和原理 - medie2005的专栏 - CSDNBlog
filter 求解给一个输入x后差分方程的输出
Air filter
bloom filter
bloom filter
bloom filter
Servlet和Filter的url匹配以及url-pattern详解 - 关注基于J2EE的系统设计与实现,总结项目经验与思考。 - BlogJava
Compressed Bloom Filter - Bloom Filter - CSDN...
Counting Bloom Filter - Bloom Filter - CSDN博客
lucene中的filter器群组及其缓存大盘点 - 猴子的天地 - 猴子的天地
与字符串数组有关的三个函数(Split函数、Join函数、Filter函数)
CNKI、万方、维普导入EndnoteX3的filter-NEtoEN - 软件下载 - ...
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别11