硬件设备如何参与筛选器Graph

本文介绍如何DirectShow与音频和视频硬件交互。

包装器筛选器

所有DirectShow筛选器都是用户模式软件组件。 为了使内核模式硬件设备(如视频捕获卡)加入DirectShow筛选器图,设备必须表示为用户模式筛选器。 此函数由提供DirectShow的专用“包装器”筛选器执行。 这些筛选器包括 音频捕获 筛选器、 VFW 捕获 筛选器、 电视调整器 筛选器、 电视音频 筛选器和 模拟视频交叉条 筛选器。 DirectShow还提供一个名为 KsProxy 的筛选器,该筛选器可以表示任何类型的Windows驱动程序模型 (WDM) 流式处理设备。 硬件供应商可以通过提供 Ksproxy 插件(KsProxy 聚合的 COM 对象)来扩展 KsProxy 以支持自定义功能。

包装器筛选器公开表示设备的功能的 COM 接口。 应用程序使用这些接口向筛选器传入和传出信息。 筛选器将 COM 方法调用转换为设备驱动程序调用,将该信息传递到内核模式下的驱动程序,然后将结果转换回应用程序。 电视优化器、电视音频、模拟视频交叉栏和 KsProxy 筛选器通过 IKsPropertySet 接口支持自定义驱动程序属性。 VFW 捕获筛选器和音频捕获筛选器无法以这种方式扩展。

对于应用程序开发人员,包装器筛选器使应用程序能够控制设备,就像控制任何其他DirectShow筛选器一样。 无需特殊编程;与内核模式设备通信的详细信息封装在筛选器中。

Windows设备的视频

VFW 捕获筛选器支持Windows (VfW) 捕获卡的早期视频。 当目标系统上存在 VfW 卡时,可以使用DirectShow系统设备枚举器将其发现并添加到筛选器图中。 有关详细信息,请参阅 枚举设备和筛选器

音频捕获和混合设备 (声卡)

较新的声卡具有麦克风和其他类型的设备的输入插孔。 通常,这些卡片还具有板载混合功能,用于控制每个输入的音量、高音和低音。 在DirectShow中,声卡的输入和混音器由音频捕获筛选器包装。 可以使用系统设备枚举器发现每个声卡。 若要查看系统中的声卡,请运行 GraphEdit 并从音频捕获源类别中进行选择。 该类别中的每个筛选器都是音频捕获筛选器的单独实例。 (请参阅 使用 GraphEdit.)

WDM 流式处理设备

较新的硬件解码器和捕获卡符合Windows驱动程序模型 (WDM) 规范。 这些设备的功能大于 VfW 设备。 WDM 视频捕获卡可以支持 VfW 下不可用的功能,包括捕获格式的枚举、视频参数的编程控制(如色调和亮度、编程输入选择和电视优化器支持)。

为了支持 WDM 流式处理设备,DirectShow提供 KsProxy 筛选器 (ksproxy.ax) 。 KsProxy 被称为“瑞士陆军刀筛选器”,因为它做这么多不同的事情。 筛选器上的引脚数以及筛选器公开的 COM 接口数取决于基础驱动程序的功能。 KsProxy 在筛选器图中不显示在名称“KsProxy”下的筛选器图中。它始终采用在注册表中找到的设备友好名称。 若要查看系统上的 WDM 设备,请运行 GraphEdit 并从 WDM 流式处理类别中进行选择。 即使系统上只有一个 WDM 卡,该卡也可能包含多个设备。 每个设备都表示为单独的筛选器,每个筛选器实际上是 KsProxy。

应用程序使用系统设备枚举器在系统上查找 WDM 设备名字对象。 KsProxy 通过在名字对象上调用 BindToObject 来实例化。 由于 KsProxy 可以表示所有类型的 WDM 设备,因此它必须查询驱动程序以确定驱动程序支持的属性集。 属性集是 WDM 驱动程序使用的数据结构的集合,以及某些用户模式筛选器(例如 MPEG-2 软件解码器)。 KsProxy 将自身配置为公开与这些属性集对应的 COM 接口。 KsProxy 将 COM 方法调用转换为属性集,并将其发送到驱动程序。 硬件供应商可以通过提供插件来扩展 KsProxy,这些插件是公开设备特殊功能的特定于供应商的接口。 所有这些详细信息都隐藏在应用程序中。 应用程序通过 KsProxy 的方式控制设备,就像任何其他DirectShow筛选器一样。

内核流式处理

WDM 设备支持内核流式处理,在内核模式下完全流式传输数据,而无需切换到用户模式。 在内核模式和用户模式之间进行切换在计算上成本很高;内核流式处理允许高比特率,而不会给主机 CPU 带来负担。 基于 WDM 的筛选器可以使用内核流式处理将多媒体数据从一个硬件设备直接传递到另一个硬件设备,无论是在同一卡上还是在其他卡上,而无需将数据复制到系统的主内存中。

从应用程序的角度来看,数据似乎从一个用户模式筛选器移动到下一个用户模式筛选器。 实际上,数据可能永远不会传入用户模式,但可能会直接从一个内核模式设备流式传输到另一个内核模式设备,直到它在视频图形卡上呈现。 某些方案(例如捕获到文件)要求数据在某个时间点从内核模式传递到用户模式。 但是,此开关不一定要求将数据复制到内存中的新位置。

应用程序开发人员通常不需要关注内核流式处理的详细信息,但后台信息除外。 有关 WDM、内核流式处理、KsProxy 和相关主题的详细信息,请参阅 Microsoft DDK。

筛选器Graph及其组件