步骤 2。 声明筛选器类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media 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。支持媒体类型协商。
相关主题