分享

创建filter笔记

 ShaneWu 2008-04-01
创建filter,可以从ms提供的filter类库中继承,filter类库中的基类为CBaseFilter。
2. 创建pin,可以继承,基类为CBasePin,也可以从CBasePin的子类继承。
3. 连接pin,如果想让两个pin可以连接,那么就要符合一定的规范,主要有3个:
a)         传输机制要相同,可以为“推”模式的,也可以为“拉”模式的,但outpin和inpin的模式要一样。
b)        媒体类型要相同。
c)        分配器,Sample缓存的分配约定,要约定好哪个pin提供分配器,分配的缓存的大小、数量以及其他的属性。
4. 传输和处理数据
5. 支持com
 
使filter自动注册
列出filter的key
a)         注册com服务:
HKEY_CLASSES_ROOT
    CLSID
        Filter CLSID 
            REG_SZ: (Default) = Friendly name
 
            InprocServer32
                REG_SZ: (Default) = File name of the DLL
                REG_SZ: ThreadingModel = Both
b)      注册filter目录
HKEY_CLASSES_ROOT
    CLSID
        Category
            Instance
                Filter CLSID
                    REG_SZ: CLSID = Filter CLSID
                    REG_BINARY: FilterData = Filter information
                    REG_SZ: FriendlyName = Friendly name
1.声明filter信息
Structure
Description
Describes a filter.
Describes a pin.
Describes a media type.
 
    AMOVIESETUP_FILTER中包含有一个AMOVIESETUP_PIN数组指针,每个AMOVIESETUP_PIN中又包含一个AMOVIESETUP_MEDIATYPE数组指针。
    可以使用IFilterMapper2接口定位一个filter。
2.声明Factory Template
     在dll中声明一个CFactoryTemplate对象的全局数组,其中的每个对象对应一个filter或者一个com组件,这个数组的名字必须是g_Templates。
3.实现DllRegisterServer
    包含com组件的dll必须包含这个函数,这个函数在filter被注册的时候调用。这是这个函数的一个最小实现:
STDAPI DllRegisterServer(void)
{
    return AMovieDllRegisterServer2(TRUE);
}
    AMovieDllRegisterServer2()函数为g_Templates数组中的每个组件创建注册入口。
4.注销filter
    DllUnregisterServer()函数中实现filter的注销,在此函数中调用AMovieDllRegisterServer2()函数并传传入FALSE参数就可以了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多