根據預設,每個AVStream佇列都包含 前置邊緣 數據流指標。 前置邊緣會在進入佇列時指向新的框架。 具體來說,前端一開始會指向第一個到達佇列的幀,而且在迷你驅動程序移動之前不會移動。 AVStream 會建立前置邊緣,然後存在於佇列的存留期。 Minidrivers 可以使用 Microsoft 所提供的函式來操作前緣。
當新的畫格到達佇列時,AVStream 會將前導邊緣設定為指向此畫格,前提是前導邊緣尚未指向任何畫格。
若要取得前置邊緣數據流指標的指標,迷你驅動程式會呼叫 KsPinGetLeadingEdgeStreamPointer。
迷你驅動程式負責推進領先邊緣,但以下表總結的兩種情況除外。
| 情況 | AVStream 的行為 |
|---|---|
一個資料幀抵達了一個之前空白的佇列。 |
AVStream 會將前置邊緣設定為指向此畫面。 |
前置邊緣指向框架。 對應此框架的 IRP 已被取消。 |
AVStream 推動領先科技。 前置邊緣現在指向較新的框架。 |
如需更多關於串流指標推進的資訊,請參閱串流指標簡介。
指定後緣流指標
Minidrivers 可以指定佇列具有末端邊緣流指標。 尾端邊緣通常表示迷你驅動程式最舊的感興趣的框架。 若要指定尾端邊緣,請在相關KSPIN_DESCRIPTOR_EX結構的 Flags 成員中設定 KSPIN_FLAG_DISTINCT_TRAILING_EDGE 旗標。 然後呼叫 KsPinGetTrailingEdgeStreamPointer 以取得後緣流指標。
當尾端前進時,其之前指向的框架的參考計數降至零,然後該框架完成。 如果框架是其 IRP 中包含的最後一個,接收針腳就會完成呼叫端的 IRP;來源針腳會將 IRP 傳送至其連接的針腳。
維護框架視窗
由於 串流指標簡介中所述的框架參考計數規則,前置和尾端邊緣之間的框架會保留在佇列中,直到取消為止,即使數據流指標未參考框架也一樣。 因此,迷你驅動程式可以使用前後邊緣指標來維護多個連續幀的工作視窗。 例如,視窗中的框架可能會等待處理或填滿。
在下圖中,最舊的框架位於底部。 新的框架抵達頂部。 每個畫面中的數位都是該畫面的參考計數。 當數據流指標往前移動時,它們就會在此圖表中向上移動。
最左邊的佇列顯示迷你驅動程式如何使用尾端邊緣來建立一組工作框架。 儘管沒有數據流指標參考這些畫面,但前置和尾端邊緣之間的每個框架都有一個參考計數。
中間佇列是 複製數據流指標的範例。 驅動程式已重複複製,然後推進前緣,如 AVStream DMA 服務中的釘選程式步驟中所述。
最右邊的佇列顯示 minidriver 如何使用數據流指標複製來維護尾端邊緣後方框架的參考計數。