状态转换

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

过渡 DESCRIPTION

停止以暂停

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

暂停以运行

开始流媒体播放。

运行以暂停

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

暂停以停止

解除分配资源并完成所有未完成的读取 SRB。 尚未填充图像的 SRBs 在 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_PAUSE转换到KSSTATE_RUN或从KSSTATE_RUN转换到KSSTATE_PAUSE时更新KS_FRAME_INFOKS_VBI_FRAME_INFOKSPROPERTY_DROPPEDFRAMES_CURRENT_SPictureNumberDropCount字段。 有关详细信息,请参阅 “捕获视频”。