狀態轉換

為了確保資源配置有順序,只允許可能的核心串流狀態轉換子集。 下表列出允許的轉換,以及 Stream 類別迷你驅動程式在這類轉換期間通常會執行的工作。

轉換 描述

停止暫停

配置資源。 讀取 SRB 會在轉換至 KSSTATE_PAUSE 完成之後排入佇列。

暫停以執行

開始串流處理。

執行 以暫停

停止串流。 未處理的讀取 SRB 會保留在迷你驅動程式所維護的佇列中。

暫停以停止

解除配置資源並完成所有未處理的讀取 SRB。 尚未填入影像的 SRB 在KSSTREAM_HEADER結構的DataUsed成員中,會以零長度完成。

注意 :轉換可以在 KSSTATE_PAUSEKSSTATE_RUN 狀態之間迴圈多次,然後再返回 KSSTATE_STOP 狀態。 視訊擷取迷你驅動程式應該會預期轉換如下:

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傳送至 minidriver 之前,它會透過 minidriver 的 HwCancelPacket 常式取消所有未處理的緩衝區。 請注意,在應用程式終止之前,資料流程狀態無法設定為 KSSTATE_STOP

請勿在從KSSTATE_PAUSE轉換到KSSTATE_RUNKSSTATE_RUNKSSTATE_PAUSE時,更新KS_FRAME_INFOKS_VBI_FRAME_INFO或KSPROPERTY_DROPPEDFRAMES_CURRENT_S的 PictureNumberDropCount成員。 如需詳細資訊,請參閱 擷取影片