共用方式為


UVC 裝置的 DShow Bridge 實作指南

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

概觀

Microsoft數位相機擷取堆疊包含名為 DirectShow 的舊版架構堆疊,以及稱為多媒體基礎的新式架構。 獨立硬體供應商 (IHVs) 和 OEM 必須為其裝置撰寫元件,以滿足這兩個管線。

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

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

  • 選擇加入或退出 DShow 網橋:裝置可以選擇加入或退出網橋,以選擇更符合其需求的管道。 現代管線會更加完整地記錄,並利用在多個版本中被添加到操作系統的功能。 經典管線目前處於維護模式中,因此進度落後。

  • FrameServer 中的 MJPEG 解壓縮:FrameServer 是虛擬化相機裝置的服務。 這可讓來自裝置的 Pin 在多個客戶端之間共用。 具有優化的 Media Foundation 解壓縮器的架構可以利用此功能在 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 Bridge 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 一個自定義屬性

自訂屬性區段(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 屬性區段 (2.0 描述項)

Offset 領域 大小 (位元組) 價值
0 wLength 2 這個描述元的位元組長度
4 wDescriptorType 2 0x00000004(REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 屬性名稱 變數 屬性名稱的長度
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)
}

資源

Microsoft USB 裝置的 OS 描述項

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

USB 規格