声明筛选器信息
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
第一步是根据需要声明筛选器信息。 DirectShow 定义了以下结构,用于描述筛选器、引脚和媒体类型:
结构 | 说明 |
---|---|
AMOVIESETUP_FILTER | 描述筛选器。 |
AMOVIESETUP_PIN | 描述图钉。 |
AMOVIESETUP_MEDIATYPE | 描述媒体类型。 |
这些结构是嵌套的。 AMOVEIESETUP_FILTER结构具有指向AMOVIESETUP_PIN结构的数组的指针,其中每个结构都具有指向AMOVEIESETUP_MEDIATYPE结构数组的指针。 综合起来,这些结构为 IFilterMapper2 接口提供了足够的信息来查找筛选器。 它们不是筛选器的完整说明。 例如,如果筛选器创建同一引脚的多个实例,则只应为该引脚声明一 个AMOVIESETUP_PIN 结构。 此外,不需要筛选器来支持它注册的每种媒体类型组合;也不需要注册它支持的每个媒体类型。
将设置结构声明为 DLL 中的全局变量。 以下示例演示了一个带有一个输出引脚的筛选器:
static const WCHAR g_wszName[] = L"Some Filter";
AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};
AMOVIESETUP_PIN sudOutputPin = {
L"", // Obsolete, not used.
FALSE, // Is this pin rendered?
TRUE, // Is it an output pin?
FALSE, // Can the filter create zero instances?
FALSE, // Does the filter create multiple instances?
&GUID_NULL, // Obsolete.
NULL, // Obsolete.
2, // Number of media types.
sudMediaTypes // Pointer to media types.
};
AMOVIESETUP_FILTER sudFilterReg = {
&CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
MERIT_NORMAL, // Merit.
1, // Number of pin types.
&sudOutputPin // Pointer to pin information.
};
筛选器名称声明为静态全局变量,因为它将再次在其他位置使用。
相关主题