共用方式為


適用於UVC裝置的 DShow Bridge 實作指引

本主題提供實作指引,以針對符合 USB 視訊類別的相機和裝置設定 DShow Bridge (UVC) 規格。 平臺會使用來自 USB 總線標準的 Microsoft OS 描述元 來設定 DShow Bridge。 擴充屬性OS描述元是USB標準描述元的延伸模組,由USB裝置用來傳回未透過標準規格啟用的Windows特定裝置屬性。

概觀

Microsoft 數位相機擷取堆疊包含稱為 DirectShow 的舊版架構堆疊,以及稱為 Multimedia Foundation 的新式架構。 IHD 和 OEM 必須為其裝置撰寫元件,以滿足這兩個管線。

DShow Bridge 是利用媒體基礎平臺橋接 DShow 管線的目的所撰寫。 這可啟用真正的通用驅動程式,讓 IHV 和 OEM 可以撰寫可在 Windows 1607 版和更新版本上使用 MediaFoundation 和 DShow 應用程式執行的驅動程式。 啟用 DShow Bridge 加入加入後,DShow 應用程式和共用應用程式可以同時共用相同的相機硬體。

IHD 和 OEM 可能需要豁免控管 DShow 管線的原則。 合作夥伴可以使用 OS 描述項來啟用下列功能:

  • 加入宣告或退出 DShow Bridge:裝置可以選擇加入或退出 Bridge,以更符合其需求。 新式管線會更徹底記載,並利用透過多個版本新增至OS的功能。 舊版管線處於維護模式,落後。

  • FrameServer 中的 MJPEG 解壓縮:FrameServer 是虛擬化相機裝置的服務。 這可讓來自裝置的 Pin 在多個客戶端之間共用。 具有優化媒體基礎解壓縮器的架構可以使用此功能來譯碼 FrameServer 中的 MJPEG。 未壓縮的翻譯媒體格式 (YUY2) 會提供給多個應用程式。 數據流只會針對多個可能的用戶端解壓縮一次。 這可改善應用程式的效能。 下圖顯示相機擷取管線:

相機擷取管線。

OEM 和 IHV 封裝其 USB 相機裝置可以使用 USB 總線標準的擴充屬性 OS 功能描述元規格來設定 DShow Bridge,而不需為其 UVC 驅動程式進行任何 INF 檔案變更。

OS 描述項可讓裝置定義 USB 裝置或複合裝置的登錄屬性。

若要使用 USB OS 描述元設定 DShow 網橋,主機軟體應該為每個 USB 裝置介面建立下列登錄機碼:

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters

DWORD: EnableDshowRedirection

EnableDshowRedirection 登錄值是位掩碼值,可用來設定 DShow Bridge,如下表所述。

位掩碼 描述 備註
0x00000001 選擇加入 DShow 網橋 0 – 退出
1 – 加入
0x00000002 在 FrameServer 中啟用 MJPEG 譯碼一次 (請參閱下面的附註) 0 – (未公開任何作業的 MJPEG 壓縮媒體類型)
1 – 從 MJPEG 公開翻譯的未壓縮媒體類型 (YUY2)

注意

在 FrameServer 中啟用 MJPEG 譯碼一次,然後將未壓縮的翻譯媒體格式 (YUY2) 提供給多個應用程式。 數據流只會針對多個可能的用戶端解壓縮一次。 這可改善應用程式的效能。

範例版面配置

下列規格包含下列範例:

  • Microsoft OS 擴充描述項規格 1.0

  • Microsoft OS 2.0 描述項規格

Microsoft OS 擴充屬性描述項規格 1.0 版

擴充屬性OS描述項有兩個元件

  • 固定長度標頭區段

  • 一或多個可變長度的自定義屬性區段,其遵循標頭區段

標頭區段

標頭區段描述整個擴充屬性描述項,包括總長度和版本號碼。

Offset 欄位 大小 (位元組) 描述
0 dwLength 4 0x0000004c 76 十進位
4 bcdVersion 2 0x0100 版本 1.0
6 wIndex 2 0x005 擴充屬性OS描述項
8 wCount 2 0x0001 一個自定義屬性

Custom Property Section (1.0 描述元)

USB HID 裝置的擴充屬性 OS 描述項有一個自定義屬性區段,可建立 EnableDshowRedirection DWORD 登錄機碼。

Offset 欄位 大小 (位元組)
0 dwSize 4 此屬性的 0x00000042 (66 個字節)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (Unicode 字串)
58 dwPropertyDataLength 4 0x00000004 (Sizeof (DWORD) )
62 bPropertyData 4 0x00000001 (DWORD 資料)

Microsoft OS 2.0 描述項規格

此範例示範如何使用 Microsoft 2.0 描述元集來提供適用於 Windows 版本的 EnableDshowRedirection 的單一 DWORD 登錄值。

Custom Property Section (2.0 描述元)

Offset 欄位 大小 (位元組)
0 wLength 2 這個描述項的位元組長度
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName 變數 屬性名稱的長度
58 dwPropertyDataLength 2 屬性數據的長度
62 PropertyData 變數 屬性數據
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,                 // wLength - 12 bytes
    0x00, 0x00,                 // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06,     // dwWindowsVersion – 0x06030000 for future Windows version
    0x4A, 0x00,                 // wTotalLength – 72 bytes

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x3E, 0x00,                 // wLength - 62 bytes
    0x04, 0x00,                 // wDescriptorType – 5 for Registry Property
    0x04, 0x00,                 // wPropertyDataType - 4 for REG_DWORD
    0x30, 0x00,                 // wPropertyNameLength – 48 bytes
    0x45, 0x00, 0x6E, 0x00,     // Property Name - "EnableDshowRedirection"
    0x61, 0x00, 0x62, 0x00,
    0x6C, 0x00, 0x65, 0x00,
    0x44, 0x00, 0x73, 0x00,
    0x68, 0x00, 0x6F, 0x00,
    0x77, 0x00, 0x52, 0x00,
    0x65, 0x00, 0x64, 0x00,
    0x69, 0x00, 0x72, 0x00,
    0x65, 0x00, 0x63, 0x00,
    0x74, 0x00, 0x69, 0x00,
    0x6F, 0x00, 0x6E, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x04, 0x00,                 // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0x00, 0x00      // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}

資源

適用於USB裝置的 Microsoft OS 描述項

USB 一般父驅動程式 (Usbccgp.sys)

USB 規格