共用方式為


支援視訊擷取裝置和其他子裝置

顯示迷你埠驅動程式和視訊擷取裝置或其他子裝置的驅動程式,可以共同定義一個私人介面,讓子裝置的驅動程式能透過父迷你埠驅動程式與其裝置進行通訊。 子視訊擷取驅動程序必須與父顯示器迷你埠驅動程序緊密結合。 事實上,視訊擷取可能會實作為顯示迷你埠驅動程式的一部分。 視訊擷取驅動程式可以使用私人介面搭配顯示迷你埠驅動程式,以存取 I2C 總線,以及其他用途。

為了初始化私有介面,視訊擷取驅動程式會將 IRP_MN_QUERY_INTERFACE 請求傳送至顯示埠驅動程式(作為 Dxgkrnl.sys的一部分)的顯示迷你端口驅動程式。 顯示埠驅動程式收到這類要求之後,它會呼叫迷你埠驅動程式的 DxgkDdiQueryInterface 函式,並將指標傳遞至包含初始化私用介面資訊的 QUERY_INTERFACE 結構。

注意 如果視訊擷取實作為顯示迷你埠驅動程式的一部分,視訊擷取可能會直接呼叫 DxgkDdiQueryInterface

子裝置的每個驅動程式(包括視訊擷取裝置)都必須傳回適配卡 GUID,指出裝置相關聯的硬體。 配接器 GUID 會在初始化配接器時,透過 DxgkStartInfo 參數,傳送給 DxgkDdiStartDevice 函式。這個 GUID 包含在 DXGK_START_INFO 結構中的 AdapterGuid 成員,並提供給顯示迷你埠驅動程式。 使用者模式擷取元件後續可以將此配接器 GUID 對應至顯示配接器。

在 Microsoft Windows 2000 顯示驅動程式模型中,視訊擷取應用程式會將系統記憶體擷取緩衝區傳送至核心模式。 然後,核心模式會使用 記憶體描述元清單 (MDL) 結構描述系統記憶體緩衝區,並將 MDL 傳送至視訊擷取驅動程式。 除了支援擷取至系統記憶體之外,Windows Vista 顯示驅動程式模型還支援擷取到視訊記憶體。 Direct3D 運行時間會呼叫 DirectX Video Acceleration 2.0 類型函式,以指示 GPU 對擷取數據執行後處理。 使用者模式顯示驅動程式不會傳送 MDL 來描述視訊記憶體緩衝區,而是傳送用來擷取緩衝區配置的 D3DKMT_HANDLE 類型的句柄值。 因此,視訊擷取驅動程式和顯示迷你埠驅動程序組合可以使用現有的回呼函式,例如 DxgkCbGetHandleData 來參考描述擷取緩衝區的私人數據。 驅動程式組合也可以使用 DxgkCbGetCaptureAddress 回呼函式來傳回擷取緩衝區的實體位址。

影片擷取應用程式呼叫 Direct3D 運行時間以建立擷取緩衝區;運行時間隨後會呼叫使用者模式顯示驅動程式。 運行時間會呼叫使用者模式顯示驅動程式的 CreateResource 函式,並在 D3DDDIARG_CREATERESOURCE 結構的 Flags 成員中設定 CaptureBuffer 位字段旗標來建立擷取緩衝區。 當記憶體管理員呼叫顯示迷你埠驅動程式的 DxgkDdiCreateAllocation 函式以建立擷取緩衝區的配置時,顯示迷你埠驅動程式必須同時指定給視頻記憶體管理員的 擷取 位字段旗標。 建立擷取緩衝區時,會立即釘選在記憶體中,而且在釋放它們之前不會取消釘選。 因為擷取堆疊必須將擷取緩衝區的核心模式配置句柄傳送至擷取驅動程式,運行時間會呼叫使用者模式顯示驅動程式的 GetCaptureAllocationHandle 函式,將每個資源句柄對應至該資源的核心模式配置句柄。

擷取驅動程式可以報告它是否支援直接擷取至系統記憶體。 如果擷取驅動程序支援直接擷取至系統記憶體,則 MDL 會針對此目的傳送至擷取驅動程式。 如果擷取驅動程式不支援直接擷取至系統記憶體,運行時間會建立視訊記憶體擷取緩衝區,而擷取驅動程序必須填滿它們。 系統會呼叫使用者模式顯示驅動程式的 CaptureToSysMem 函式,將擷取緩衝區的內容複製到系統記憶體介面。 運行時間可以使用 CaptureToSysMem,而非使用 Blt 函式,以利用特殊硬體來進行位塊傳輸(bitblt),無需使用者模式顯示驅動程式呼叫 pfnRenderCb 函式。

因為 AVStream 控制影片擷取,因此 DirectX 圖形核心子系統無法知曉影片擷取何時發生。 不過,圖形核心子系統會了解用作擷取緩衝區的分配。 當擷取緩衝區即將終結時,圖形核心子系統會呼叫 display miniport 驅動程式的 DxgkDdiStopCapture 函式,指出擷取作業必須立即停止使用配置作為擷取緩衝區。 如果擷取作業已經透過擷取堆疊停止,驅動程式可以安全地忽略呼叫。