狀態轉換
為了確保資源配置有順序,只允許可能的核心串流狀態轉換子集。 下表列出允許的轉換,以及 Stream 類別迷你驅動程式在這類轉換期間通常會執行的工作。
轉換 | 描述 |
---|---|
停止暫停 |
配置資源。 讀取 SRB 會在轉換至 KSSTATE_PAUSE 完成之後排入佇列。 |
暫停以執行 |
開始串流處理。 |
執行 以暫停 |
停止串流。 未處理的讀取 SRB 會保留在迷你驅動程式所維護的佇列中。 |
暫停以停止 |
解除配置資源並完成所有未處理的讀取 SRB。 尚未填入影像的 SRB 在KSSTREAM_HEADER結構的DataUsed成員中,會以零長度完成。 |
注意 :轉換可以在 KSSTATE_PAUSE 和 KSSTATE_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_RUN或KSSTATE_RUNKSSTATE_PAUSE時,更新KS_FRAME_INFO、KS_VBI_FRAME_INFO或KSPROPERTY_DROPPEDFRAMES_CURRENT_S的 PictureNumber或DropCount成員。 如需詳細資訊,請參閱 擷取影片。