创建filter笔记1

来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:32:36
创建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的keya)         注册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 AMOVIESETUP_FILTER Describes a filter. AMOVIESETUP_PIN Describes a pin. AMOVIESETUP_MEDIATYPE 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参数就可以了。