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