步骤 2。 声明筛选器类

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

这是 编写转换筛选器教程的步骤 2。

首先声明继承基类的 C++ 类:

class CRleFilter : public CTransformFilter
{
    /* Declarations will go here. */
};

每个筛选器类都有关联的引脚类。 根据筛选器的特定需求,可能需要替代引脚类。 对于 CTransformFilter,引脚将大部分工作委托给筛选器,因此你可能不需要替代引脚。

必须为筛选器生成唯一的 CLSID。 可以使用 Guidgen 或 Uuidgen 实用工具;从不复制现有 GUID。 可通过多种方式声明 CLSID。 以下示例使用 DEFINE_GUID 宏:

[RleFilt.h]
// {1915C5C7-02AA-415f-890F-76D94C85AAF1}
DEFINE_GUID(CLSID_RLEFilter, 
0x1915c5c7, 0x2aa, 0x415f, 0x89, 0xf, 0x76, 0xd9, 0x4c, 0x85, 0xaa, 0xf1);

[RleFilt.cpp]
#include <initguid.h>
#include "RleFilt.h"

接下来,为筛选器编写构造函数方法:

CRleFilter::CRleFilter()
  : CTransformFilter(NAME("My RLE Encoder"), 0, CLSID_RLEFilter)
{ 
   /* Initialize any private variables here. */
}

请注意, CTransformFilter 构造函数的参数之一是前面定义的 CLSID。

下一 步:步骤 3。支持媒体类型协商

编写 DirectShow 筛选器