重置 AVStream 编解码器中的状态

若要放弃流数据并重置流状态,媒体流式处理管道会将MFT_MESSAGE_COMMAND_FLUSH发送到 MFT。 当 HW MFT 收到MFT_MESSAGE_COMMAND_FLUSH时,MFT 会将值为 KSRESET_BEGIN 的IOCTL_KS_RESET_STATE发送到输入和输出引脚。 微型驱动程序应通过在 KSPIN_DISPATCH 的 Reset 成员中指定 AVStrMiniPinReset 回调来订阅接收重置通知。

当驱动程序收到此 IOCTL 时,它应删除所有未完成的克隆指针并重置以前的所有内部状态。 驱动程序刷新挂起的 IO 请求后,会收到另一个值为 KSRESET_END 的IOCTL_KS_RESET_STATE。

此时,微型驱动程序应已准备好接受来自下一个流的新输入。

请注意,若要使重置正常工作,微型驱动程序必须通过在KSFILTER_DESCRIPTOR结构的Connections 成员中提供类型为KSTOPOLOGY_CONNECTION的数组来指定输入和输出引脚之间的拓扑连接。

在以下方案中,还会发送重置 IOCTL。 当驱动程序在流标头上设置KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM标志并解锁流指针时,KS 会刷新队列,这会在驱动程序中生成值KSRESET_END的IOCTL_KS_RESET_STATE调用。

在这种情况下,当驱动程序收到没有前面的开始请求的结束请求时,驱动程序应设置 KSPINResetState 为 KSRESET_END。 这种情况仅适用于输出引脚。