適用於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)
}