状态转换

为了确保资源分配有序,只允许可能的内核流状态转换的子集。 下表列出了允许的转换以及 Stream 类微型驱动程序在此类转换期间通常执行的任务。

切换 说明

停止以暂停

分配资源。 到 KSSTATE_PAUSE 转换完成后,读取 SRB 将排队。

暂停以运行

开始流式处理。

运行 以暂停

停止流式处理。 未完成的读取 SRB 保留在微型驱动程序维护的队列中。

暂停以停止

解除分配资源并完成所有未完成的读取 SRB。 尚未填充图像的 SRB 在 KSSTREAM_HEADER 结构的 DataUsed 成员中以零长度完成。

注意:在返回到KSSTATE_STOP状态之前,转换可以在KSSTATE_PAUSEKSSTATE_RUN状态之间循环多次。 视频捕获微型驱动程序应预期转换,例如:

KSSTATE_STOP ->KSSTATE_ACQUIRE ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE ->KSSTATE_RUN ->KSSTATE_PAUSE -> KSSTATE_STOP

当流处于 KSSTATE_STOP 状态时,微型驱动程序必须立即完成所有未完成的数据读取 SRB。

由于用户模式应用程序在流式处理时可能会意外结束,因此所有 Stream 类微型驱动程序必须随时接受并处理来自 Stream 类接口 的SRB_CLOSE_STREAM 请求。 在 Stream 类接口将SRB_CLOSE_STREAM发送到微型驱动程序之前,它会通过微型驱动程序的 HwCancelPacket 例程取消所有未完成的缓冲区。 请注意,在应用程序终止之前,无法将流状态设置为 KSSTATE_STOP

KSSTATE_PAUSEKSSTATE_RUNKSSTATE_RUN 到 KSSTATE_PAUSE 的转换时,不要更新 KS_FRAME_INFO、KS_VBI_FRAME_INFO KSPROPERTY_DROPPEDFRAMES_CURRENT_SPictureNumberDropCount 成员。 有关详细信息,请参阅 捕获视频