利用 DirectShow 开发自己的 Filter
2006-07-23 11:33:58 来源:WEB开发网CFactoryTemplate g_Templates[1] =
{
{
L"my filter", // Name
&CLSID_MYFilter, // CLSID
CMyFilter::CreateInstance, // Method to create an instance of MyComponent
NULL, // Initialization function
&sudInfTee // Set-up information (for filters)
}
};
int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);
如果在这个com组件中你要支持多个filter,你可以在这个数组中继续添加就是了。
四、如何实现自己的 Filter
在这里就要讲如何创建自己的Filter了,下面我们以写一个CTransformFilter为例:
1、选择一个基类,声明自己的类。
创建filter很简单,你只要根据自己的需要选择不同的基类Filter派生出自己的Filter,它就已经支持com特性了。
从逻辑上考虑,在写Filter之前,选择一个合适的Filter基类是至关重要的。为此,你必须对几个Filter的基类有相当的了解。在实际应用中,Filter的基类并不总是选择CBaseFilter的。相反,因为我们绝大部分写的都是中间的传输Filter(Transform Filter),所以基类选择CTransformFilter和CTransInPlaceFilter的居多。如果我们写的是源Filter,我们可以选择CSource作为基类;如果是Renderer Filter,可以选择CBaseRenderer或CBaseVideoRenderer等。
总之,选择好Filter的基类是很重要的。当然,选择Filter的基类也是很灵活的,没有绝对的标准。能够通过CTransformFilter实现的Filter当然也能从CBaseFilter一步一步实现。
Tags:利用 DirectShow 开发
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接