以引脚为中心的处理
编写 AVStream 微型驱动程序时,提供使用以下两种处理范例之一的筛选器:以引脚为中心的处理或 以筛选器为中心的处理。
以引脚为中心的处理意味着,当新帧到达引脚队列时,AVStream 会调用微型驱动程序的引脚进程调度例程。
以筛选器为中心的处理意味着,当每个实例化引脚上都有可用的数据帧时,AVStream 会调用微型驱动程序的筛选器进程调度例程。 请注意,这些定义指定默认行为;微型驱动程序可以通过在 KSPIN_DESCRIPTOR_EX 结构中设置标志来修改默认行为。
通常,软件筛选器使用以筛选器为中心的处理,而硬件筛选器使用以引脚为中心的处理。 例如,转换或呈现数据的硬件可以在以引脚为中心的筛选器上路由数据。 在极少数情况下,这些角色可能会逆转。
为了提供以引脚为中心的筛选器,微型驱动程序在每个KSPIN_DISPATCH结构中提供指向 AVStrMiniPinProcess 回调例程 的 指针;不要在 KSFILTER_DISPATCH 结构中提供处理调度。
如果微型驱动程序不修改KSPIN_DESCRIPTOR_EX结构中的标志设置,AVStream 会在三种情况下调用供应商提供的 AVStrMiniPinProcess 回调例程:
引脚将转换为最小处理状态。 帧必须已存在于队列中,并且引脚必须从小于最小处理状态转换为至少最小处理状态。
新帧到达。 引脚必须至少处于最小处理状态,并且前缘处或前面不得有帧。
微型驱动程序显式调用 KsPinAttemptProcessing。
默认情况下,暂停是最小处理状态。
此外,如果引脚的 AND 门关闭,AVStream 不会调用引脚进程调度。 例如,如果使用 KSGATEXxx 例程将其他 off 输入添加到引脚的 AND 门,则不会调用进程调度。
当 AVStream 调用 AVStrMiniPinProcess 时,它会提供指向具有可用数据的 pin 对象的指针。 然后,微型驱动程序的处理调度可以通过调用 KsPinGetLeadingEdgeStreamPointer 获取前导边缘指针。 然后,微型驱动程序使用流指针 API 操作 流 数据。
当 AVStream 调用 AVStrMiniPinProcess 调度时,使用以引脚为中心的处理的微型驱动程序可以通过在相关的 KSPIN_DESCRIPTOR_EX 结构中设置标志进行修改。 KSPIN_DESCRIPTOR_EX参考页上的标志说明与实施以引脚为中心的筛选器的供应商特别相关。
如果微型驱动程序通过 KsPinAcquireProcessingMutex 持有处理互斥体,处理尝试可能会失败。 如果微型驱动程序使用 KSGATE* 调用直接操作门,也可能会出现问题。
Windows 驱动程序工具包示例中的 AVStream 模拟硬件示例驱动程序 (AVSHwS) 是用于模拟硬件的以引脚为中心的捕获驱动程序。 Avshws 示例演示如何 通过 AVStream 实现 DMA。