本主題提供針對符合 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)
}