以引脚为中心的处理

编写 AVStream 微型驱动程序时,可以提供使用两种处理范例之一的筛选器:以引脚为中心的处理或 以筛选器为中心的处理

以引脚为中心的处理意味着,当新帧到达引脚队列时,AVStream 会调用微型驱动程序的引脚进程调度例程。

以筛选器为中心的处理意味着,当每个实例化引脚上有可用的数据帧时,AVStream 会调用微型驱动程序的筛选器进程调度例程。 请注意,这些定义指定默认行为;微型驱动程序可以通过在 KSPIN_DESCRIPTOR_EX 结构中设置标志来修改默认行为。

通常,软件筛选器使用以筛选器为中心的处理,硬件筛选器使用以引脚为中心的处理。 例如,能够转换或渲染数据的硬件可能会在以引脚为中心的过滤器中重新路由数据。 在极少数情况下,这些角色可能会逆转。

为了提供以引脚为中心的筛选器,微型驱动程序提供了指向每个KSPIN_DISPATCH结构中的 AVStrMiniPinProcess 回调例程的指针;不要在KSFILTER_DISPATCH结构中提供处理调度。

如果微型驱动程序未修改KSPIN_DESCRIPTOR_EX结构中的标志设置,AVStream 会在三种情况下调用供应商提供的 AVStrMiniPinProcess 回调例程:

  • 引脚转换为最小处理状态。 帧必须已存在于队列中,引脚必须从小于最小处理状态转换为至少最小处理状态。

  • 新帧到达。 引脚必须至少处于最小处理状态,并且在前沿或前端不得存在帧。

  • Minidriver 显式调用 KsPinAttemptProcessing

默认情况下,暂停是最小处理状态。

此外,如果引脚的 AND 门关闭,AVStream 不会调用引脚进程调度程序。 例如,如果使用 KSGATEXxx 例程将附加的输入添加到引脚的 AND 门,则不会调用进程调度。

AVStream 调用 AVStrMiniPinProcess 时,它提供指向具有可用数据的 pin 对象的指针。 然后,微型驱动程序的处理调度可以通过调用 KsPinGetLeadingEdgeStreamPointer 来获取首端指针。 然后,微型驱动程序使用 流指针 API 来操作流数据。

使用以引脚为中心处理的微型驱动程序可以通过在相关 KSPIN_DESCRIPTOR_EX 结构中设置标志来修改 AVStream 调用 AVStrMiniPinProcess 调度的方式。 KSPIN_DESCRIPTOR_EX参考页上的标志说明与实现以引脚为核心的筛选器的供应商特别相关。

如果微型驱动程序通过 KsPinAcquireProcessingMutex 持有处理互斥体,则处理尝试可能会失败。 如果微型驱动程序使用 KSGATE* 调用直接操控门电路,也可能出现问题。

Windows 驱动程序工具包示例中的 AVStream 模拟硬件示例驱动程序(AVSHwS) 是模拟硬件的以引脚为中心的捕获驱动程序。 Avshws 示例演示如何 通过 AVStream 实现 DMA